![]() |
neues Formular zur Laufzeit erstellen, Owner Application, Freigabe Formular
Hallo zusammen,
ich habe folgendes Gerüst:
Delphi-Quellcode:
Jetzt zu meiner Frage.
if not Assigned(MyOwnForm) then
MyOwnForm:= TfrmMyOwnForm.Create(Application); if Assigned(MyOwnForm) then begin MyOwnForm.Init; //tue irgendwas mit meiner Form FreeAndNil(MyOwnForm); end; Ich übergebe ja als Owner die "Application". Das heißt ja, die Anwendung kümmert sich beim Beenden um die Freigabe des Formulars, richtig? Habe ich irgendein Nachteil oder anderes Problem (z.B. Speicherleck) wenn ich dieses Formular wie geschrieben, mit "FreeAndNil" selber freigebe? Hat die Anwendung dann beim Beenden irgendein Problem mit vielleicht irgendwelchen Referenzzählern oder ähnlichen? Viele Grüße |
AW: neues Formular zur Laufzeit erstellen, Owner Application, Freigabe Formular
TComponent ist recht intelligent.
Die registrieren sich gegenseitig und räumen die Owner- und die Parent-Beziehungen auf, wenn man eine der beiden Komponenten frei gibt. Du gibst die OnwForm frei und dabei wird deren Referenz aus Application entfernt. Aber wozu der Owner, wenn du es sowieso gleich wieder frei gibst? Also, im Prinzip kann man dabei den Owner auch problemlos leer lassen. (Außer der Owner wird noch für irgendwas Anderes verwendet)
Delphi-Quellcode:
if not Assigned(MyOwnForm) then
MyOwnForm := TfrmMyOwnForm.Create(nil); try MyOwnForm.Init; //tue irgendwas mit meiner Form finally FreeAndNil(MyOwnForm); end; |
AW: neues Formular zur Laufzeit erstellen, Owner Application, Freigabe Formular
Ok, danke für die Antwort.
Stimmt, ich könnte den Owner auch weglassen. Dachte irgendwie, ich benötige den, damit das Form auch angezeigt werden kann. Try...Finally ist natürlich auch nochmal wichtig. Das hatte ich auch übersehen. Danke |
AW: neues Formular zur Laufzeit erstellen, Owner Application, Freigabe Formular
Nja, mit Owner und ohne das Try-Finally, würde sich der Owner später mal um die Freigabe kümmern, wenn es jetzt beim
Delphi-Quellcode:
knallen täte und dadurch das Free nicht mehr ausgeführt würde.
MyOwnForm.Init
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:22 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