![]() |
Form freigeben <> Memory Leak
also ich rufe aus Form1 heraus z.b. bei nem button click folgendes auf:
Delphi-Quellcode:
so, wenn jetzt in Form2 die StartProcedure beendet wurde, dann möchte ich gerne, dass das Formular jedoch noch geöffnet bleibt und erst durch einen user click beendet wird. da jedoch anschließend die zeile FreeAndNil(Form2) aufgerufen wird, terminiert sich Form2 ohne user einwirkung. soll ich jetzt das FreeAndNil rausnehmen? oder wie soll ich das sonst lösen? und entstehen durch das herausnehmen von freeandnil nicht speicherlöcher?!
Procedure TForm1.ButtonClick(Sender: TObject);
var Form2: TTestForm; Begin Form2 := TTestForm.Create(Self); try Form2.Show; ... Form2.StartProcedure; ... finally FreeAndNil(Form2); end; end; |
Re: Form freigeben <> Memory Leak
Hi,
Wenn du ein Formular auf diese Weise
Delphi-Quellcode:
erzeugst, dann übernimmt der übergebene Parameter das Aufräumen. Bei self wirds automatisch freigegeben, wenn self freigegeben wird, bei Application wenn die Anwenung beendet wird, nur bei nil muss man sich selbst ums Aufräumen kümmern.
Form2 := TTestForm.Create(Self);
Zusätzlich gibts noch die Möglichkeit, im OnClose des Form durch setzen von
Delphi-Quellcode:
für eine automatische Freigabe bei Schließen des Fensters zu sorgen.
action := caFree;
grüße, daniel |
Re: Form freigeben <> Memory Leak
So geht's:
Delphi-Quellcode:
Procedure TForm1.ButtonClick(Sender: TObject);
var Form2: TTestForm; Begin Form2 := TTestForm.Create(nil); // nil als Owner, da wir selber freigeben try Form2.Show; ... Form2.StartProcedure; Form2.Hide; Form2.Showmodal; // nicht unbedingt elegant, aber funktioniert ... finally Form2.Free; // FreeAndNil ist hier unnötig, da Form2 sowieso "out of Scope" gerät end; end |
Re: Form freigeben <> Memory Leak
Zitat:
Delphi-Quellcode:
Für nicht-modal angezeigte Formulare passt dies nicht:
Form := TMyForm.Create(self);
try Form.ShowModal; finally Form.Free; end;
Delphi-Quellcode:
Und die freigabe erfolgt i.d.R. im OnClose-Ereignis.
Form := TMyForm.Create(self);
Form.Show; Eine Freigabe mittels Free ist gefährlich, da hier evtl. noch nicht alle Messages in der message-Schleife abgearbeitet sind. Form.Release sorgt dafür das alle vor der freigabe abgearbeitet werden. |
Re: Form freigeben <> Memory Leak
danke hat einwandtfrei funktioniert :-)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:49 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