У меня была такая же проблема при работе с TVirtualDrawTree. Вы должны убедиться, что высота узла вычисляется до того, как дерево прокрутится.
Вот что я делаю:
1.- Добавьте этот код в событие OnInitNode, чтобы дерево знало, что высота нового узла должна быть вычислена:
Node.States := node.States + [vsMultiline] - [vsHeightMeasured];
2.- В OnMeasureItem, если вы не можете вычислить высоту (например, узел еще не инициализирован), убедитесь, что вы сказали дереву повторить вызов при необходимости:
В обработчике события OnMeasureItem:
If (Node = Nil) Or (Node = tree.RootNode) Then Begin
Exclude(Node.States, vsHeightMeasured);
Exit;
End;
NodeData := tree.GetNodeData(Node);
If (NodeData = Nil) Or (NodeData^.XMLNode = Nil) Then Begin
Exclude(Node.States, vsHeightMeasured);
Exit;
End;
Try
// Code to measure node height here.
Except
Exclude(Node.States, vsHeightMeasured);
End;
Надеюсь, это поможет вам.