Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Verständnisproblem bei onDestroy (https://www.delphipraxis.net/83389-verstaendnisproblem-bei-ondestroy.html)

Prototypjack 1. Jan 2007 20:18


Verständnisproblem bei onDestroy
 
Moin!

Ich fange gleich an und gebe euch ein Beispiel für mein Problem:

Programm Unit(.dpr):
Delphi-Quellcode:
begin
  lfoo := TFoo.Create;
  lbar := TBar.Create;
  try
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  finally
    lbar.Free;
    lfoo.Free;
  end;
end.
Wie ihr seht erzeuge ich zwei Klassen die Global gültig sind, mein Problem ist nur. Bei Application.Run; wird die Messageschleife ja normalerweise abgearbeitet und der Code bleibt stehen(in diesem Abschnitt), tut er auch, soweit so gut. Wenn ich meine Mainform schließe, läuft zuerst der Code in der DPR zu Ende und dann startet die OnDestroy Methode meiner Mainform. Warum ist das so? Das Problem, welches ich hiermit habe ist, dass ich im onDestroy Event der Form noch auf lfoo zugreifen muss, dieses aber nichtmehr vorhanden ist.

Momentan habe ich es, unschön wie ich finde, so gelöst, dass ich den Ressourcenschutzblock entfernt habe und einfach lbar und lfoo nach dem letzten Benutzen in OnDestroy freigebe. Das kann's doch nicht sein, oder?

Ich hoffe ihr könnt mir zu einer besseren Methode verhelfen.
Danke schonmal!
Gruß,
Max

Khabarakh 1. Jan 2007 20:53

Re: Verständnisproblem bei onDestroy
 
Das fällt unter die Kategorie "Fluch der globalen Formvariablen". Erstelle eine Instanz deiner Formklasse selbst und gib sie nach Application.Run wieder frei.
Wenn du nämlich den Non-OOP-Weg wählst, gibt Delphi automatisch die globale Forminstanz frei. Und zwar nach der letzten Anweisung ;) .


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz