Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Form erzeugen / löschen (https://www.delphipraxis.net/29636-form-erzeugen-loeschen.html)

Hansa 12. Sep 2004 12:36


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:
frmEing := TfrmEing.Create (self);
frmEing.Show;
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.

Sharky 12. Sep 2004 12:41

Re: Form erzeugen / löschen
 
Delphi-Quellcode:
frmEing := TfrmEing.Create (self);
frmEing.Show;
Hai Hansa,

da ich meine Forms immer mit .ShowModal erzeuge gebe ich sich einfach danach wieder frei.
Zitat:

..ich sehe da kaum einen Vorteil, außer, daß die EXE 5% kleiner wurde.
Der Speicherverbrauch der Anwendung dürfte aber deutlich kleiner werden da Speicher erst dann angefordert wird wenn er auch gebraucht wird.

Hansa 12. Sep 2004 12:53

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 ?

Sharky 12. Sep 2004 12:59

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.

Hansa 12. Sep 2004 15:43

Re: Form erzeugen / löschen
 
Das ist schon klar, aber wohin jetzt mit dem Create ?

Jelly 12. Sep 2004 15:51

Re: Form erzeugen / löschen
 
Hi,
du kannst im OnClose Event deiner frmEing Form folgendes reinschreiben:
Delphi-Quellcode:
procedure TfrmEing.FormClose(Sender: TObject; var Action: TCloseAction);
begin
     Action := caFree ;
end;
Dann gibst du den Speicher bei Schließen deiner Form wieder frei.

Aber du hast noch einen Denkfehler, in der Art, wie du deine Forms erzeugst mit
Delphi-Quellcode:
frmEing := TfrmEing.Create (self);
frmEing.Show;
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:
Delphi-Quellcode:
with TfrmEing.Create (self) do begin
   Show;
end ;
Gruß,
Tom

Leuselator 12. Sep 2004 16:13

Re: Form erzeugen / löschen
 
Im Anhang zum letzten Post dieses Threads wirst Du geholfen Hansa.
Gruß

Hansa 12. Sep 2004 18:02

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 ?

Jelly 12. Sep 2004 18:06

Re: Form erzeugen / löschen
 
Zitat:

Zitat von Hansa
Kann ich nicht einfach das im OnClose einbauen ?

Na dann lies meinen Beitrag doch nochmal genauer :zwinker:

Hansa 12. Sep 2004 18:20

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 15:30 Uhr.
Seite 1 von 2  1 2      

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