Moin zusammen,
habe ein kleines Problem und dazu noch nichts sinnvolles gefunden: Ich möchte lediglich in einem VST bestehende Nodes (häufig mit vielen Subnode-Strukturen) löschen. Das mache ich wie folgt:
Delphi-Quellcode:
vst.BeginUpdate;
try
while assigned(node) do
begin
if vst.isvisible[node] then
vst.DeleteNode(node);
node:= vst.GetNextChecked(node);
end;
finally
vst.EndUpdate;
end;
Leider erhalte ich manchmal (nicht immer) eine EAccessViolation Fehlermeldung. Warum, verstehe ich nicht bzw. kann den Fehler auch nicht wirklich reproduzieren.
Laut Debugger tritt im VST der Fehler in folgender Funktion auf:
Delphi-Quellcode:
function TBaseVirtualTree.GetNextNoInit(Node: PVirtualNode): PVirtualNode;
// Optimized variant of GetNext, no initialization of nodes is performed (if a node is not initialized
// then it is considered as not being there).
begin
Result := Node;
if Assigned(Result) then
begin
Assert(Result <> FRoot, 'Node must not be the hidden root node.');
// If there is no child node try siblings.
if Assigned(Result.FirstChild) then //########HIER FEHLER######
Result := Result.FirstChild
else
begin
repeat
// Is there a next sibling?
if Assigned(Result.NextSibling) then
begin
Result := Result.NextSibling;
Break;
end
else
begin
// No sibling anymore, so use the parent's next sibling.
if Result.Parent <> FRoot then
Result := Result.Parent
else
begin
// There are no further nodes to examine, hence there is no further visible node.
Result := nil;
Break;
end;
end;
until False;
end;
end;
end;
Hat jemand eine Idee? - Die Daten werden in OnFreeNode freigegeben.
Danke für Eure Mühe und schöne Grüße zum Sonntag,
Frieder