Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi neues Formular zur Laufzeit erstellen, Owner Application, Freigabe Formular (https://www.delphipraxis.net/180656-neues-formular-zur-laufzeit-erstellen-owner-application-freigabe-formular.html)

Alex_ITA01 5. Jun 2014 13:43

neues Formular zur Laufzeit erstellen, Owner Application, Freigabe Formular
 
Hallo zusammen,
ich habe folgendes Gerüst:

Delphi-Quellcode:
  if not Assigned(MyOwnForm) then
    MyOwnForm:= TfrmMyOwnForm.Create(Application);
  if Assigned(MyOwnForm) then
  begin
    MyOwnForm.Init;
    //tue irgendwas mit meiner Form
    FreeAndNil(MyOwnForm);
  end;
Jetzt zu meiner Frage.
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

himitsu 5. Jun 2014 13:47

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;

Alex_ITA01 5. Jun 2014 14:04

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

himitsu 5. Jun 2014 14:57

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:
MyOwnForm.Init
knallen täte und dadurch das Free nicht mehr ausgeführt würde.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:49 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