Ich habe das Beispiel in einer etwas anderen Form verwendet. Ich habe das Verschieben in eine eigene Procedure gesteckt. Nun habe ich das Problem dabei, dass sich mein Programm fast regelmäßig aufhängt, wenn ich zu schnell die Kategorien wechsel mit der Maus. Mit dem Debugger habe ich herrausgefunden, dass ich immer in der Procedure für das Verschieben hängen bleibe. Nur weiß ich nicht warum. Hier die Procedure zum Verschieben :
Delphi-Quellcode:
procedure TMainForm.MoveNode(TargetNode, SourceNode : TTreeNode);
var
nodeTmp : TTreeNode;
i : Integer;
begin
with TV_Category do
begin
nodeTmp := Items.AddChild(TargetNode,SourceNode.Text);
nodeTmp.ImageIndex := SourceNode.ImageIndex;
nodeTmp.SelectedIndex := SourceNode.SelectedIndex;
for i := 0 to SourceNode.Count -1 do
begin
MoveNode(nodeTmp,SourceNode.Item[i]);
end;
end;
end;
Das funktioniert auch alles wunderbar, wenn ich langsam damit arbeite. Das Programm bleibt in der For-Schleife hängen und wiederholt immer die Kategorie, die als letztes vor dem Aufhängen angeklickt wurde. Ich wollte damit erreichen, dass ich auch Nodes verschieben kann, die noch mehrere Childs haben.
Jetzt meine Frage, wird das OnDragOver-Ereignis auch dann aufgerufen, wenn ich nur eine Node anklicke ? Kann ich das irgendwie verhindern, dass sich diese Procedure aufhängt und wenn ja wie ?