![]() |
Verständnisproblem bei onDestroy
Moin!
Ich fange gleich an und gebe euch ein Beispiel für mein Problem: Programm Unit(.dpr):
Delphi-Quellcode:
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.
begin
lfoo := TFoo.Create; lbar := TBar.Create; try Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; finally lbar.Free; lfoo.Free; end; end. 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 |
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 17:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz