![]() |
Action := caFree im OnClose
Hi,
Habe gerade folgenden Quelltext vorliegen (vereinfacht):
Delphi-Quellcode:
Meine Logik sagt mir: "Das wird krachen!". Denn beim Schließen der Form wird diese freigegeben und im finally-block des Hauptprogramms wird auch immer freigegeben, weil beim freigeben ja nicht genilt wird und der Vergleich deswegen immer true ergibt.
program EinProgram;
uses EineUnit; begin EineForm := TEineForm.Create(Application); try EineForm.ShowModal; finally if EineForm <> nil then FreeAndNil(EineForm); end; end. //// Die Unit mit der Form unit EineUnit; interface type TEineForm= class(TForm) procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private-Deklarationen } public { Public-Deklarationen } end; var EineForm: TEineForm; implementation procedure TEineForm.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; end. In der Praxis läuft dieser Code aber wunderbar. Ich musste feststellen, dass ich z.B. im finally-block vor dem FreeAndNil noch auf EineForm.Caption sowohl lesend als auch schreiben zugreifen kann. Meine Frage: :wiejetzt: :gruebel: |
Re: Action := caFree im OnClose
FreeAndNil() überprüft, ob das Objekt noch besteht
|
Re: Action := caFree im OnClose
Zitat:
|
Re: Action := caFree im OnClose
Schau mal in TCustomForm.Close: Wenn CloseAction weder caNone noch caHide noch caMinimize ist, wird Release aufgerufen. Release schickt mit PostMessage die Nachricht CM_RELEASE an das Formular, bei deren Erhalt es sich selbst freigibt. Du kommst dem jedoch zuvor und beim Zerstören des Handles geht die Nachricht verloren.
|
Re: Action := caFree im OnClose
Also wäre die sauberste Methode einfach Aktion = caHide zu lassen und das Formular im finally-block freizugeben?
|
Re: Action := caFree im OnClose
Ja, du brauchst gar keine Ereignisbehandlungsroutine für OnClose.
|
DP-Maintenance
Dieses Thema wurde von "Sharky" von "Klatsch und Tratsch" nach "Object-Pascal / Delphi-Language" verschoben.
Ich verschiebe es mal nach hier. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:38 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