AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TListView.Item.Data wird nicht zerstört

Ein Thema von sieppl · begonnen am 9. Sep 2004 · letzter Beitrag vom 9. Sep 2004
Antwort Antwort
Benutzerbild von sieppl
sieppl

Registriert seit: 15. Aug 2004
Ort: Münster
198 Beiträge
 
Delphi 7 Professional
 
#1

TListView.Item.Data wird nicht zerstört

  Alt 9. Sep 2004, 10:52
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
Sebastian
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

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

  Alt 9. Sep 2004, 11:04
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
  Mit Zitat antworten Zitat
Benutzerbild von sieppl
sieppl

Registriert seit: 15. Aug 2004
Ort: Münster
198 Beiträge
 
Delphi 7 Professional
 
#3

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

  Alt 9. Sep 2004, 11:37
Ja, dass stimmt. Also muss ich eine Schleife programmieren, welche alle Items durchgeht und den Destruktor aufruft..
Sebastian
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

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

  Alt 9. Sep 2004, 15:16
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...

MfG
Muetze1
  Mit Zitat antworten Zitat
Benutzerbild von sieppl
sieppl

Registriert seit: 15. Aug 2004
Ort: Münster
198 Beiträge
 
Delphi 7 Professional
 
#5

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

  Alt 9. Sep 2004, 15:36
danke für den Code. Da das Ganze bei mir in einem Thread läuft muss es lokal bleiben.
Sebastian
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 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