问题标签 [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.
delphi - TVirtualStringTree 和垂直滚动无法正常工作
我已经学会了如何使用 TVirtualStringTree,我发现它非常棒。我有一个名为 PackedList 的自定义非可视列表,它由另一个线程填充。我想实时显示 TVirtualStringTree 中的所有列表内容。所以我在主窗体上放了一个计时器,每 500 毫秒更新一次 HexLog(即 TVirtualStringTree)的 RootNodeCount。
我所有的数据都出现在 VirtualStringTree 上,而且我没有任何速度问题,非常好。但是垂直滚动条存在一个问题。当我在控件上按 Ctrl+End 以跳转到列表的末尾时,它会转到中间的某个位置。同样,当我将滚动条拖到最后时,它不会走到最后。但是 HexLog 知道 DataCount。为什么不跳到最后?如果我按几次 Ctrl+END 则它会到达末尾。
在定时器例程里面,我想说 HexLog 通过代码跳转到列表的末尾。我该怎么做以及如何正确处理垂直滚动条?
TLama 建议的回复无法正常工作,请参阅图片以获取说明:
有关详细图像说明,请参见该链接:http: //i43.tinypic.com/1445thi.png
delphi - TVirtualStringTree 的 Ctrl+End 行为
当用户按下 Ctrl+End 时,VirtualStringTree 会垂直跳到结尾,这很好,但也可以水平跳。我不希望它水平地走到尽头。水平滚动应保持原样。
这个怎么讲?
delphi - TVirtualStringTree:数据在 OnMeasureItem 事件和 OnGetText 事件之间发生变化
我有一个数组保存数据将在 TVirtualStringTree 上表示。这个数组是线程安全的和可锁定的。并由另一个线程增长。
我的问题是,当 VST 执行 OnMeasureItem 事件来测量节点的高度时,用于测量的数据在使用 OnGetText 事件打印数据时会发生变化。
我检查了事件的执行顺序,这对我的设计不利。首先它为所有未初始化的节点触发 OnMeasureItem 事件,然后它开始调用 OnGetText 事件。我的意思是,假设我们有 3 个节点,事件将按该顺序触发:
但我需要这样的东西才能锁定:
保持 OnMeasureItem 和 OnGetText 事件之间获得的数据同步的最佳方法是什么?
我不想在所有 OnMeasureItem() 和 OnGetText() 事件期间锁定我的数组。
谢谢你。
添加了onTimer:
delphi - TVirtualStringTree:滚动到底部两次导致切换
我有可变高度节点。如果滚动节点高度大于 VST 客户区,第一次调用“ScrollIntoView(GetLast, False, False)”函数可以完美地完成工作,它会跳转到最后一个节点的末尾,这很好。
但是再次调用相同的函数会导致滚动到最后一个节点的开头。这是一种功能吗?我不想要这个,如何禁用?
我检查了 ScrollIntoView 函数以了解原因。第一次调用 R.Top 为 0,因此它分支到产生预期结果的 else 部分。但是在第二次调用时,它发现 R.Top 是负数,并且如果是部分,这会导致滚动到最后一个不需要的节点的开头。
有什么建议吗?
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。)
delphi - 如何在 VirtualTreeView 中为混合单元格与背景图像着色?
我正在使用 VT.Background 在 VT 中显示带有几列的背景图像。
但我找不到为单元格使用不同颜色的方法,因为它们隐藏了背景图像。
我曾尝试使用OnBeforeItemErase
,但如果我使用EraseAction := eaColor
单元格上的背景位图区域也会被绘制,如果我使用eaDefault
颜色则不会被应用。
知道如何做到这一点吗?
delphi - TVirtualStringTree - 如何更改 [-] / [+] 按钮?
如何使用我自己的自定义按钮(图像)来替换VST 中的默认[-]
/按钮?
我想使用箭头代替(, ),但也支持 RTL 双向模式(, )。[+]
编辑:我知道bsTriangle
样式(ButtonStyle)。它不尊重 RTL。我想使用我自己的自定义图像。
delphi - 虚拟树视图循环
我想遍历 VirtualTreeView 的所有根并删除它们。
我不想清除它。
我收到此代码的访问冲突:
谢谢您的帮助。
delphi - 如何更改虚拟树视图中根节点的状态索引?
我在虚拟树视图的 Stateimages 中分配了一个 ImageList。如何更改根节点的 stateindex?我什么也找不到。谢谢您的帮助。
delphi - 在 VirtualTreeView 中编辑根节点单元格文本
我想更改现有虚拟(根)节点的单元格文本。我可以更改数据,但我必须刷新整个 TreeView 以便再次触发 GetText。是否有更简单的方法或可能的方法来仅刷新 1 个根节点而不是整个树?
感谢您的帮助。