Delphi 4: Formular löschen.

Von: , Frage gestellt am So, 10. Okt 1999

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

3 Antworten zu dieser Frage

  1. Antwort von nach 4 Stunden hilfreich
    Re: 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 ?

    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 :)

    • Antwort von nach einem Tag hilfreich
      Re^2: Delphi 4: Formular löschen.

      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;

  2. Antwort von nach 17 Stunden hilfreich
    Re: Delphi 4: Formular löschen.

    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;

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!