问题标签 [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.
delphi - 从 ListView 切换到 VirtualStringTree
由于速度差异很大,我正在尝试使用 VirtualStringTree 而不是 Listview 来构建我的项目。问题是,即使在查看了演示之后,我也无法确切地弄清楚我将如何将它用作 ListView。就像,添加、删除和基本上只是使用 ListView 项目非常容易,但是当我查看 VT 时,它变得几乎太复杂了。
我正在寻找的只是一个看起来像 ListView、带有子项等的 VT。
以下是一些使用 ListView 的例程,我想与 VT 一起使用(这只是一个伪示例:
当然,还有删除功能,但因为那就像 1 行,我没有打扰:P
任何人都可以将上述示例转换为使用 ListView 样式的 VT 吗?
谢谢!
delphi - Delphi VirtualStringTree 绘图
我一直试图弄清楚这两件事:
1)如何更改代码中整行的颜色?比如,当 VT 看起来像 ListView 时?
2)如何使复选框也缩进?我的孩子复选框和同一个“缩进?” 作为我的根复选框。
谢谢!
delphi - 虚拟字符串树 - 隐藏父节点时显示子节点
如果父节点隐藏在虚拟字符串树中,有没有办法显示子节点?
我在树结构中有一些任务,我希望只显示属于当前用户的任务作为列表,但来自所有级别。我所做的是显示列表的功能,它隐藏了树按钮、树线、设置固定缩进并启用 toShowHiddenNodes 选项。然后在这个函数中,我遍历整个树(所有级别)并隐藏不属于当前用户IsVisible[Node] := False的节点并显示属于他的那些IsVisible[Node] := True,但子节点当它们的父级隐藏时,应该显示的内容是不可见的。
VT.TreeOptions.PaintOptions
- toShowButtons
- toShowTreeLines
+ toFixedIndent
+ toShowHiddenNodes
delphi - Delphi VirtualStringTree - 缩进问题
嘿!我意识到我的子节点没有缩进 - 它们与根节点处于同一级别。这是一个屏幕截图:
如您所见,子节点位于第一级的缩进上。FixedIndent 已关闭,所以这不是导致它的原因..
有什么建议么?
谢谢!
delphi - Delphi VirtualStringTree - 检查重复项?
是的,我知道我发布了很多问题,但那是因为我需要保证我做对了,我做错了什么,或者我完全一无所知,并且在文档中找不到任何东西。无论如何,
我正在尝试检查重复节点。这是我想做的事情:
遍历我的节点,并比较每个节点的文本(记录),但是如果我有很多节点,那会不会太耗时和消耗内存?会有更好的方法吗?
谢谢!- 杰夫。
编辑:感谢 Deltics,我得到了它的工作!如果我们有一些人有同样的问题,这里有一些工作代码,在 VST 中使用 2 级节点!
我不害怕分享我的代码,我欠社区的。:)
delphi - 哪种数据结构最适合 VirtualStringTree?
我想曾经使用过 Delphi 的 VirtualStringTree 的每个人都会同意它是一个很棒的控件。这是一个“虚拟”控件(您的数据必须保存在其他地方)所以我在想哪种数据结构最适合这样的任务?IMO 认为数据结构必须支持层次结构,它必须快速且易于扩展。最简单的实现是使用记录,这就是大多数可以找到的文档所暗示的。但是,如果您需要进行一些快速查找、计算总数等怎么办?您与 VirtualStringTree 一起使用的数据结构是什么?
EDIT1:我使用的是 Delphi 2010。
好的,我将尝试提供有关我的要求的更多详细信息。数据大小可以变化很大,从 1 到数千个项目。每个项目可以包含多个字符串、整数值。我需要随机访问,我的数据可以在应用程序生命周期内多次更改。良好的性能是非常可取的。我还需要数据保存和重新加载。
EDIT2:得到 1 个答案,所以我会尝试评论我的意见。谢谢,Dorin 的回答,但我认为你的结构不是很方便。1)它不处理层次结构。2) 每个节点都有单独的 TStringList 或 TList 不是很有效的 IMO。通过这种实现,我只能查找当前节点的数据,但不能有效地在整个树中搜索。
我想这个数据结构一定像一棵树。它必须具有能够添加子节点的节点。然后我可以在 OnInitNode 事件中获取节点的数据,检查我的节点是否有一些子节点,如果有则设置 ivsHasChildren 标志,然后在 OnInitChildren 事件中设置正确的子节点计数。稍后在 OnGetText 事件中,我可以从节点结构中获取所需的数据,并根据 Column 索引将其设置为 CellText。我的想法是拥有一个单独的数据结构,并使用它完成所有需要的操作,而无需使用 VirtualStringTree。希望有人明白我的意思:)。
EDIT3:我发现了非常有趣的 JclTrees 单元,乍一看可以用来实现我正在寻找的东西。它属于JCL库。缺乏像样的文档使得很难快速调查它的功能。当我有更多时间时,我可能会更深入地研究它。
delphi - VirtualTreeview 节点,将它们传递给另一种形式?
我的应用程序将通过虚拟节点循环并检查它们的数据。我正在使用另一种表单来执行此操作,而不是包含 VirtualStringTree 的表单。(我有我的理由;))
我的问题是:如何将这些节点+它们的数据传递给我其他形式的函数,然后该函数将能够通过节点循环(我知道如何循环,我只需要节点以我的其他形式可用)。
另外,请注意,一旦显示处理表单,包含 VirtualStringTree 的表单就会被销毁!
我怎么能那样做?我正在考虑创建一个动态的 VirtualStringTree,并以某种方式将节点从一棵树传递到另一棵树,但我会先在这里询问任何更好的解决方案。:)
谢谢,杰夫。
delphi - 在 VirtualStringTree 中设置节点的索引?
我正在尝试更改节点的索引,因为有些特定节点始终需要位于树的底部。我试图更改 Node.Index,但这并没有改变任何东西。所以我的问题是:如何更改 PVirtualNode 的索引?
谢谢!- 杰夫
delphi - 如何安装虚拟树视图?
Mike Lischke 的 Virtual treeview 似乎在网络上和作为第三方组件非常流行。我刚刚在我的机器上下载了 4.8.7 版本。
我在 2 个分区中有 Delphi 2010 和 Delphi 7.0。
点击虚拟树视图的安装程序后,有一个日志文件提示,说它已经安装成功。
我检查了 Delphi 2010,是的,它在显示 3 个控件的组件面板上。
但是当我启动 Delphi 7.0 时,IDE 提示“无法加载 VirtualtreesD7.bpl...”。我忽略了它,发现虚拟树视图设计时包在列表中但未选中。如果我尝试检查它,它会再次提示“无法加载 virtualtreesD7 ...”。
我搜索整个磁盘并找到一个 VirtualTreesD7D.bpl,并在设计时包列表中手动添加它。它在带有 3 个控件的调色板上。
我快速测试了它并退出了 Delphi 7.0。但是当我重新启动 Delphi 7.0 时,它再次提示“无法加载 VirtualtreesD7.bpl ...”,它再次不在面板上,也没有在设计时包列表中检查。
这是一个非常简单的问题。你能告诉我如何解决吗?非常感谢您提前。
编辑:
感谢您的评论。
我测试了你的评论,但没有用。
新问题:
如果我通过单击 unins000.exe 卸载虚拟树视图并仅在 Delphi 7.0 中重新安装它,安装程序在最后一个屏幕中提示 ''...completed.." 并且没有错误提示。当我启动 Delphi 7 时,虚拟树视图设计时间package is not in package list. 这比上次更糟糕(上次它在包列表中但没有检查)。
我非常仔细地逐行检查该日志文件,它说:
为什么?为什么它没有安装成功并且在最后一个安装屏幕中没有提示安装错误。
如何解决这个“致命...未找到”的问题。
谢谢大家的帮助。
新编辑:(这是答案吗?)
首先感谢您的帮助和建议。
我花了 2 个小时进行测试并找到可能的解决方案。它可以在我的机器上运行,并且可以安装在 Delphi 7.0 中。
脚步:
我个人觉得 Virtual treeview 的安装程序需要改进,以使用户免于安装时遇到这样的麻烦和测试。安装程序需要重写。
这是我的安装案例。我不知道它是否可以推广到所有用户。
谢谢你们。
delphi - VirtualStringTree - 有什么方法可以确定何时检查节点集合?
我有一个使用 TriStateChecking 的 VST。它连接到一个数据库表,所以当用户检查一个节点时,它的选中字段在数据库中更新。我希望最终用户看不到它;那是没有“保存”按钮。
我目前正在使用 OnChecked() 事件来更新数据库。问题是在检查大量节点时,它本质上是执行#CheckedNodes SQL 更新语句。我想做的是在所有三态检查完成时捕获/收到通知,这样我就可以简单地扫描树并构造一个 SQL 更新语句。
完成所有三态检查后,我可以使用一个事件吗?