Du gehst in OnNodeCopying von einer falschen Bedeutung der Parameter aus.
Wenn man darauf einen Haltepunkt setzt oder im Quelltext den Aufruf manuell sucht, landet man in diesem Abschnitt:
Delphi-Quellcode:
//...
Result := TargetTree.MakeNewNode;
InternalConnectNode(Result, Target, TargetTree, Mode);
TargetTree.InternalAddFromStream(Stream, VTTreeStreamVersion, Result);
if not DoNodeCopying(Result, Target) then
//...
Wie man sieht bekommt man den neu erstellten Knoten im Zielbaum und dessen Elternknoten übergeben. Also nicht den ursprünglichen Knoten wie du vermutet hast.
Wie funktioniert das ganze eigentlich?
Die Knoten werden in einen Stream gespeichert und dann wieder daraus gelesen. Die Daten des Benutzers kann der Tree dabei aber nicht speichern, denn diese kennt er ja nicht direkt.
Deshalb gibt es zwei Events, OnSaveNode und OnLoadNode, die dafür aufgerufen werden. Dort kannst du die Daten speichern und laden, die zu dem Knoten gehören.
Der manuelle Weg ist allerdings deutlich schneller, da das ganze Speichern und Laden weg fällt.