TreeView2.NodeDataSize := SizeOf(PTreeData);
natürlich muss hier TTreeData rein. Sorry ich hatte rumgespielt mit diesem Punkt, um zu schauen, ob es daran liegt und es dann falsch zurück verbessert.
Und dank des Tipps hier, habe ich herausgefunden woran es lag. Die Zeile
TreeView2.NodeDataSize := SizeOf(TTreeData);
habe ich noch vor das Beginupdate des Treeviews gesetzt und dann lief es.
Und jetzt macht auch alles Sinn. Es ist abgeschmiert, als ich zum Parent zurückgekommen bin. Der hatte seine Daten verloren. Ich finde es immer noch etwas seltsam, dass der Parent in der ersten Iteration funktioniert hat, dann aber später, als er von tieferen Rekursionen zurück zur obersten gekommen ist, nicht mehr. Es erklärt auch, warum der Node assigned war, nur eben die Daten nicht. Dennoch denke ich mir, eigentlich müsste er doch dann beim Zugriff auf die Daten und nicht beim addchildnode abschmieren. Weil der ursprüngliche Speicherplatz des Nodes doch mindestens ausreichen müsste, damit der Node selbst erkannt wird. Aber ich kenne mich mit Pointern nicht genug aus.
Trotzdem vielen Dank!