gpt4 book ai didi

delphi - Delphi 的虚拟 TreeView 中的快速滚动

转载 作者:行者123 更新时间:2023-12-03 15:49:15 25 4
gpt4 key购买 nike

[这是之前发布的问题的更新版本,之前的标题是在 Delphi 的虚拟 TreeView 中按索引选择节点。]

经过一天的大部分时间,我相信我已经让虚拟 TreeView 组件(功能强大但复杂)以简单的两个表数据感知方式工作。

现在,我尝试简单地选择第 1,512 个(例如)顶级节点。除了获取第一个顶级节点然后在循环中调用 GetNextSibling 1,511 之外,我看不出有任何方法可以做到这一点。

这似乎没有必要。有没有更简单的方法?

更新

由于初始化树中的节点需要访问数据库,因此在启动时初始化所有节点是不可行的。当用户从尚未选择任何记录的表单开始时,这很好。当用户在树上滚动时,会填充足够的节点以将当前窗口显示到树中,并且性能良好。

当用户在已选择数据库记录的情况下以对话框模式启动表单时,我必须在用户看到表单之前将树前进到该节点。这是一个问题,因为如果记录接近树的末尾,那么当我从第一个节点遍历树时可能需要十秒钟。每次我调用 GetNextSibling() 时,都会初始化一个节点,即使这些节点中的绝大多数不会向用户显示。我更愿意将这些节点的初始化推迟到它们对用户可见的时候。

我知道一定有更好的方法,因为如果我在没有选择记录的情况下打开树并使用垂直滚动条在单个操作中移动到树的中间,那么就会显示正确的节点< em>无需初始化我跳过的节点。

这是我在打开选定记录的树时想要达到的效果。我知道我想要去的节点的索引,但是如果我无法通过索引到达那里,我可以在树上进行二分搜索,假设我可以向后和向前跳转一些节点(类似于直接滚动到树的中间)。

或者,也许我可以对 TreeView 进行一些状态设置,这将使中间节点在我遍历网格时保持未初始化状态。我尝试过“开始/结束更新”,但这似乎不起作用。

最佳答案

要获取节点的同级节点而不对其进行初始化,只需使用 NextSibling 指针(请参阅 TVirtualNode 的声明)。

关于delphi - Delphi 的虚拟 TreeView 中的快速滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2215090/

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