Объект TVirtualStringTree с пользовательской высотой узла, Как надежно прокрутить Виртуальный TreeView к нижней части (т.е. полоса прокрутки добирается до сути)?
Я пытался звонить tree1.FullExpand
затем tree1.ScrollIntoView.(tree1.GetLast)
, но это не работает.
Заранее спасибо.
У меня хорошо работает ScrollIntoView. Вы также можете попробовать tree1.FocusedNode: = tree1.GetLast;
Вы устанавливаете произвольную высоту узла в событии OnMeasureItem? Если это не сработает, попробуйте установить для DefaultNodeHeight дерева большее значение а в событии OnMeasureItem измените его на более низкий. Я заметил, что tree таким образом лучше пересчитывает длину полосы прокрутки.
Это тоже должно работать:
tree1.TopNode := tree1.GetLast
У меня была такая же проблема при работе с 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;
Надеюсь, это вам поможет.