Thema: Delphi INI-Eintrag vergleichen?

Einzelnen Beitrag anzeigen

Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#18

Re: INI-Eintrag vergleichen?

  Alt 31. Jan 2008, 17:31
Zitat von Störtebeker:
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"??
Naja, da es sich bei Delphi um eine Objekt orientierte Sprache handelt, gibt es Objekte, die Dinge auslagern und kapseln, damit der Programmierer nachher sich nur noch um seine Arbeit kümmern muss.
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:
begin
  Application.Initialize;
  [...]
  Application.Run;
end;
Dort musst du nun einsteigen:
Delphi-Quellcode:
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;
FileExists benötigt SysUtils, also müssen wir die unter Uses einbinden:
Delphi-Quellcode:
uses
  SysUtils,
  [...];
Übrigens könnten manche sagen, das sein nicht perfekt, aber ich denke es ist verständlichsten, was wohl eher das Problem ist.

Application.FormCreate macht übrigens was ähnliches wie du bei TIniFile machen musst:
<Erster Übergabeparamter> := <Zweiter Übergabeparameter>.Create([...]); Diese Funktion mach aber darüberhinaus auch ein paar andere sachen

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!
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat