问题标签 [tvirtualstringtree]

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 回答
1119 浏览

delphi - 如何保存和加载我的 svTree 数据结构?

我正在尝试使用 VirtualStringTree 组件实现一个简单的联系人管理器。我将它设置为看起来像一个列表视图组件,只有三列都包含文本:

布局

对于数据结构,我使用的是 Linas 的 svTree,在另一个 Stack Overflow 问题中提到过。

我已经宣布了这样的记录:

在表单的 OnCreate 我有这个:

我正在添加来自 TEdits 的数据,如下所示:

如何将其保存到要加载的流或文件中?我试过使用MyTree.SaveToFile('C:/Test.dat')and MyTree.LoadFromFile('C:/Test.dat'),但是当它加载回来时,树视图不包含数据,只有一个空白行。

0 投票
1 回答
438 浏览

delphi - 如何不将重复项添加到 TVirtualStringTree?

我有两个 VirtualStringTree,第一个 VST 已经填充了数据,我想检查第二个 VST 并添加第一个 VST 中还没有的节点。或者我想从第二个 VST 添加那些不与第一个 VST 重复的节点。

我正在使用 D7。

0 投票
1 回答
1349 浏览

delphi - 如何使 VirtualStringTree 滚动条可见?

我在 form1 上放置了一个 VirtualStringTree(VST1) 并在其中添加了一些数据。无论节点数量如何,垂直滚动条都是可见的,并且我没有对节点高度的默认属性做任何事情。然后我将 VST1 复制到 form2 并将其命名为 VST2 并且 VST2 的滚动条不再可见。我改变了VST2的parent控件和align属性(我测试了很多次,不记得改变align和它的父属性的顺序),我不知道滚动条最后是如何显示的。然后我将 VST2 复制到 form3 并将其命名为 VST3。现在,无论我如何测试,当 VST3 中的数据超出其窗口视图时,它的垂直滚动条都无法看到。

VST的属性太多,应该设置哪些属性?

编辑:

[编辑]:

先谢谢了。

我仔细测试发现,如果我多次调用同一个函数,从第二次开始,就会出现那个virticalscrollbar。就像是:

我第一次点击button1,没有出现verticalscrollbar;如果是第二次或更多次,则显示完美。

为什么?,如何解决?

谢谢

0 投票
2 回答
3346 浏览

performance - VirtualStringTree 正确/推荐使用

我已经使用 virtualstringtree 一段时间了。我将它用于两件不同的事情,首先作为用于选择、显示数据的普通树,其次作为显示 SQL 语句输出的网格。

我加载到树中的所有数据都来自数据库。对于树示例,我有一个 parentId 字段来区分层次结构,对于网格示例,我只需使用 SQL 语句为每棵树(这是唯一的)定制记录。

我的问题与填充树的首选/最佳方式有关。我从 VST 文档中读到,您应该将 onInitNode 事件与 rootnodecount 一起使用。但是我发现使用 AddChild() 方法非常相似,即使不鼓励这样做。

让我展示一些(简化的)示例:

1. 层次结构

2.网格

所以基本上我绕过了 RootNodeCount 和 OnInitNode 方法/属性,并使用老式的方法将节点添加到树中。它似乎工作正常。请注意,在示例中,我在运行时创建和销毁我的查询。

我开始以这种方式使用树的原因是我可以一次加载树中的所有数据,然后在我完成使用后释放 TQuery。我在想,不管 TQuery 保持活动/创建,我仍然需要使用我的 rData 记录来存储数据,因此如果我不销毁 TQuery 会占用更多内存。目前,我的应用程序在完全加载时使用大约 250+MB,并且当我运行 SQL 报告并将它们显示在 VST 中时会增加。当我运行包含 20000 多个节点和 50 多列的 SQL 报告时,我已经看到它使用了大约 1GB 的内存。我想知道我使用 VST 的方式在最小化内存使用方面是否不正确?

我会更好地为树的生命周期创建一个查询并使用 onInitNode 事件吗?这样当树请求数据时,它会使用 onInitNode/OnInitChildren 事件(即树的纯虚拟范例)从 TQuery 中获取数据?因此,我需要在表单期间保持 TQuery 处于活动状态。以这种方式使用它会有任何内存优势/性能优势吗?

在上述情况下,我可以看到网格示例的差异将远远小于(如果有的话)层次结构 - 因为所有节点在填充时都需要初始化。

0 投票
2 回答
523 浏览

delphi - 使用 1 个数据副本同步多个 VirtualStringTree

我有一个显示在 VirtualStringTree 中的数据层次结构。我在我的应用程序中多次使用此层次结构,并对树的绘制/显示方式稍作修改。我的方法目前使用 AddChild() 过程来添加节点,因此当应用程序运行时我有多个数据副本。

我现在想合并这些树并拥有一个指向实际数据的“主”树,然后让“从”树指向相同的数据。

我有点不确定是否/如何实现这一点。我想我可以简单地加载主树并用指向我保存数据的位置的指针填充它的 NodeData,然后对于所有从树,只需将相同的指针存储在它们的节点数据中。

但是我运气不好。

我当前的代码如下所示:

将主树复制到从树的过程

从树获取CellText的过程

目前,节点已添加到正确的层次结构中,但是从属树没有出现任何文本。任何帮助,将不胜感激。

0 投票
1 回答
247 浏览

delphi - 虚拟字符串树 4.8.7 HeaderDblClick 事件没有功能?

我只是尝试使用 VirtualStringTree 组件(版本 4.8.7)的事件OnHeaderDblClick是否有可能,该事件不起作用?

还是我需要设置一些选项才能使其正常工作?

0 投票
2 回答
7248 浏览

delphi - VirtualStringTree - 使用对象时添加/处理子节点/子节点的正确方法?

我正在使用 Delphi2010 并尝试使用 VirtualStringTree 来解决问题。

我一直在尝试让它与对象一起工作并且没有运气,直到我遵循了 Philipp Frenzel 的 Virtual TreeView 教程,我在 soft-gems.net 网站上找到了该教程。到目前为止我想出的东西是可行的,但我认为我没有正确处理子节点(即子节点)。

我唯一能够开始工作的就是为每个孩子再次链接整个对象,然后只显示我需要的字段 - 但感觉很不对劲。

建议/反馈非常感谢。


我有我试图与 VirtualStringTree 连接的对象列表,我试图在其中实现这样的事情,其中​​一个字段将作为父级的标签,其余字段显示为子节点。

  • 罗伯特·莱恩
    • 男性
    • 35
    • 洛杉矶
    • 黑发
  • 简·多伊
    • 女性
    • 19
    • 丹佛
    • 红发女郎

这就是我的班级的设置方式。

填充对象后,我将它们添加到基于 TList 的另一个类(CustomerObjectList),如下所述。

这是我将 VirtualStringTree 与我的对象列表连接的地方

0 投票
2 回答
3501 浏览

delphi - VirtualStringTree - 在单元格中嵌入控件 - 控件不显示

所以,我在这里的最终目标是有一种方法来列出项目(如 vsReport 中的 TListView),并在客户区域内使用添加/删除按钮。

前任:

如果您知道一个无需所有这些额外工作就可以做到这一点的组件,请告诉我!

所以我选择了一个红色的关闭“X”并使用 TJvTransparentButton (Jedi Components - JVCL) 来显示它。它处理按下/未按下状态并且只显示图像。我最初使用的是 TButton,但我不需要字形周围的所有绒毛。

现在,我将图像按钮保留在与每个节点关联的记录中。

代码如下:

在 OnAfterCellPaint 事件中,我管理图像按钮的定位,如下所示:

现在的问题是这根本不显示该项目。我知道 TImageList 中的图像很好,因为我可以在设计时创建按钮,并且在运行时看起来很好。

我也知道这段代码应该可以工作,因为如果我将 TJvTransparentButton 设为常规 TButton(不更改代码逻辑),它工作得很好并且显示得很好!

我唯一能想到的是 TButton 从 TWinControl 继承,而 TJvTransparentButton 从 TControl 继承。

有任何想法吗?

0 投票
0 回答
694 浏览

delphi - Tvirtualstringtree,超过2000行,它在底部添加节点并且变得不可见并且也不会在绘图功能上触发?

我阅读了有关隐藏和显示节点以进行过滤的文本,但如果我们设置超过 2000 行以使节点可见/不可见,

当我们尝试将ChildNode插入顶部时,在这一行之后,它会将节点添加到底部,并且此行中没有显示任何节点。

我查看了代码中提到的VirtualTreeViewCacheThreshold的代码作为init value 2000?

如果将节点添加到第一个函数,则可以重现错误

您可以随时添加很多行。

但是,当您在此操作后将所有这些行设置为可见时,

如果节点数达到大于CacheThreshold,则尝试插入更多根节点(始终为 root=nil)将被添加到底部,例如不可见节点。

只有白色空白区域显示添加了这个早期的孩子......在树的底部?

另外,对于这个空白区域,不会触发OnGetTextOnPaint事件吗?

我试图增加CacheThreshold,那么这些增加的数量是可以的,但是在更大的数量之后会出现同样的问题。

[编辑]

如果我使用下面的代码,它可以正常工作,但它会花费更多的 CPU 使用率,

但是如果我使用下面的代码,它可以工作一段时间,然后在 2000 年之后变得不稳定(默认缓存阈值),我将节点添加到顶部,但是在 2000 年添加之后,它开始添加到底部并且节点变得不可见,但体积为只有空白区域的行..我想使用代码作为打击来更新只关注的行,但是在 2000 年 NodeisVisible() 函数调用之后它是有问题的

NodeisVisibleFunction 是:

0 投票
1 回答
2267 浏览

delphi - 如何隐藏虚拟字符串树中的特定列?

如何隐藏虚拟字符串树中的特定列?

我试过这段代码:

它显示列,但不显示标题标题。为什么?