【问题标题】:How to reliably scroll Virtual TreeView to the bottom?如何可靠地将 Virtual TreeView 滚动到底部?
【发布时间】:2010-05-15 08:12:49
【问题描述】:

具有自定义节点高度的 TVirtualStringTree 对象,如何可靠地将 Virtual TreeView 滚动到底部(即滚动条到达底部)?

我尝试拨打tree1.FullExpand,然后拨打tree1.ScrollIntoView.(tree1.GetLast),但它不起作用。

提前谢谢你。

【问题讨论】:

    标签: delphi virtualtreeview


    【解决方案1】:

    ScrollIntoView 很适合我。你也可以试试tree1.FocusedNode := tree1.GetLast;

    您是否在 OnMeasureItem 事件中设置自定义节点高度? 如果它不起作用,请尝试将树的 DefaultNodeHeight 设置为更大的值,并在 OnMeasureItem 事件中将其更改为更低。我注意到树以这种方式更好地重新计算滚动条的长度。

    【讨论】:

    • 谢谢丽纳斯。是的,我正在根据节点内容为 OnMeasureItem 事件中的每个节点设置自定义高度。设置“tree1.FocusedNode”不起作用。我会尝试你所说的为所有节点设置最大高度然后调整值。
    • 您好 Linas,您建议的第二种方法有效!在滚动操作期间进行计算时,Virtual Treeview 似乎使用了 DefaultNodeHeight。
    • 没错,埃德温。另一种方法是让控件初始化树中的每个节点,即使是那些尚未可见的节点。这可能很耗时。
    【解决方案2】:

    试试这个:

    SendMessage(VST.Handle, WM_VSCROLL, SB_BOTTOM, 0);
    PostMessage(VST.Handle, WM_VSCROLL, SB_BOTTOM, 0);
    

    【讨论】:

      【解决方案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;
      

      希望对你有帮助。

      【讨论】:

        【解决方案4】:

        这也应该有效:

        tree1.TopNode := tree1.GetLast
        

        【讨论】:

        • 感谢 Straveu。它也不起作用... PS。如果我手动(不是以编程方式)向下滚动到最后一个节点,我可以完成打印树视图。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-28
        • 1970-01-01
        • 1970-01-01
        • 2013-07-22
        • 2010-10-28
        • 2010-10-30
        • 1970-01-01
        相关资源
        最近更新 更多