Einzelnen Beitrag anzeigen

Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.838 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

Re: application beendet sich nicht

  Alt 6. Aug 2004, 12:01
Zitat von Borti:
Tut mir leid MaBuSE,
Die Form1 existiert trotzdem im Hintergrund weiter. Man kann sie zwar nicht sehen, durch Form1.Hide, aber wenn man diese Zeile weglässt bleibt die Form inaktiv im Hintergrund. Ich muss den Speicher für Form1 aber unbedingt freigeben bevor Form2 angezeigt wird.
Gruß,
Borti
In diesem Fall mußt Du (wie Du ja selbst schon erkannt hast) ein Application.Terminate aufrufen.

Wenn Du das Form1 mit Form1.Realease freigegeben hast, kannst Du natürlich kein Form1.Close mehr ausführen, da Form1 ja nicht mehr existiert

Aber Application.Terminate ist der sichere Weg.

Auf Application.MainForm kann leider nur lesend zugegriffen werden, sonst wäre ja folgendes möglich:Application.MainForm := Form2; Form2.Show; Form1.Close; Aber das geht ja nicht :-/

Bleiben also nur noch 3 Möglichkeiten übrig:

1. Eine eigene TmyApplication erzeugen:

In der Unit Forms ist TApplication definiert. Du könntest Dir eine eigene myForms schreiben, in der Du TmyApplication von TApplication ableitest.
In der TApplication.Run müsstest Du dann folgende Schleife um Deine Überprüfung ob alle Forms freigegeben sind ergänzen
Delphi-Quellcode:
procedure TApplication.Run;
begin
  FRunning := True;
  try
    ...
      repeat
        try
          HandleMessage;
        except
          HandleException(Self);
-> If KeineFormsMehrDa then Application.Terminate;
        end;
      until Terminated;
    end;
  finally
    FRunning := False;
  end;
end;
Das ist aber nicht ganz so einfach... Viel Spaß

2. Die Forms.pas von Delphi abändern

Tu Dir einen Gefallen und mach das nicht.
Falls doch, siehe 1.

3. Class Helper benutzen

In Delphi 8 (nur .net) und hoffentlich auch in Delphi 9 (auch win32) gibt es die sogenannten ClassHelper
Damit könnte man die Klasse TApplication von außen um diese Funktionalität ergänzen.


Andere Möglichkeiten sehe ich im Moment nicht.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat