Как надежно прокрутить Виртуальный TreeView к нижней части?

Объект TVirtualStringTree с пользовательской высотой узла, Как надежно прокрутить Виртуальный TreeView к нижней части (т.е. полоса прокрутки добирается до сути)?

Я пытался звонить tree1.FullExpand затем tree1.ScrollIntoView.(tree1.GetLast), но это не работает.

Заранее спасибо.

6
задан Edwin Yip 15 May 2010 в 08:12
поделиться

3 ответа

У меня хорошо работает ScrollIntoView. Вы также можете попробовать tree1.FocusedNode: = tree1.GetLast;

Вы устанавливаете произвольную высоту узла в событии OnMeasureItem? Если это не сработает, попробуйте установить для DefaultNodeHeight дерева большее значение а в событии OnMeasureItem измените его на более низкий. Я заметил, что tree таким образом лучше пересчитывает длину полосы прокрутки.

6
ответ дан 9 December 2019 в 20:40
поделиться

Это тоже должно работать:

tree1.TopNode := tree1.GetLast
1
ответ дан 9 December 2019 в 20:40
поделиться

У меня была такая же проблема при работе с 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;

Надеюсь, это вам поможет.

1
ответ дан 9 December 2019 в 20:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: