Hallo,
ich hatte mir das damals einfacher gemacht,
indem ich eine eigene Listen-Klasse (TListEx)
und eine Basisklasse für alle Einträge dieser Liste
gebaut habe (TListItemEx).
Im destructor der TListEx steht dann
Delphi-Quellcode:
{ Listenelemente freigeben }
destructor TListEx.Destroy;
begin
try
ClearList;
inherited Destroy;
except
end;
end; { TListEx.Destroy }
procedure TListEx.ClearList;
var
iItem : Integer;
Item : TListItemEx;
begin
try
for iItem:= Count-1 downto 0 do
begin
Item:= Items[iItem];
Delete(iItem);
{ free, if we have the original pointer here }
if (bHasLinks=False) then
begin
FreeAndNIL(Item);
end;
end
except
end;
end;
Alle Klassen werden von TListItemEx abgeleitet.
#edit#
FreeAndNil kann auch durch Item.Free ersetzte werden.
Der Destructor ist in Wirklichkeit aber etwas länger, ich benutze das NIL.
Das bHasLinks ist ien property, was wenn es True ist, die Klasse selber nicht freigibt,
sondern nur aus der Liste löscht.
Heiko