Delphi 4: Formular löschen

Hallo Delphianer,
beim Start des Formulares 1 werden in ‚FormActivate‘ einige Aktionen durchgeführt und das Form1 ist solange sichtbar. Die letzte Aktion soll sein, daß in Form1 das Formular 2 aufgerufen wird. Da die Anwendung nie mehr zu Form1 zurückkehrt, soll Form1 gelöscht werden. Auch Versuche, Form1 zu verstecken (z.B. mit ‚Hide‘ oder ‚Visible := false‘) schlugen fehl, da sich alles in ‚FormActivate‘ abspielt und dann die Exception-Fehlermeldung erscheint.

procedure TForm1.FormActivate(Sender: TObject);
begin
.
.
.
form2.showmodal;
end;

Frage 1: Wie kann ich i.o. Beispiel das Formular 1 aus dem Speicher löschen, da es nicht mehr benutzt wird ?

Frage 2: Wie kann ich i.o. Beispiel das Formular 1 verstecken, um evtl. später darauf zurückzugreifen ?

Hätte jemand eine Lösung für mich ?
MfG.
Uwe

Hallo Delphianer,
beim Start des Formulares 1 werden in
‚FormActivate‘ einige Aktionen
durchgeführt und das Form1 ist solange
sichtbar. Die letzte Aktion soll sein,
daß in Form1 das Formular 2 aufgerufen
wird. Da die Anwendung nie mehr zu Form1
zurückkehrt, soll Form1 gelöscht werden.
Auch Versuche, Form1 zu verstecken (z.B.
mit ‚Hide‘ oder ‚Visible := false‘)
schlugen fehl, da sich alles in
‚FormActivate‘ abspielt und dann die
Exception-Fehlermeldung erscheint.

procedure TForm1.FormActivate(Sender:
TObject);
begin
.
.
.
form2.showmodal;
end;

Frage 1: Wie kann ich i.o. Beispiel das
Formular 1 aus dem Speicher löschen, da
es nicht mehr benutzt wird ?

Form1.Free;

Frage 2: Wie kann ich i.o. Beispiel das
Formular 1 verstecken, um evtl. später
darauf zurückzugreifen ?

Form1.Hide;

OnActivate wird ausgeführt, wenn die Form fertig erstellt wurde und den Fokus erhält. Dies geschieht nach OnCreate aber nach OnShow. Auch wenn die Form zu irgendeinem späteren Zeitpunkt wieder den Fokus erhält, wenn der nwendere beispielsweise darauf klickt, wird OnActivate wieder ausgeführt.

So wie ich das deinem Text entnehmen konnte, machst du eine Art SplashForm, die beim Programmstart erscheint und eventuell ein Bild anzeigt, wie es viele Programme haben, auch Delphi selbst. In dem Fall macht man das aber ganz anders :smile:

Notlösung:
Erstelle einen (einmalig zu benutzenden) Timer, welcher kurz nach Activate Form1 schließt und Form2 öffnet. Um wiederholtes Ausführen von Activate bei Form 1 zu vermeiden, setze einfach mittels globalem Flag eine Art Sperre, zum Beispiel:

Form1.OnActivate:

if (Sperre = TRUE) then exit;
Blablabla
Blablabla
Sperre := TRUE;

So wie ich das deinem Text entnehmen
konnte, machst du eine Art SplashForm,
die beim Programmstart erscheint und
eventuell ein Bild anzeigt, wie es viele
Programme haben, auch Delphi selbst. In
dem Fall macht man das aber ganz anders:

  1. Neue Form im Projekt erstellen, z.B. Form2 oder SplashForm
    BorderStyle = bsNone (kein Border)
    Falls Timage vorhanen, dessen Alignment auf alClient stellen
  2. Unter Project/Options diese Form aus dem AutoCreate entfernen
  3. Im Project-Source (Project/View Source) folgendes eintragen:

SplashForm := TSplashForm.Create(Application);
SplashForm.Show;
SplashScreen.UpDate;
Applcation.Initialize;
.
.
.
// SplashDelay(1000);
SplashForm.Free;
Application.Run;
end.

Eine Delay-Funktion zum anzeoigen der Form ist optional.

procedure SplashDelay(Delay : Integer); //Miliseconds

var
FirstTickCount : LongInt;

begin
FirstTickCount := GetTickCount;
repeat
Application.ProcessMessages;
until ((GetTickCount - FirstTickCount) >= LongInt(Delay));
end;