问题标签 [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 投票
1 回答
247 浏览

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

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

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

0 投票
4 回答
3859 浏览

delphi - VirtualTreeView:正确处理选择更改

对于那些自己没有遇到过问题的人来说,这个问题似乎很明显。

我需要处理 VTV 中的选择更改。我有一个简单的节点列表。每当我需要对所有当前选定的节点进行处理

  1. 用户点击一个节点;
  2. 用户 Shift/Ctrl-单击一个节点;
  3. 用户使用箭头键浏览列表;
  4. 用户通过拖动鼠标创建选择
  5. 用户通过单击空白区域或按住 Ctrl 键单击唯一选定的节点来删除选择

等等。这是最常见和预期的行为,就像 Windows 资源管理器一样:当您使用鼠标和/或键盘选择文件时,信息面板会显示它们的属性。我只需要这些。这就是我卡住的地方。

我的一些研究如下。


起初我使用 OnChange。它似乎运行良好,但我注意到一些奇怪的闪烁,我发现在最常见的情况下(选择一个节点,用户单击另一个节点) OnChange 被触发两次:

  1. 取消选择旧节点时。此时选择为空。我刷新我的 GUI 以显示“未选择任何内容”标签来代替所有属性。
  2. 选择新节点时。我再次刷新我的 GUI 以显示新节点的属性。因此闪烁。

这个问题是 googleable,所以我发现人们使用 OnFocusChange 和 OnFocusChanging 而不是 OnChange。但是这种方式只适用于单选。使用多项选择、拖动选择和导航键,这是行不通的。在某些情况下,焦点事件甚至根本不会触发(例如,当通过单击空白区域删除选择时)。

我做了一些调试输出研究来了解这些处理程序在不同场景中是如何被触发的。我发现完全是一团糟,没有任何明显的感觉或模式。

这很难阅读。简而言之,它表示根据特定的用户操作,三个处理程序(OnChange、OnFocusChange 和 OnFocusChanging)以随机顺序和随机参数调用。当我仍然需要处理事件时,有时永远不会调用 FC 和 FCg,因此很明显我必须使用 OnChange。

但是下一个任务是:在 OnChange 内部,我不知道是应该使用这个调用还是等待下一个调用。有时选定的节点集是中间的且无用的,处理它会导致 GUI 闪烁和/或不需要的繁重计算。

我只需要标有“!”的电话 在上表中。但是没有办法从内部区分它们。例如:如果我在“C-”(OnChange,Node = nil,SelectedCount = 0)中,这可能意味着用户删除了选择(然后我需要处理它)或者他们点击了另一个节点(然后我需要等待形成新选择时的下一次 OnChange 调用)。


无论如何,我希望我的研究是不必要的。我希望我错过了一些可以使解决方案简单明了的东西,并且你们会为我指出这一点。使用我目前所拥有的解决这个难题会产生一些非常不可靠和复杂的逻辑。

提前致谢!

0 投票
2 回答
7248 浏览

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

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

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

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

建议/反馈非常感谢。


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

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

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

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

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

0 投票
1 回答
830 浏览

delphi - Virtual Treeview (C++ Builder) 2 图标在 Windows 7 上重叠,但在 XP 上不重叠

我在 Windows 7 上遇到了 VirtualTreeView 组件的问题。我添加了一个TVirtualStringTree并使用OnGetImageIndex事件来分配始终在调试器中非零值的ImageIndex 。

VirtualStringTree 使用带有 16x16 图标的TImageList作为Images属性。

在 Windows XP 上,它可以正常工作,在 Windows 7 上,它与 TImageList 中索引为 0 的图标重叠在普通图标之上。我在 Windows 7 上运行与 XP 相同的程序,因此代码相同,但绘图不同。

这张图说明了这个问题:

虚拟树视图问题

灰色三角形图标的索引为 0,文件夹图标的索引为 5。

这是 VirtualStringTree 中的错误吗?我能以某种方式避免这种情况吗?

我正在使用存储库中最新的 VirtualTreeView 版本。

0 投票
1 回答
1133 浏览

delphi - 双击TVirtualTreeView(TVirtualStringTree)标题时如何阻止排序符号隐藏

我使用 VirtualStringTree 控件作为列表视图并使用排序功能。但是,当我双击 VirtualStringTree 标题时,排序方向符号会隐藏,直到我再次单击标题。

可以禁用该行为吗?

我尝试过但不起作用的事情:

  • 我已搜索属性,但找不到相关设置
  • 我已将双击标题事件链接到单击标题事件

我的环境是Delphi 2007 Pro,Windows 7 Pro 64bit。

0 投票
3 回答
490 浏览

windows - Delphi XE2 是否删除了 IsWinNT 功能?

移植到 XE2,我得到了一条IsWinNT在 7 和 Delphi 2009 中编译的代码,以前从未给我们任何闲聊。

我不确定这样一个功能的目的是什么,但它是被删除还是移动了?

什么是可比较的功能?


我的错,它在虚拟树中。对不起伙计们-1对我来说。免费 +1 的房子

0 投票
2 回答
2882 浏览

delphi - 如果鼠标不在 VirtualTreeView (TVirtualStringTree) 上,如何禁用 MouseWheel

TVirtualStringTree 默认情况下,如果它被聚焦,它会在鼠标滚轮上滚动,即使鼠标没有被控制(除非它在另一个 TVirtualStringTree 上)。

有没有一种快速而优雅的方法来禁用这种行为?

我已经用OnMouseWheel事件做了这个,并检查它PtInRect是否Mouse.CursorPos在一个控件上,但我觉得有更好的方法来做同样的事情,因为这样我必须为我添加的每个 TreeView 定义一个新事件,而且处理何时聚焦/取消聚焦控件,所以我希望必须有更好的方法来禁用它。

所以要清楚,我希望鼠标滚轮功能像往常一样工作,但只有当鼠标悬停在 VirtualTreeView 上时。

0 投票
1 回答
490 浏览

delphi - 如何在 virtualtreeview 中的大面积单元格上进行选择?

我使用 TVirtualTreeView 作为旧 TStringgrid 的绝佳替代品。

不过,我缺少的一个功能是可以选择任何单元格区域(除了单列、行或整个区域)。

我找不到任何解决方案,有人有建议吗?

0 投票
3 回答
3568 浏览

delphi - XE2 的 VirtualTreeView 组件

我在哪里可以获得 Delphi XE2 的 VirtualTreeView 组件?
我可以在这里看到 VirtualTreeView 的下载作为顶部链接:http:
//www.soft-gems.net/index.php? option=com_content&task=view&id=30&Itemid=35

但是 Delphi XE2 没有软件包,安装程序不支持 XE2。
仅源包仅支持 Delphi 2007(这是 Unicode 之前的版本)。

0 投票
2 回答
6913 浏览

delphi - VirtualTreeview拖放以在列表中排列节点

我有一个节点列表。我想添加一个拖放重新排列功能,但我不知道如何去做。

我尝试使用 TVirtualStringTree 的 OnDragDrop 事件,但我无法弄清楚。我查看了文档,遗憾的是那里没有用于普通节点拖放的最小示例代码。

请注意,这只是一个单级列表。没有等级。:)