问题标签 [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 回答
1068 浏览

multithreading - EnumWindows 和 EnumChildWindows 让我的 Treeview 保持更新

我正在尝试制作一个类似于 Winspector Spy 的程序。我的问题是我希望我的虚拟树视图随时更新——也就是说,在创建窗口、销毁窗口等时更新它。当然,所有外部 HWND。

为此,我正在考虑编写一个包含所有 Handles + 信息的数据容器,并在单独的线程中执行 EnumWindows 和 EnumChildWindows,在那里我将用所述信息填充我的数据容器。

您会建议我这样做吗,还是您有其他解决方案?如果我这样做,那么我是否应该让我的线程在整个程序生命周期内运行,然后在其中有一个无限循环Execute,它将清除我的数据容器,并每秒再次填充它,还是什么?

这是我的数据容器:

0 投票
1 回答
1746 浏览

delphi - 在 TVirtualStringTree 中带有 UserData 参数的 InsertNode

我需要向 TVirtualStringTree 插入一些新节点。我使用带有 UserData 参数的 InsertNode 方法。但是树不能显示任何数据。如何获取 GetText/FreeNode 事件的用户数据?

0 投票
1 回答
787 浏览

delphi - 是否可以使用带有 VirtualTreeView 节点的动画图标?

我在 Delphi 2010 中使用了很棒的VirtualTreeView 组件。目前,我的节点在 TImageList 中设置了标准图像。我想做的是能够显示某种类型的旋转动画图标,以直观地显示节点“忙”。

显然节点不会很忙,但是节点向用户表示的内容实际上会很忙。是否有捷径可寻?

我能想到的唯一方法是创建添加 8-10 个图像来代表我当前的 TImageList 的旋转轮,然后为该节点循环遍历它们。

有没有人有什么建议?

0 投票
1 回答
1363 浏览

delphi - 如何最好地在基本 Delphi TVirtualTreeView 节点图标之上呈现覆盖图标

我正在将标准 TTreeView 的树视图转换为使用 TVirtualStringTree。我的最后一个挑战是实现一个功能,我需要在已知节点图标的顶部绘制一个“通过/失败”状态指示器。使用 TTreeView 我使用:

结果是基本图标上的红叉,如下所示:

在此处输入图像描述

使用 TVirtualStringTree,我希望找到更好的方法,或者为所需的覆盖图标位置获得更好的位置。我正在做:

这是最好的解决方案吗?有没有更好的方法可以在没有可怕的节点级别调用的情况下获得基本图标的上/左角?

0 投票
1 回答
455 浏览

installation - Embarcadero RAD Studio XE中Virtual Treview的安装问题

我听说虚拟树视图是 Stac Overflow 上 Embarcadero RAD Studio 的最佳树视图。

所以我已经从它的网站下载了 Virtual Treeview Setup 4.8.7.exe 并安装了。

它显示它安装没有任何错误,但它没有在 IDE 中显示我尝试了很多东西但失败并要求作者但没有回复

所以有人有解决方案请给我

0 投票
2 回答
1100 浏览

string - 在 TVirtualStringTree 的 InitNode 事件中分配字符串时访问冲突

给定的代码在 Delphi 2007 中没有任何问题。但是在 Delphi 2009 中我遇到了一个异常。

访问冲突显示读取地址 $00000000。

该问题仅在分配字符串时存在,它适用于数字。

此外,当我Data.Text通过调试器选项手动分配时,我没有得到任何 AV - 它可以工作。

老实说,我迷路了,有人可以帮助我吗?

0 投票
1 回答
1761 浏览

delphi - 如何刷新 VirtualStringTree 中的垂直滚动条?

VirtualStringTree如果每个节点高度更改为不同的高度,如何刷新滚动条。因为,滚动仍然处于相同状态,导致滚动时无法查看其他节点。

toVariableNodeHeight选项不起作用?还有其他想法吗?

0 投票
1 回答
659 浏览

delphi - 如何更新 VirtualStringTree 滚动条?

我很难在 VirtualStringTree 上解决我的问题。

  • NodeData最初添加了一个Node.NodeHeight
  • DefaultNodeHeight

现在的问题是我要将每个NodeHeight更改为不同的大小。结果,VirtualStringTree 没有给我正确的 Scrolling,导致无法看到其他节点。

有人可以帮忙吗?

0 投票
1 回答
2726 浏览

delphi - VirtualStringTree CellPaint

好吧,我有以下问题:

根据一些布尔变量,我用不同的颜色绘制了树细胞。例子:

  • isProcessService,
  • isProcessInDebugger,
  • isProcessService,
  • isProcessElevated,
  • 是ProcessNet,
  • isProcessOwner,
  • isProcessinJob,
  • isProcessPacked,
  • isProcessMarkedForDeletion,
  • isProcessMarkedForCreation : 布尔值;

因此,在 BeforeCellPaint 中,我将根据这些布尔值绘制单元格背景颜色,例如:


问题是:

如何根据要创建或删除的进程将单元格涂成绿色或红色(让颜色保持至少一秒钟,然后切换回其原始值?)

换句话说,创建了一个进程,将单元格涂成绿色,稍等片刻,然后切换回原始颜色,具体取决于:isProcessService、is ProcessOwner 等等...

最大的问题是我在非阻塞模式下需要这个(我不能使用睡眠,否则树也会冻结,所以颜色变化不会被注意到)

如果您仍然无法关注我,我正在尝试模仿 Process Explorer 或 Process Hacker 在创建或删除进程时所做的相同行为。这两个应用程序都将这些进程的单元格背景涂成红色或绿色一秒钟,然后切换回单元格的原始颜色。

仅供参考,我将通过 wmi 收到有关进程创建或删除的通知。

0 投票
2 回答
1190 浏览

delphi - VirtualStringTree 使用缓存系统更新数据

好吧,我正在使用 VirtualStringTree 来创建一种流程管理器......

由于使用设置为 1000 毫秒的计时器更新树,我遇到了麻烦(cpu 使用率对于我的应用程序检索大量数据(填充大约 20 列)来说太高了。

所以我想知道如何构建一种缓存系统,以便我只能在发生某些变化时更新树,我猜这似乎是减少我的应用程序 cpu 使用率的关键?

剪辑:

如果我的应用程序启动,我会用所有正在运行的进程填充树。请记住,这只调用一次,稍后当应用程序运行时,我会收到新进程或通过 wmi 终止的进程的通知,因此我不需要稍后在计时器中调用以下过程来更新树...

我有一个类,它将检索我想要的所有数据并将其存储到树中,例如:

因此,如果我想枚举所有正在运行的进程,我只需给它一个如下调用:

问题从这里开始,而我枚举了所有内容,而不仅仅是已经更改的数据,这些数据非常占用 CPU:

基本上,计时器仅用于 cpu 使用和我可以从以下进程中检索的所有内存信息:

  • 私有内存
  • 工作集
  • 峰值工作集
  • 虚拟尺寸
  • 页面文件使用
  • 峰值页面文件使用
  • 页面错误
  • CPU使用率
  • 线程数
  • 处理计数
  • GDI 句柄计数
  • 用户句柄计数
  • 总 CPU 时间
  • 用户 CPU 时间
  • 内核CPU时间

所以我认为上面的数据必须被缓存并以某种方式进行比较,如果它改变了,或者不只是想知道如何以及什么是最有效的?