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

delphi - 虚拟字符串树的提示窗口在屏幕上被遗漏了

看这个截图,中间是由 TVirtualStringTree 控件生成的小提示窗口,它们被遗漏在屏幕上,这些提示窗口将一直存在,直到应用程序退出。当显示树视图的提示并且鼠标快速离开它旁边的窗口时,就会出现问题。

如果很难避免这种情况,或者如何清除那些未擦除的提示窗口,有什么想法吗?

替代文字

几天前我问了一个类似的问题,虽然截图中的提示窗口看起来一样,但不是同一个问题。那个问题,提示文本从不显示,只显示那种未完成的提示窗口;这个问题,提示文本显示,但提示窗口在一个案例中没有完全擦除(如上所述)。希望很清楚。

0 投票
2 回答
2342 浏览

delphi - 如何修改 TVirtualStringTree 中的焦点框颜色?

我需要修改 TVirtualStringTree 的焦点框边框颜色,就像这张图片:

从灰色到红色

0 投票
1 回答
1363 浏览

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

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

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

在此处输入图像描述

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

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

0 投票
2 回答
1100 浏览

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

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

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

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

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

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

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时间

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

0 投票
4 回答
1010 浏览

delphi - 将数据写入 PVirtualNode,无需手动设置每个字段值

假设我有这个节点数据记录:

要填充我的 VirtualStringTree,我会这样做:

现在,虽然这工作得很好,但我想简化它,所以每当我向记录添加新字段时,我都不会修改 AddToTree 方法。

所以我尝试了这个:

这可以编译,似乎PVirtualNode没有获取数据,因为我的 VT 没有显示任何内容,并且在中断 OnGetText 事件时,我看到变量为空。

我究竟做错了什么?:)

0 投票
2 回答
2803 浏览

delphi - VirtualStringTree - 多行节点和垂直居中文本

如果 VirtualStringTree 中的节点是多行的(Node.States 中的 vsMultiline),那么我如何才能使该节点中所有列(多行列除外)的文本垂直居中?

我曾尝试使用OnBeforeCellPaint(using TargetCanvas.TextOut()) 但这根本不会绘制文本。默认情况下,多行节点的文本始终绘制在节点的顶部。

(对于非多行节点,文本垂直居中绘制)。

0 投票
2 回答
2994 浏览

delphi - 如何隐藏 TVirtualStringTree 节点?

如果我没记错的话,TVirtualStringTree 树视图中不可能有不可见的节点,因为没有启用、可见或其他属性可以这样做。我是对的吗?

如果是,我是如何设法拥有一个不可见的节点的?

我的树的结构:

  • 一个节点
  • 另一个节点
    • 子节点 1
    • 子节点 2
    • ...
    • 子节点 15
    • 子节点 16(不可见!)
  • 又一个节点
    • 来自另一个节点的子节点1
    • 来自另一个节点的子节点2

当我在整个树上执行 FirstNode/GetNextNode 循环并让我打印出第一列的文本时,我可以找到子节点 16。我还可以检查节点并查看他有一个前一个兄弟但没有下一个兄弟,例如节点高度为 18。

那么我是怎么做到的呢?