Ich habe folgenden Code geschrieben, um selektierte Nodes zu löschen
Delphi-Quellcode:
var
Node, NodeTmp: PVirtualNode;
i: Integer;
begin
Node := VST.GetFirst;
while Assigned(Node) do
begin
if VST.Selected[Node] then
begin
NodeTmp := VST.GetPreviousSibling(Node);
VST.DeleteNode(Node);
Node := NodeTmp;
end;
Node := VST.GetNextSibling(Node); // ich brauche nur Toplevel Nodes
end;
end;
Das funktioniert wunderbar. Aber selektiert man nun auch den ersten Node, dann geht das in die Hose.
Ich habe gelesen, dass man den aktuellen Node zwischenspeichern muss, um später GetNextSibling() ausführen zu können.
Denn beim Löschen von Node geht die Referenz auf diesen verloren was zu einer
AV führt.
Gibt es eine schönere Möglichkeit durch alles Nodes zu laufen und die selektierten zu löschen? Wichtig ist, dass ich das alles per Hand machen muss.
Einen Einzeiler kann ich, wenn es den gibt, leider nicht verwenden.
0815 wäre eventuell sogar noch... aber ist das noch konform?
Delphi-Quellcode:
var
Data: TVSTData;
i: Integer;
NodeArray: TNodeArray;
begin
NodeArray := VST.GetSortedSelection(False);
for i := Low(NodeArray) to High(NodeArray) do
begin
VST.DeleteNode(NodeArray[i]); // Node "visuell" löschen
end;