问题标签 [virtualtreeview]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1742 浏览

delphi - VirtualTreeview:何时对孩子进行排序?

我依靠 VirtualTreeView 来显示数以千计的项目,这些项目偶尔会发生变化,当这种情况发生时,树会被清理并再次填充。

排序是自动完成的(toAutoSort标志集),但这会产生递归初始化所有节点的不良影响,这是一个非常昂贵的操作,您可以想象。

那么何时应该在关闭时调用该.Sort方法toAutoSort?(DoInitChildren 看起来很合理,但我偶尔会得到奇怪的结果,比如颠倒的结果,所以我认为这不是对孩子进行分类的好事件。)

0 投票
1 回答
476 浏览

delphi - 如何使用 TJvBalloonWindow 作为 Virtual treeview 的提示窗口?

我在 Office 加载项中使用 Virtual Treeview 时遇到“提示窗口剩余”问题,现在我想自定义提示窗口以解决该问题。我想使用 JVCL 包中的 TJvBallonHint,它也用于我程序的其他部分。

我继承了 TVirtualStringTree 并重写了 GetHintWindowClass 方法,如下面的代码。应用了 TJvBallonHint 窗口类,但不绘制提示文本。对我有什么建议吗?谢谢!

0 投票
1 回答
777 浏览

delphi - Delphi5 Virtual TreeView 想要

有没有人碰巧拥有与 Delphi5 兼容的 Virtual TreeView 的副本?或者有谁知道在哪里可以下载?

提前感谢任何回复。

0 投票
3 回答
2933 浏览

delphi - (RAD Studio) Virtual TreeView:如何一次初始化所有节点?

我刚刚发现了这个组件并开始使用它。

我知道它的整个概念是在需要时随时初始化节点,但我需要所有节点立即初始化。

什么是聪明的方法?

我想出的唯一方法是在添加节点后使用GetLast() 。
我相信,有没有更好的方法?

0 投票
1 回答
4151 浏览

delphi - Delphi - ListView 或类似的所有者绘制按钮

如何在每行上创建一个带有按钮的列表视图(或类似视图)?按钮需要能够根据需要在每行上具有不同的文本/颜色。

我确信 Virtual Treeview 非常适合这个,但我对它有点迷茫。

谢谢

-布拉德

0 投票
4 回答
1337 浏览

delphi - Delphi 7 和 Delphi 2010 之间的 TVirtualStringTree 兼容性 - “参数列表不同”

我制作了一个包含 TVirtualStringTree 的表单,可在 Delphi 7 和 Delphi 2010 中使用。我注意到当我在两个平台之间移动时,我在树事件和字符串上收到消息“...参数列表不同..”类型在 TWideString (D7) 和 string (D2010) 之间发生变化。我发现抑制此错误的唯一技巧是使用编译器指令,如下所示:

并在执行事件的地方重复此操作。我错过了一个简单的解决方案吗?谢谢。

0 投票
1 回答
273 浏览

delphi - 使用类对象而不是 VirtualStringTree 中的记录是否有任何权衡?

关于:Delphi,VirtualStringTree - 类(对象)而不是记录

是内存增加还是什么?

PS:我使用的是 Delphi 2007。

0 投票
1 回答
5235 浏览

delphi - TVirtualStringTree 中的自动调整列大小

攀登 TVirtualTreeView 的学习高峰,我正在尝试创建一个自定义后代,以确保在调整控件大小时,最后一列的宽度完全填充控件的宽度,而无需水平滚动条。

我看到许多与“AutoFitColumns”有关的项目(一种方法和许多事件),但没有涵盖此功能的文档。我可以使用 AutoFitColumns 自动调整最后一列的大小吗?如果可以,如何调整。

0 投票
5 回答
3068 浏览

delphi - TVirtualStringTree - 重置非可视节点和内存消耗

我有一个应用程序,它从二进制日志文件加载记录并将它们显示在虚拟 TListView 中。一个文件中可能有数百万条记录,并且显示可以被用户过滤,所以我不会一次加载内存中的所有记录,并且ListView项索引不是一对一的关系文件记录偏移量(例如,列表项 1 可能是文件记录 100)。我使用 ListView 的 OnDataHint 事件仅加载 ListView 实际感兴趣的项目的记录。当用户滚动时,由 OnDataHint 指定的范围发生变化,允许我释放不在新范围内的记录,并分配新记录如所须。

这工作正常,速度是可以忍受的,而且内存占用非常低。

我目前正在评估 TVirtualStringTree 作为 TListView 的替代品,主要是因为我想添加展开/折叠跨越多行的记录的能力(我可以通过动态增加/减少项目计数来使用 TListView 捏造它,但这不是就像使用一棵真正的树一样直接)。

在大多数情况下,我已经能够移植 TListView 逻辑并让一切按我的需要工作。不过,我注意到 TVirtualStringTree 的虚拟范例有很大不同。它没有与 TListView 相同的 OnDataHint 功能(我可以使用 OnScroll 事件来伪造它,这允许我的内存缓冲区逻辑继续工作),并且我可以使用 OnInitializeNode 事件将节点与分配的记录相关联.

但是,一旦树节点被初始化,它会看到它在树的生命周期内保持初始化状态。这对我不好。当用户滚动并从内存中删除记录时,我需要重置这些非可视节点而不将它们从树中完全删除,或者丢失它们的展开/折叠状态。当用户将它们滚动回视图时,我可以重新分配记录并重新初始化节点。基本上,就虚拟化而言,我想让 TVirtualStringTree 尽可能地像 TListView 一样。

我已经看到 TVirtualStringTree 有一个 ResetNode() 方法,但是每当我尝试使用它时都会遇到各种错误。我一定是用错了。我还想在每个节点内存储一个数据指针到我的记录缓冲区,然后分配和释放内存,相应地更新这些指针。最终效果也不是那么好。

更糟糕的是,我最大的测试日志文件中有大约 500 万条记录。如果我一次用这么多节点初始化 TVirtualStringTree(当日志显示未过滤时),树的节点内部开销会占用高达 260MB 的内存(还没有分配任何记录)。而使用 TListView,加载相同的日志文件及其背后的所有内存逻辑,我只需使用几 MB 就可以逃脱。

有任何想法吗?

0 投票
4 回答
5036 浏览

delphi - 如何可靠地将 Virtual TreeView 滚动到底部?

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

我试着打电话tree1.FullExpandthen tree1.ScrollIntoView.(tree1.GetLast),但它不起作用。

先感谢您。