Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Komponenten und deren Freigabe (https://www.delphipraxis.net/7635-komponenten-und-deren-freigabe.html)

Privateer3000 18. Aug 2003 11:21


Komponenten und deren Freigabe
 
Hiho,
ich habe folgendes Problem:
in zb.Formx werden Edit's dynamisch erstellt und benannt.
Der Inhalt deren kann gespeichert werden und das Form wieder geschlossen werden.So weit, so gut.
Wird dieses Form kurz danach wieder aufgerufen wird eine Exeption ausgelöst und als Grund angegeben das Edit'xxx' schon exisitiert.
Also gehe ich der Annahme das nach dem Schliessen des Forms die erstellten Edit's noch im Speicher existieren.
Was muss beim schliessen des Forms beachtet werden??

Chewie 18. Aug 2003 11:27

Re: Komponenten und deren Freigabe
 
Die Edits werden bei der Freigabe des Parent-Objektes freigegeben, also i.d.R. bei FormDestroy.

Jens Schumann 18. Aug 2003 11:39

Re: Komponenten und deren Freigabe
 
Hallo Chewie´,
das ist nicht ganz richtig. Die Komponenten werden freigegeben, wenn der Besitzer freigegeben wird. Der Besitzer muss nicht unbedingt der Parent sein.
Wenn ein TEdit auf einem Panel liegt und das Panel auf einem Formular dann ist das Panel der Parent und das Formular der Besitzer.
Bei zur Designzeit erzeugten Komponenten ist in der Regel der Formular der Besitzer. Wird die Komponente zur Laufzeit erzeugt entscheidet der Paramter des constructors über den Besitzer.
procedure TForm1.CreateEdit;
begin
Edit:=TEdit.Create(Self); // Formular ist der Besitzer, Komponente wird freigeben wenn das Formular zerstört wird.
end;
procedure TForm1.CreateEdit;
begin
Edit:=TEdit.Create(Nil); Komponente hat keinen Besizter, Komponente wird nicht freigeben wenn das Formular zerstört wird.
end;

Chewie 18. Aug 2003 11:54

Re: Komponenten und deren Freigabe
 
Autsch :oops:

Ich habe deutsch gedacht und den englischen Begriff geschrieben - das ging nicht gut.
Danke für die Korrektur.

Privateer3000 18. Aug 2003 12:10

Re: Komponenten und deren Freigabe
 
Hiho

in diesem Falle:
myedit := TEdit.Create(Form9);
wird das Form als Besitzer deklariert.
Nach der Aussage müssten ja die Edits zerstört werden wenn das Form zerstört wird.
Trotzdem kommt es zu diesen Fehlermeldungen.
Zusätzlich habe ich folgendes probiert (ohne Erfolg):
Delphi-Quellcode:
procedure TForm9.Beenden1Click(Sender: TObject);
begin
close;
Form9.Free;
end;

Sharky 18. Aug 2003 12:23

Re: Komponenten und deren Freigabe
 
Hai Privateer,

hast Du schon einmal versucht die von dir Erzeugten Objekt im OnClose Event der Form expliziet freizugeben?

Privateer3000 18. Aug 2003 13:30

Re: Komponenten und deren Freigabe
 
hab ich auch schon probiert.Vielleicht sollte man andere Arten ausprobieren.
Verhalten sich zum Beispiel Frames anders als Forms??

Jens Schumann 18. Aug 2003 14:15

Re: Komponenten und deren Freigabe
 
Hallo Privateer3000,
wie erzeugst Du das Formular?
Poste doch mal ein bisschen Source.


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