具有自定義節點高度的TVirtualStringTree對象,如何可靠地將虛擬TreeView滾動到底部(即滾動條到達底部)?如何可靠地將虛擬TreeView滾動到底部?
我試過打電話tree1.FullExpand
,然後tree1.ScrollIntoView.(tree1.GetLast)
,但它不起作用。
預先感謝您。
具有自定義節點高度的TVirtualStringTree對象,如何可靠地將虛擬TreeView滾動到底部(即滾動條到達底部)?如何可靠地將虛擬TreeView滾動到底部?
我試過打電話tree1.FullExpand
,然後tree1.ScrollIntoView.(tree1.GetLast)
,但它不起作用。
預先感謝您。
ScrollIntoView適合我。您也可以嘗試tree1.FocusedNode := tree1.GetLast;
您是否在OnMeasureItem事件中設置自定義節點高度? 如果它不起作用,請嘗試將樹的DefaultNodeHeight設置爲較大的值,並在OnMeasureItem事件中將其更改爲較低值。我注意到樹會更好地重新計算滾動條的長度。
這也應該工作:
tree1.TopNode := tree1.GetLast
感謝Straveu。它也不起作用... PS。如果手動(不是以編程方式)向下滾動到最後一個節點,我可以完成樹形視圖的打印。 – 2010-05-15 19:32:29
我已經與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;
我希望它可以幫助你。
試試這個:
SendMessage(VST.Handle, WM_VSCROLL, SB_BOTTOM, 0);
PostMessage(VST.Handle, WM_VSCROLL, SB_BOTTOM, 0);
感謝利納。是的,我在節點內容的OnMeasureItem事件基礎上爲每個節點設置自定義高度。設置'tree1.FocusedNode'不起作用。我會嘗試你所說的關於設置所有節點的大高度然後調整值。 – 2010-05-15 19:26:51
嗨Linas, 你建議的第二種方法的作品!虛擬樹視圖在滾動操作期間進行計算時似乎使用DefaultNodeHeight。 – 2010-05-15 19:43:34
這是正確的,埃德溫。另一種方法是讓控制器初始化樹中的每個節點,即使是那些尚未可見的節點。這可能是耗時的。 – 2010-05-16 05:39:12