Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Komponente freigeben und neue unter selbem Namen erstellen (https://www.delphipraxis.net/123633-komponente-freigeben-und-neue-unter-selbem-namen-erstellen.html)

Chrissi91 5. Nov 2008 19:21


Komponente freigeben und neue unter selbem Namen erstellen
 
Hallo,

mein Problem ist kein neues, aber ich kriege es gerade mal wieder nicht gebacken.

Ich erstelle zur Laufzeit Komponenten, lösche sie und erstelle sie erneut unter gleichem Namen. Das Problem ist, dass das Programm dann zur Laufzeit abstürzt und sagt, dass der Name schon belegt ist.

Freigeben tue ich die Komponenten mit eine der 2 Möglichkeiten, es funktionieren aber keine davon:

Delphi-Quellcode:
TImage(FindComponent('Kompo' + IntToStr(I))).FreeAndNil;
Delphi-Quellcode:
TImage(FindComponent('Kompo' + IntToStr(I))).Destroy;
Ich weiß, dass das mit den obigen Befehlen nicht klappt, aber ich weiß auch nicht, mit welchem Befehl es klappen würde. :mrgreen:

mashutu 5. Nov 2008 19:32

Re: Komponente freigeben und neue unter selbem Namen erstell
 
Hi, versuch mal:
Delphi-Quellcode:
var
   img : TImage;
begin
...
   img:=TImage(FindComponent('Kompo' + IntToStr(I)));
   img.parent := NIL; //weiss nicht ob's das braucht
   RemoveComponent(Img);// ... oder das hier?
   img.free;
   img:=NIL; // an einigen Stellen im Source der VCL stehen ebenfalls Kommentare, dass FreeAndNIL
             // nicht geeignet ist
             // Danach sollte es mit
   img:=TImage.Create(Parent); //klappen
   img.name:= ...
end;
Ich kann das gerade nicht testen, daher keine Garantie fuer den Source.

mkinzler 5. Nov 2008 19:33

Re: Komponente freigeben und neue unter selbem Namen erstell
 
FreeAndNil ist keine Methode:
FreeAndNil(FindComponent('Kompo' + IntToStr(I)));

uligerhardt 6. Nov 2008 09:27

Re: Komponente freigeben und neue unter selbem Namen erstell
 
Zitat:

Zitat von mkinzler
FreeAndNil ist keine Methode:
FreeAndNil(FindComponent('Kompo' + IntToStr(I)));

... und braucht eine Variable als Parameter, sonst kann es ja nix auf nil setzen. :mrgreen:
Delphi-Quellcode:
FindComponent('Kompo' + IntToStr(I)).Free
sollte also reichen.


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