AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

INI-Eintrag vergleichen?

Ein Thema von Störtebeker · begonnen am 24. Jan 2008 · letzter Beitrag vom 16. Feb 2008
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Störtebeker
Störtebeker

Registriert seit: 9. Jul 2007
398 Beiträge
 
#1

INI-Eintrag vergleichen?

  Alt 24. Jan 2008, 21:01
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.
"And he piled upon the whale´s white hump - a sum of all the rage and hate felt by his whole race.
If his chest had been a cannon, he would have shot his heart upon it."
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: INI-Eintrag vergleichen?

  Alt 24. Jan 2008, 21:04
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);
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: INI-Eintrag vergleichen?

  Alt 24. Jan 2008, 21:04
Hallo,

ähm mittels Delphi-Referenz durchsuchenFileExists kannst du überprüfen, ob eine Datei existiert. Zum Vergleichen der Daten musst du lediglich Name + Passworthash aus der Ini lesen, den Hash des im Formular eingegebenen Passworts generieren und vergleichen (if-Abfrage).

Ich hoffe, ich habe dich richtig verstanden.

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von Störtebeker
Störtebeker

Registriert seit: 9. Jul 2007
398 Beiträge
 
#4

Re: INI-Eintrag vergleichen?

  Alt 29. Jan 2008, 23:07
Hallo,

also, das Erstellen der INI funzt, wie gewünscht. Nun setzte ich in das "OnCreate" Ereignis folgendes:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
if fileexists(ExtractFilePath(ParamStr(0))+'ua44.ini') then
Form2.show//Login-Fenster
else
Form1.show;//Registrierungs-Fenster
end;
Nun kommt aber beim Start des Programmes (INI ist vorhanden) eine AccessViolation...

Zitat:
Project Project1.exe raised exception class EAccessViolation with message 'Access Violation at adress 0044A49E in module
'Project1.exe'. Read of adress...
Der Code zum erstellen der INI sieht folgendermasßen aus:
Delphi-Quellcode:
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;
Die Form3 ist einfach nur ein Hinweisfenster, dass das Programm neu gestartet werden muss.

Bitte helft mir...
"And he piled upon the whale´s white hump - a sum of all the rage and hate felt by his whole race.
If his chest had been a cannon, he would have shot his heart upon it."
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: INI-Eintrag vergleichen?

  Alt 30. Jan 2008, 07:32
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
  Mit Zitat antworten Zitat
Benutzerbild von peschai
peschai

Registriert seit: 15. Feb 2004
Ort: Göppingen
270 Beiträge
 
Delphi XE5 Professional
 
#6

Re: INI-Eintrag vergleichen?

  Alt 30. Jan 2008, 08:34
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;
Peter Schaible
  Mit Zitat antworten Zitat
Benutzerbild von Störtebeker
Störtebeker

Registriert seit: 9. Jul 2007
398 Beiträge
 
#7

Re: INI-Eintrag vergleichen?

  Alt 30. Jan 2008, 11:26
Hi nochmal,

sry. für die vielleicht "eigentlich" einfache Frage:

Ich habe jetzt

Delphi-Quellcode:
procedure TForm1.FormActivate(Sender: TObject);
begin
if fileexists(ExtractFilePath(ParamStr(0))+'ua44.ini') then
Form2.show//Login-Fenster
else
Form1.show;//Registrierungs-Fenster
end;
den Code ins FormActivate Ereignis gesetzt. Nun ist es bei dem Code so, dass beide Formen angezeigt werden, das Login-Fenster kommt.
Wenn ich nun dazuschreibe:

Delphi-Quellcode:
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;
kommt Delphi mit der Meldung
Zitat:
...Cannot change Visible in onShow or onHide...
Habe es auch schon mit: Form1.visible:=false; versucht -> gleicher Fehler.

P.S.:
Gibt es in der DP eigentlich eine Rubrik, wo häufige Fehler beschrieben sind, um solche Fragen auszuschließen?
"And he piled upon the whale´s white hump - a sum of all the rage and hate felt by his whole race.
If his chest had been a cannon, he would have shot his heart upon it."
  Mit Zitat antworten Zitat
Benutzerbild von Störtebeker
Störtebeker

Registriert seit: 9. Jul 2007
398 Beiträge
 
#8

Re: INI-Eintrag vergleichen?

  Alt 30. Jan 2008, 19:35
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:
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;
Please help....

Ein Vorschlag zu meinem vorherigen, geposteten Problem mit dem "Cannot change visible..." wäre auch sehr hilfreich.

Danke schonmal im Voraus.
"And he piled upon the whale´s white hump - a sum of all the rage and hate felt by his whole race.
If his chest had been a cannon, he would have shot his heart upon it."
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: INI-Eintrag vergleichen?

  Alt 30. Jan 2008, 20:28
In Pascal-Dialekten werden Vergleiche mit '=' durchgeführt, nur Zuweisungen mit ':='.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Störtebeker
Störtebeker

Registriert seit: 9. Jul 2007
398 Beiträge
 
#10

Re: INI-Eintrag vergleichen?

  Alt 30. Jan 2008, 21:49
Wenn ich die ":" vor den "=" wegnehme, setzt Delphi den Cursor vor das "=" und mit:

Zitat:
[Error] Operator not applicable to this operand type
>> Mit den Doppelpunkten, kommt dieser Fehler bei dem "THEN BEGIN"
"And he piled upon the whale´s white hump - a sum of all the rage and hate felt by his whole race.
If his chest had been a cannon, he would have shot his heart upon it."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz