Wunderbar, es wird alles richtig positioniert.
Genau das habe ich gesucht.
Leider blenden sich die Objekte nicht aus, wenn ich einen Node einklappe.
Ich habe es so gelöst, dass beim einklappen alle Objekte der Childs ausgeblendet werden.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure VST1.OnCollapsing(Sender: TBaseVirtualTree; Node: PVirtualNode; var Allowed: Boolean); var Data: PTreeData; t: integer; PNode: PVirtualNode; begin PNode:= Node; for t:= 0 to Node.TotalCount-1 do begin Data:= Sender.GetNodeData(PNode); if Data.FObject <> nil then TControl(Data.FObject).Visible:= false; PNode:= Sender.GetNext(Pnode); end; end; |
Aber trotzdem werden manche Objekte beim Scrollen fehlerhaft angezeigt. (wahrscheinlich, weil OnBeforeCellPaint nicht durchläuft, wenn die Nodes nicht mehr sichtbar sind.
Demzufolge bleiben die Objekt auf der alten (falschen) Position stehen. )
Habe auch schon versucht, mit dem AfterPaint-Ereignis alle Objekte zu positionieren und ein/auszublenden,
je nachdem, ob MyRect einen Wert im VST-Bereich hat.
Aber das klappte nicht, weil AfterPaint viel zu öfter aufgerufen wird...