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

delphi - TVirtualStringTree 和垂直滚动无法正常工作

我已经学会了如何使用 TVirtualStringTree,我发现它非常棒。我有一个名为 PackedList 的自定义非可视列表,它由另一个线程填充。我想实时显示 TVirtualStringTree 中的所有列表内容。所以我在主窗体上放了一个计时器,每 500 毫秒更新一次 HexLog(即 TVirtualStringTree)的 RootNodeCount。

我所有的数据都出现在 VirtualStringTree 上,而且我没有任何速度问题,非常好。但是垂直滚动条存在一个问题。当我在控件上按 Ctrl+End 以跳转到列表的末尾时,它会转到中间的某个位置。同样,当我将滚动条拖到最后时,它不会走到最后。但是 HexLog 知道 DataCount。为什么不跳到最后?如果我按几次 Ctrl+END 则它会到达末尾。

在定时器例程里面,我想说 HexLog 通过代码跳转到列表的末尾。我该怎么做以及如何正确处理垂直滚动条?

HexLog的外观

TLama 建议的回复无法正常工作,请参阅图片以获取说明: TLama 解决方案不起作用

有关详细图像说明,请参见该链接:http: //i43.tinypic.com/1445thi.png

0 投票
1 回答
308 浏览

delphi - TVirtualStringTree 的 Ctrl+End 行为

当用户按下 Ctrl+End 时,VirtualStringTree 会垂直跳到结尾,这很好,但也可以水平跳。我不希望它水平地走到尽头。水平滚动应保持原样。

这个怎么讲?

0 投票
1 回答
1231 浏览

delphi - TVirtualStringTree:数据在 OnMeasureItem 事件和 OnGetText 事件之间发生变化

我有一个数组保存数据将在 TVirtualStringTree 上表示。这个数组是线程安全的和可锁定的。并由另一个线程增长。

我的问题是,当 VST 执行 OnMeasureItem 事件来测量节点的高度时,用于测量的数据在使用 OnGetText 事件打印数据时会发生变化。

我检查了事件的执行顺序,这对我的设计不利。首先它为所有未初始化的节点触发 OnMeasureItem 事件,然后它开始调用 OnGetText 事件。我的意思是,假设我们有 3 个节点,事件将按该顺序触发:

但我需要这样的东西才能锁定:

保持 OnMeasureItem 和 OnGetText 事件之间获得的数据同步的最佳方法是什么?

我不想在所有 OnMeasureItem() 和 OnGetText() 事件期间锁定我的数组。

谢谢你。

添加了onTimer:

0 投票
1 回答
775 浏览

delphi - TVirtualStringTree:滚动到底部两次导致切换

我有可变高度节点。如果滚动节点高度大于 VST 客户区,第一次调用“ScrollIntoView(GetLast, False, False)”函数可以完美地完成工作,它会跳转到最后一个节点的末尾,这很好。

但是再次调用相同的函数会导致滚动到最后一个节点的开头。这是一种功能吗?我不想要这个,如何禁用?

我检查了 ScrollIntoView 函数以了解原因。第一次调用 R.Top 为 0,因此它分支到产生预期结果的 else 部分。但是在第二次调用时,它发现 R.Top 是负数,并且如果是部分,这会导致滚动到最后一个不需要的节点的开头。

有什么建议吗?

0 投票
1 回答
1646 浏览

delphi - TVirtualStringTree 中错误绘制的主题复选框

启用 toThemeAware 时,VirtualTrees.pas 版本 5.0.0 中的复选框处理出现损坏。csUncheckedNormal 的节点被绘制为选中 + 热。

要使用 DrawElement 正确绘制未选中的主题复选框,详细信息记录必须是:Element = teButton、Part = 3 和 State = 5。但是,当节点设置为 csUncheckedNormal 时,VirtualTrees.pas 最终会调用 State = 1 的 DrawElement .

VirtualTrees 中似乎声明了很多间接和额外的常量,所以我不确定如何最好地解决这个问题。欢迎提出想法...

(即使是在屏幕上获取 TVirtualStringTree 并填充一些数据的最小代码也有点冗长,无法在此处发布。除了基础知识之外,重现此内容所需要做的就是在 TreeOptions.MiscOptions 中启用 toCheckSupport 并设置 Node.CheckType : = InitNode 回调中的 ctTriStateCheckBox。)

0 投票
1 回答
2207 浏览

delphi - 如何在 VirtualTreeView 中为混合单元格与背景图像着色?

我正在使用 VT.Background 在 VT 中显示带有几列的背景图像。
但我找不到为单元格使用不同颜色的方法,因为它们隐藏了背景图像。

我曾尝试使用OnBeforeItemErase,但如果我使用EraseAction := eaColor单元格上的背景位图区域也会被绘制,如果我使用eaDefault颜色则不会被应用。

知道如何做到这一点吗?

0 投票
3 回答
2277 浏览

delphi - TVirtualStringTree - 如何更改 [-] / [+] 按钮?

如何使用我自己的自定义按钮(图像)来替换VST 中的默认[-]/按钮? 我想使用箭头代替(, ),但也支持 RTL 双向模式(, )。[+]
在此处输入图像描述在此处输入图像描述在此处输入图像描述在此处输入图像描述

编辑:我知道bsTriangle样式(ButtonStyle)。它不尊重 RTL。我想使用我自己的自定义图像。

0 投票
1 回答
3271 浏览

delphi - 虚拟树视图循环

我想遍历 VirtualTreeView 的所有根并删除它们。

我不想清除它。

我收到此代码的访问冲突:

谢谢您的帮助。

0 投票
1 回答
1177 浏览

delphi - 如何更改虚拟树视图中根节点的状态索引?

我在虚拟树视图的 Stateimages 中分配了一个 ImageList。如何更改根节点的 stateindex?我什么也找不到。谢谢您的帮助。

0 投票
2 回答
3021 浏览

delphi - 在 VirtualTreeView 中编辑根节点单元格文本

我想更改现有虚拟(根)节点的单元格文本。我可以更改数据,但我必须刷新整个 TreeView 以便再次触发 GetText。是否有更简单的方法或可能的方法来仅刷新 1 个根节点而不是整个树?

感谢您的帮助。