![]() |
TComponentList: Nur zur Laufzeit erstelle Kompos löschen
Hallo,
ich hab eine Komponentenliste vom Typ TComponentList in der ich zur Laufzeit erzeugte Komponenten als auch schon zur Designzeit erzeugte Komponenten eintrage. Am Ende des Programmes bei OnDestroy der Form will ich alle zur Laufzeit erstellten Komponenten löschen. Dafür hab ich folgenden Code:
Delphi-Quellcode:
Mit dem Assigned will ich alle Komponenten die beim Design erstellt wurden,
procedure TMaskForm.FormDestroy(Sender: TObject);
var i: Integer; Dummy_Kompo: TComponent; begin for i := Pred(Komponentenliste.Count) downto 0 do begin //Komponente auslesen Dummy_Kompo := Komponentenliste.Items[i]; If Assigned(Dummy_Kompo) then FreeAndNil(Dummy_Kompo); end; FreeAndNil(Komponentenliste); end; aussieben. Aber leider bekomm ich immer eine AccessViolation - ich weiss nur nicht warum? |
Re: TComponentList: Nur zur Laufzeit erstelle Kompos löschen
Warum willst du nur manuell erzeugte Löschen?
|
Re: TComponentList: Nur zur Laufzeit erstelle Kompos löschen
Zitat:
|
Re: TComponentList: Nur zur Laufzeit erstelle Kompos löschen
Wäre es nicht das einfachste die zur Laufzeit erzeugten in eine Extra Liste zu packen?
So wie du es vor hast geht es nicht. Assigned ist nichts anderes als auf eine Prüfung auf ungleich nil. Wenn eine Komponente frei gegeben wird, wird aber nicht automatisch dein Pointer auf die Instanz auf nil gesetzt sondern zeigt weiterhin auf den Speicher. Entsprechend funktioniert die Prüfung nicht. |
Re: TComponentList: Nur zur Laufzeit erstelle Kompos löschen
Zitat:
|
Re: TComponentList: Nur zur Laufzeit erstelle Kompos löschen
Zitat:
ich hab ja alle Kompos auf einem Panel |
Re: TComponentList: Nur zur Laufzeit erstelle Kompos löschen
Zudem sind zur Laufzeit erzeugte manuell erzeugte Komponenten
|
Re: TComponentList: Nur zur Laufzeit erstelle Kompos löschen
Eine Frage hätt ich aber noch dazu:
ich erzeug die Kompoentenliste im OnCreate der Form mit:
Delphi-Quellcode:
im OnDestroy gib ich sie wieder frei:
//Komponentenliste erzeugen
Komponentenliste := TComponentlist.Create;
Delphi-Quellcode:
Nur bekomm ich dabei eine AV.
FreeAndNil(Komponentenliste)
Ich hab mal gelernt, mann müsse alles was man erzeugt auch wieder freigeben, das tu ich ja, aber trotzdem die AV? |
Re: TComponentList: Nur zur Laufzeit erstelle Kompos löschen
Wenn du manuell freigeben willst, mussst du alle freigeben und vorher aus der Liste nehmen
|
Re: TComponentList: Nur zur Laufzeit erstelle Kompos löschen
Eine TComponentList gibt alle enthaltenen Objekte mit frei, wenn du die Liste selbst freigibst... Machs dir doch nicht so kompliziert. (siehe dazu auch Doku zu Delphi)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 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