![]() |
INI-Eintrag vergleichen?
Hi,
ich habe mir mal die Sachen mit den INIs durchgelesen und dachte mir, dass ich so auch die Loginabrage für mein Programm realisieren könnte. Folgendes Schema: Beim ersten Start des Programmes kommt eine Abrage mit Benutzername und Passwort. Wenn beide Felder gefüllt sind und auf Ok geklickt wird, soll ein INI-Eintrag mit Benutzername und Passwort erstellt werden. Beim nächsten Start des Programmes soll die eigentliche Loginabfrage kommen, sofern eine INI erstellt wurde. Ist dies nicht der Fall, soll erneut die "Registrierungabfrage" kommen. So, zurück zum Login: Nachdem der Benutzer seine Angaben getätigt hat und auf "Anmelden" klickt, sollen die Werte der Editfelder mit dem Eintrag der INI verglichen werden und wenn die Werte stimmen, soll das Programm gestartet werden. Sonst soll eine Fehlermeldung kommen. Ich glaube, dass ich mit dem Eintragen und Erstellen der INI nicht so große Probleme haben werde. ABER:[*] Wie mache ich das, dass bei Programmstart geprüft wird, ob die INI vorhanden ist und dass dann entweder erneut das "Registrierungsfenster"(INI exisitert nicht), oder das "Loginfenster"(INI existiert) kommt? [*] Und wie muss die IF-Abrage für den Vergleich aussehen? ---------------------------------------------------------------------------------------------------- P.S.: Unkompliziertere Methoden sind natürlich auch erwünscht. |
Re: INI-Eintrag vergleichen?
meinst du sowas hier??
das trägst du dann in oncreate methode der form ein..
Delphi-Quellcode:
if fileexists('meineini.ini') then (springe zum Loginfenster) else (springe zum Registrierungsfenster); |
Re: INI-Eintrag vergleichen?
Hallo,
ähm mittels ![]() Ich hoffe, ich habe dich richtig verstanden. Gruß |
Re: INI-Eintrag vergleichen?
Hallo,
also, das Erstellen der INI funzt, wie gewünscht. Nun setzte ich in das "OnCreate" Ereignis folgendes:
Delphi-Quellcode:
Nun kommt aber beim Start des Programmes (INI ist vorhanden) eine AccessViolation...
procedure TForm1.FormCreate(Sender: TObject);
begin if fileexists(ExtractFilePath(ParamStr(0))+'ua44.ini') then Form2.show//Login-Fenster else Form1.show;//Registrierungs-Fenster end; Zitat:
Delphi-Quellcode:
Die Form3 ist einfach nur ein Hinweisfenster, dass das Programm neu gestartet werden muss.
procedure TForm1.Button1Click(Sender: TObject);
var Ini: TIniFile; begin Ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'ua44.ini'); try Ini.WriteString('User','Name', Edit1.Text); Ini.WriteString('Password','Password', Edit2.Text); finally FreeAndNil(Ini); end; Form3.showmodal; end; Bitte helft mir... |
Re: INI-Eintrag vergleichen?
Moin,
deine Access Violation rührt wahrscheinlich daher, dass zum Zeitpunkt von Form1Create Form2 noch nicht erzeugt wurde, du aber bereits eine Methode der nicht vorhandenen Instanz aufrufst. Du solltest deine Login- und Register-Dialoge von dem Form-Handling der Application abkoppeln. Ich würde eine eigene Unit vorsehen, in deren Initialisierungsabschnitt die Registrierung und das Login stattfinden kann, bevor die MainForm sichtbar wird. Grüße vom marabu |
Re: INI-Eintrag vergleichen?
Hallo
Wie Marabu schon anmerkt ... Mache so etwas nicht im FormCreate, Das solltest du nur für initialisierungen verwenden, aber keine Programmlogik, da hier erst noch "aufgebaut wird". Besser im FormShow oder noch besser im FormActivate. Aber hier Achtung, diese können mehrfach aufgerufen werden. FormActivate jedesmal wenn du dein Programm aktvierst, also bei einem anderen Programm warst z.b. WindowsExplorer. Ich verwende in FormAktivate zumeist ein extra angelegte Variable in der Form, worin ich mir Merke ob ich schon einmal hier war
Delphi-Quellcode:
type
TfrmMain = class(TForm) ... private { Private-Deklarationen } oAlreadyActivated : Boolean; ... public { Public-Deklarationen } ... end; procedure TfrmMain.FormCreate(Sender: TObject); begin ... oAlreadyActivated := False; ... end; procedure TForm1.FormActivate(Sender: TObject); begin if Not(oAlreadyActivated) then begin oAlreadyActivated := True; // Do your one time activation issues here ... ... end; ... end; |
Re: INI-Eintrag vergleichen?
Hi nochmal,
sry. für die vielleicht "eigentlich" einfache Frage: Ich habe jetzt
Delphi-Quellcode:
den Code ins FormActivate Ereignis gesetzt. Nun ist es bei dem Code so, dass beide Formen angezeigt werden, das Login-Fenster kommt.
procedure TForm1.FormActivate(Sender: TObject);
begin if fileexists(ExtractFilePath(ParamStr(0))+'ua44.ini') then Form2.show//Login-Fenster else Form1.show;//Registrierungs-Fenster end; Wenn ich nun dazuschreibe:
Delphi-Quellcode:
kommt Delphi mit der Meldung
procedure TForm1.FormActivate(Sender: TObject);
begin if fileexists(ExtractFilePath(ParamStr(0))+'ua44.ini') then begin Form2.show;//Login-Fenster Form1.hide end else begin Form1.show;//Registrierungs-Fenster end; end; Zitat:
Delphi-Quellcode:
versucht -> gleicher Fehler.
Form1.visible:=false;
P.S.: Gibt es in der DP eigentlich eine Rubrik, wo häufige Fehler beschrieben sind, um solche Fragen auszuschließen? |
Re: INI-Eintrag vergleichen?
So, ich habe es jetzt etwas umständlich und nicht wirklich "perfekt" realisiert.
Ich habe die Loginform einfach etwas größer gemacht, als die Reg-Form, sodass die Reg-Form hinter der Loginform verschwindet und so nicht sichtbar ist. Nun kommt die IF-Abfrage, bei der ich jetzt wieder scheitere: Folgendes habe ich versucht, ohne erfolg:
Delphi-Quellcode:
Please help....
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; Ein Vorschlag zu meinem vorherigen, geposteten Problem mit dem "Cannot change visible..." wäre auch sehr hilfreich. Danke schonmal im Voraus. |
Re: INI-Eintrag vergleichen?
In Pascal-Dialekten werden Vergleiche mit '=' durchgeführt, nur Zuweisungen mit ':='. :roll:
|
Re: INI-Eintrag vergleichen?
Wenn ich die ":" vor den "=" wegnehme, setzt Delphi den Cursor vor das "=" und mit:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:04 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