7

カスタムノードの高さを持つTVirtualStringTreeオブジェクト、Virtual TreeViewを確実に一番下までスクロールする(つまり、スクロールバーが一番下になる)方法は?

その時電話してみtree1.FullExpandましtree1.ScrollIntoView.(tree1.GetLast)たが、うまくいきません。

前もって感謝します。

4

4 に答える 4

6

ScrollIntoViewは私にとってうまく機能します。また、試すことができますtree1.FocusedNode := tree1.GetLast;

OnMeasureItemイベントでカスタムノードの高さを設定していますか?それが機能しない場合は、ツリーのDefaultNodeHeightをより大きな値に設定し、OnMeasureItemイベントでそれをより低い値に変更してみてください。ツリーがスクロールバーの長さをより適切に再計算することに気づきました。

于 2010-05-15T12:26:01.040 に答える
4

これを試して:

SendMessage(VST.Handle, WM_VSCROLL, SB_BOTTOM, 0);
PostMessage(VST.Handle, WM_VSCROLL, SB_BOTTOM, 0);
于 2012-09-13T13:48:44.233 に答える
3

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;

お役に立てば幸いです。

于 2010-05-17T14:40:22.073 に答える
1

これも機能するはずです:

tree1.TopNode := tree1.GetLast
于 2010-05-15T15:44:05.723 に答える