![]() |
Re: INI-Eintrag vergleichen?
Zitat:
|
Re: INI-Eintrag vergleichen?
Moin, Moin.
Ist der Fehler nicht hier zu suchen: Zitat:
Delphi-Quellcode:
oder?
if (Edit1.Text=Ini.ReadString('User', 'Name', '')) AND
(Edit2.Text=Ini.ReadString('Password', 'Password', '')) then begin //... //.. |
Re: INI-Eintrag vergleichen?
Danke, taaktaak. Jetzt startet das Programm schonmal, aber es scheint jetzt einen anderen Fehler zu geben, denn nun wird mir die folgende Fehlermeldung "vor die Augen geworfen":
Zitat:
|
Re: INI-Eintrag vergleichen?
Moin, Moin.
Na, die Fehlermeldung war schon zu erwarten...
Delphi-Quellcode:
In deinem letzten Codeschnipsel fehlen das INI.Create und die try-finally-Abschnitte. Schau mal in die vorherigen Texte, da steht eigentlich alles drin...
procedure TForm2.Button1Click(Sender: TObject;);
var Ini: TIniFile; begin if Edit1.Text:=Ini.ReadString('User', 'Name', '') AND Edit2.Text:=Ini.ReadString('Password', 'Password', '') then begin Form4.ShowModal; Form2.Hide; Form1.hide; end; end; Gruß Ralph |
Re: INI-Eintrag vergleichen?
Erstmal Danke für die Hinweise. Jetzt aber nochmal eine Verständnisfrage:
Ich will ja aus der INI lesen, dass heißt, sie ist bereits vorhanden. Und trotzdem das "Ini.Create"?? Code:
Delphi-Quellcode:
So, nun die Frage, wie ist das mit dem IF, hier als "Kommentar" hinzugefügt
procedure TForm2.Button1Click(Sender: TObject);
var Ini: TIniFile; begin //If Ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'ua44.ini'); try (Edit1.Text=Ini.ReadString('User', 'Name', '')) AND (Edit2.Text=Ini.ReadString('Password', 'Password', '')) finally FreeAndNil(Ini); end; //then begin Form4.ShowModal; Form2.Hide; Form1.hide; end; Wie ich vielleicht vorher hätte sagen sollen, sind die INIs "Neuland" für mich und daher muss ich öffters mal nachfragen. :oops: Naja, das mit dem Erstellen der INI mit "WriteString..." ging zwar gnz gut. Aber jetzt beim Auslesen hängt es halt. SRY. |
Re: INI-Eintrag vergleichen?
Zitat:
![]() |
Re: INI-Eintrag vergleichen?
TIniFile ist eine Klasse und muss daher erst instanziiert werden, deshalb ist das Create notwendig.
[edit] @Manuel :lol: , Spaßvogel :zwinker: [/edit] |
Re: INI-Eintrag vergleichen?
Zitat:
Nun wenn du "Ini : TIniFile" deklarierst, dann sagst du damit Delphi, dass hier ein Objekt ist. Normalerweise zeigt dieses Objekt aber ins nil (not in list, oder auch latein für "nichts"). Deshalb muss du das Objekt erstellen. Du kannst dir das so vorstellen, wir haben 2 GB (oder mher, je nach Betriebssystem) Knetmasse ^^, den sogenannten Arbeitsspeicher. Und du hast eine Schablone oder Form, das sogenannte TIniFile. Und für die Variable haben wir einen Teller. Nun ist der Teller beim Programmstart normalerweise leer (nur abgeswaschen muss er nicht sein ;) ). Wenn du nun z.B. die Farbe oder die Besonderheiten wissen willst, bekommst du eine EAccessViolation ("Zugriffsverletzung"), da du nicht auf die Eigenschaften zugreifen kannst. Deshalb erstellst du dein Objekt. Also nimmst du dir einen Klumpen Arbeitsspeicher und stechst das aus mithilfe der Form. Das ist das erstellen eines Objektes: <Objektvariable> := <Objektklasse>.Create[...] Jetzt kannst z.B. die Knete anmalen, oder verzieren. Das heißt, ein TIniFile.Create heißt nicht zwingend das die Datei erstellt wird, sondern, dass das Objekt erstellt wird. Übrigens die Sache wegen der Zwei Formulare. Da kannst du verschiedenen Ansätzen folgen, welche aber an sich ähnlich sind: Und zwar testest du, bevor du etwas erstellst, ob die Datei existiert. Ich hätte es jetzt im Projektcode gemacht. Also Quelltext des Projektes öffnen, und dann sollte dort sowas stehen:
Delphi-Quellcode:
Dort musst du nun einsteigen:
begin
Application.Initialize; [...] Application.Run; end;
Delphi-Quellcode:
FileExists benötigt SysUtils, also müssen wir die unter Uses einbinden:
begin
Application.Initialize; // Alles was hier stand auskommentieren! // Nun testen, ob die Datei vorhanden ist: if FileExists(...) then // Wenn die Datei existiert: Loginfenster erstellen Application.FormCreate({Hier musst du nun Form1 o.ä. reinschreiben}, {Hier das ganze mit einem T davor}) else // Ansonsten das Registierungsfenster erstellen Application.FormCreate({Hier musst du nun Form1 o.ä. reinschreiben}, {Hier das ganze mit einem T davor}) Application.Run; end;
Delphi-Quellcode:
Übrigens könnten manche sagen, das sein nicht perfekt, aber ich denke es ist verständlichsten, was wohl eher das Problem ist.
uses
SysUtils, [...]; Application.FormCreate macht übrigens was ähnliches wie du bei TIniFile machen musst:
Delphi-Quellcode:
Diese Funktion mach aber darüberhinaus auch ein paar andere sachen ;)
<Erster Übergabeparamter> := <Zweiter Übergabeparameter>.Create([...]);
Nun sollte es funktionieren. Aber nicht vergessen: Das, was du vorher hattest, dann löschen (oder wenn du dir nicht sicher bist: auskommentieren). MfG xZise PS: Ich hoffe ich konnte helfen! |
Re: INI-Eintrag vergleichen?
Danke, xZise für die deine Idee, wird dadurch möglicherweise auch mein Problem mit dem "Cannot change visible..." gelöst?
Dank der vielen hilfreichen Tipps funktioniert das mit der INI mitlerweile. Das einzige was jetzt noch stört ist der besagte Fehler mit dem "Visible" |
Re: INI-Eintrag vergleichen?
Zitat:
Du erstellst nämlich nur die Form, die du benötigst ;) MfG xZise |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz