![]() |
Form erzeugen / löschen
Hi,
meine Forms habe ich vorerst von Delphi erzeugen lassen, also beim Programmstart. Da dies wegen immer mehr Forms langsam unüberschaubar wurde (Reihenfolge usw.), mache ich es nun lieber selber, z.B. so :
Delphi-Quellcode:
Wo packe ich jetzt den passenden Destructor hin ? Eine weitere Frage ist, es wird immer empfohlen, die Forms dynamisch zu erstellen, ich sehe da kaum einen Vorteil, außer, daß die EXE 5% kleiner wurde.
frmEing := TfrmEing.Create (self);
frmEing.Show; |
Re: Form erzeugen / löschen
Delphi-Quellcode:
Hai Hansa,
frmEing := TfrmEing.Create (self);
frmEing.Show; da ich meine Forms immer mit .ShowModal erzeuge gebe ich sich einfach danach wieder frei. Zitat:
|
Re: Form erzeugen / löschen
Wenn ich den Code in ein LabelClick einbaue, was dann, wenn ich es mehrmals anklicke ? Habe ich 10 Forms und erzeuge eine, dann wird wohl Speicher gespart, aber wenn ich nun alle 10 einmal aufrufe, dann ist doch kein Vorteil mehr da, oder doch ? Laut dem Code wird ja sogar jedesmal eine Form erzeugt. Oder wird sie autommatisch gelöscht ? Woher soll Delphi wissen, was überflüssig ist ?
|
Re: Form erzeugen / löschen
Ich meinte das anders. Eine Anwendung von mir besteht z.B. aus über 100 Forms. Im Regelfall werden aber nur 10-20 benutzt. Wenn ich sie jetzt alle beim Programmstart erzeugen würde verbraucht das Programm mehr Speicher als notwendig.
Wenn Du eine Form 10x erzeugst brauchst Du natürlich auch 10x den Speicher. |
Re: Form erzeugen / löschen
Das ist schon klar, aber wohin jetzt mit dem Create ?
|
Re: Form erzeugen / löschen
Hi,
du kannst im OnClose Event deiner frmEing Form folgendes reinschreiben:
Delphi-Quellcode:
Dann gibst du den Speicher bei Schließen deiner Form wieder frei.
procedure TfrmEing.FormClose(Sender: TObject; var Action: TCloseAction);
begin Action := caFree ; end; Aber du hast noch einen Denkfehler, in der Art, wie du deine Forms erzeugst mit
Delphi-Quellcode:
da du bei jedem Aufruf deiner Variablen frmEing einen neuen Wert gibst, und du somit keinen Zugriff mehr auf bereits existierende Instanzen von TfrmEing hast. Was dir da übrig bleibt, ist entweder alles in einem Array zu speichern, oder erst gar nicht versuchen, den Pointer zu speichern, und dein Form einfach wie folgt anzuzeigen:
frmEing := TfrmEing.Create (self);
frmEing.Show;
Delphi-Quellcode:
Gruß,
with TfrmEing.Create (self) do begin
Show; end ; Tom |
Re: Form erzeugen / löschen
|
Re: Form erzeugen / löschen
Leusels Code kapier ich so nicht recht. Außer, daß er wohl so programmiert wie ich. :mrgreen: Das mit dem caFree von Jelly kommt mir aber bekannt vor. Kann ich nicht einfach das im OnClose einbauen ?
|
Re: Form erzeugen / löschen
Zitat:
|
Re: Form erzeugen / löschen
Was soll ich denn da noch lesen. 8) Reicht ein caFree im OnClose nun oder nicht ? Die OH kennt das bei mir nicht. Oder besser noch, wie überprüfe ich das ganze, ob der Speicher freigegeben wurde ? Mit Memavail ?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:33 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 by Thomas Breitkreuz