Ich denke Du kannst wirklich eine TObjectlist benutzen,
aber dann ist es wichtig festzulegen wem die Daten "gehören". In diesem Fall der Liste.
Änderungen die ich gemacht habe:
Typ geändert:
TVSTDataClasses = TObjectList<TVSTData>;
das erzeugen von aVSTDataClasses habe ich in das FormCreate verschoben
Delphi-Quellcode:
ReportMemoryLeaksOnShutdown := True;
aVSTDataClasses := TVSTDataClasses.Create;
Im Button1Click habe ich das erzeugen der Liste entfernt.
Zusätzlich FormDestroy
Delphi-Quellcode:
procedure TForm2.FormDestroy(Sender: TObject);
begin
aVSTDataClasses.free;
end;
Das freenode umgebaut auf:
Delphi-Quellcode:
procedure TForm2.VSTFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
begin
// Das aber nur wenn wirklich die Daten aus der Liste weg sollen!!!!
aVSTDataClasses.remove(node.GetData<TVSTData>);
end;
Button3Click:
Delphi-Quellcode:
procedure TForm2.Button3Click(Sender: TObject);
begin
// Hier muss auf jeden Fall der VST gecleared werden
VST.Clear;
// Jetzt sollte aVSTDataClasses.count 0 sein wenn im VSTFreeNode der Eintrag gelöscht wird
// Nur notwendig wenn im VSTFreeNode die nodes nicht freigegeben werden
aVSTDataClasses.Clear;
end;
Umbau des Button5Click
Delphi-Quellcode:
procedure TForm2.Button5Click(Sender: TObject);
var
Node, NodeTmp: PVirtualNode;
begin
Node := VST.GetFirstSelected;
while Assigned(Node) do
begin
NodeTmp := VST.GetNextSelected(Node);
VST.DeleteNode(Node);
Node := NodeTmp;
end;
end;