gpt4 book ai didi

delphi - 如何刷新 VirtualStringTree 中的垂直滚动条?

转载 作者:行者123 更新时间:2023-12-03 18:33:44 26 4
gpt4 key购买 nike

VirtualStringTree的滚动条如何刷新如果每个节点高度都更改为不同的高度。因为,滚动仍然处于相同状态,导致滚动时无法查看其他节点。
toVariableNodeHeight选项不起作用?还有其他想法吗?

最佳答案

有些东西告诉我,当您说“每个 NodeHeight 都已更改”时,您的真正意思是说您直接为 NodeHeight 分配了新值。每个节点记录的字段。首先,不要那样做。如果必须为节点分配高度,请通过树的 NodeHeight 分配它们。属性(property)。也就是说,而不是这样:

{*} Node.NodeHeight := x;

做这个:
Tree.NodeHeight[Node] := x;

这将自动调整所有节点祖先的缓存高度,这决定了滚动条的范围。

更好的是,根本不要为节点分配高度。相反,处理树的 OnMeasureItem事件,树会询问您每个节点的高度。当您拥有 toVariableNodeHeight 时会触发该事件选项集。

如果您真的坚持跳过树的节点高度管理,那么您需要确保自己处理所有必要的任务。这不仅包括更新 NodeHeight字段也是 TotalHeight节点的字段、它的父节点、它的祖父节点等等,直到你设置了隐藏根节点的总高度。见 TBaseVirtualTree.AdjustTotalHeight详情。它具有私有(private)可见性,因此您不能自己调用​​它。
OnMeasureItem只会为一个节点调用一次。如果由于节点的内容发生了变化而需要再次调用它并且需要树重新测量高度,则调用 ReinitNode .如果您使用 TCustomVirtualStringTree ,您也可以调用 InvalidateNode .

关于delphi - 如何刷新 VirtualStringTree 中的垂直滚动条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6436949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com