Entwickler-Ecke

Sonstiges (Delphi) - EinstellungenForm.Show während HauptForm.FormCreate ?!


Querkopf - Sa 08.03.03 13:54
Titel: EinstellungenForm.Show während HauptForm.FormCreate ?!
Hallo,

ich habe folgendes Problem:

Wenn ich mein Programm starte, überprüft es vorher, ob eine Ini-Datei existiert. Gibt es sie, wird das Programm mind. zum 2. Mal gestartet, und zwar mit den gespeicherten Einstellungen.
Gibt es sie nicht, soll das Programm ein zweites Fenster aufrufen, in dem man zum ersten Mal die gewünschten Einstellungen macht, die dann in die Ini-Datei gespeichert werden. Jetzt mein Problem : Ich kann während des FormCreates meines Hauptfensters nicht auf das Fenster Einstellungen zugreifen. Von den Variablendeklarationen hab ich abgesehen, daran liegts nicht. Ich habe folgenden Code :


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure THaupt.FormCreate(Sender: TObject);
begin
  if FileExists(IniFileName) then
  .
  .
  else
    begin
      Haupt.Enabled := False;
      Einstellungen.Show;
    end;
.
.
end;


Ich bekomme beim Programmstart leider nur eine Zugriffsverletzung :(

Und wenn ich grad dabei bin: Kann ich in die Variable Ini-File einen Parameter einfügen, so dass die Ini direkt in das Verzeichnes der Exe gespeichert wird, ohne dass ich einen absoluten Pfad angeben muss?

Gruss, Pierre


MSCH - Sa 08.03.03 14:14

Schau mal in deine Projektoptionen unter Formulare. Dein Hauptanwendung wird als erstes erstellt - und in der Erstellungsmethode Create() ruft du ein Fenster mit Show() auf, welches noch garnicht existiert. Daher die Fehlermeldung.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
Procedure THaupt.FormCreate();
begin
  if exists()...
  else
    try
      Einstellungen:= TEinstellungen.Create(Self);
      Einstellungen.ShowModal;
   Finally
     Einstellungen.free;
   ...
end;


Achte darauf, das ein Einstellungsfenster NICHT automatisch erstellt wird.

Deine zweite Frage:
...
INIFileName:= ExtractFilePath(ParamStr(0))+'TEST.INI';
...

Grüße
MSCH


Querkopf - Sa 08.03.03 14:25

thxle :D


Popov - Sa 08.03.03 14:44

Du kannst auch

INIFileName:= ChangeFileExt(ParamStr(0), '.INI');

nehmen. In diesem Fall hat die Ini den gleichen Namen wie das Programm und ist im gleichen Verzeichnis.