Einzelnen Beitrag anzeigen

Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#30

AW: VirtualSourceTree selektierte Nodes löschen?

  Alt 20. Jun 2017, 17:21
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;
Fritz Westermann
  Mit Zitat antworten Zitat