启用 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。)