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 TListView.Item.Data wird nicht zerstört (https://www.delphipraxis.net/29451-tlistview-item-data-wird-nicht-zerstoert.html)

sieppl 9. Sep 2004 10:52


TListView.Item.Data wird nicht zerstört
 
Hallo,

man kann bekanntlich an TListView Einträge beliebige Objekte über den Pointer 'Data' hängen.
Um die Liste zu löschen benutze ich TListView.Items.Clear. Dabei wird aber nicht der Destruktor des an Data hängenden Objektes aufgerufen. In dem Objekt speichere ich unter anderem PIDLs, die man generell über das IMalloc-Interface freigeben sollte.
Muss ich das jetzt nicht tun? Ist das ein Delphi-Fehler das die Objekte nicht richtig zerstört werden?

Grüße

Sebastian

Muetze1 9. Sep 2004 11:04

Re: TListView.Item.Data wird nicht zerstört
 
Moin!

Bei allen Data und Objects[] Eigenschaften hat sich der Benutzer um die Freigabe der Objekte zu kümmern. TListItem hat IMHO auch nur eine Pointer Variable als Data Typ und daher weiss er nicht mal um was es sich für Daten handelt oder ob der Pointer selber vielleicht nur eine Zahl ist. Darum muss man sich selber kümmern da man selber nur das Wissen darüber hat.

MfG
Muetze1

sieppl 9. Sep 2004 11:37

Re: TListView.Item.Data wird nicht zerstört
 
Ja, dass stimmt. Also muss ich eine Schleife programmieren, welche alle Items durchgeht und den Destruktor aufruft.. :cyclops:

Muetze1 9. Sep 2004 15:16

Re: TListView.Item.Data wird nicht zerstört
 
Moin!

Ich mache das bei eigenen Klassen meist im Destructor oder im FormDestroy. Geht ja flink:

Delphi-Quellcode:
Procedure TForm1.FormDestroy(Sender: TObject)
Var
  Data : TDataClass;
Begin
  While ( ListView.Items.Count > 0 ) Do
  Begin
    Data := TDataClass( ListView.Items[0].Data ); // ich habe die Eigenschaft nicht genau im Kopf, du weisst ja was gemeint ist
    Data.Free;
    ListView.Items.Delete(0);
  End;
End;
So spare ich mir noch eine lokale Schleifenvariable... :wink:

MfG
Muetze1

sieppl 9. Sep 2004 15:36

Re: TListView.Item.Data wird nicht zerstört
 
danke für den Code. Da das Ganze bei mir in einem Thread läuft muss es lokal bleiben. :nerd:


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