我有一个从第三方项目文件填充的对象列表.设计此文件的方式是每个项目都处于层次结构的"级别".所以第一个项目在0级,所有子项目都在1级,依此类推.
举个例子:
1. Node 1 (Level 0)
2. Node 1.1 (Level 1)
3. Node 1.2 (Level 1)
4. Node 1.3 (Level 1)
5. Node 1.3.1 (Level 2)
6. Node 1.4 (Level 1)
7. Node 2 (Level 0)
8. Node 2.1 (Level 1)
9. Node 2.1.1 (Level 2)
10. Node 3 (Level 0)
Run Code Online (Sandbox Code Playgroud)
这将产生如下层次结构:
- Node 1
--- Node 1.1
--- Node 1.2
--- Node 1.3
----- Node 1.3.1
--- Node 1.4
- Node 2
--- Node 2.1
----- Node 2.1.1 …Run Code Online (Sandbox Code Playgroud) 我刚刚发现使用Option toUseExplorerTheme可以为VirtualStringTree生成一个很好的选择矩形.但是,如果设置了选项toGridExtensions并且树中有多个列,则不会为内部单元格绘制选区的垂直边框,并且也会丢失圆角.仅正确绘制左侧和最右侧列的最外边缘和角.看起来好像在最外面的列之间绘制了选择矩形,并且刚刚在选择矩形上绘制了未选择列的背景.
关闭toGridExtensions会产生正确的选择矩形,但我更喜欢将其打开,因为只能通过单击标准模式中的文本来选择单元格(而不是单击文本旁边的空白区域).
Delphi 7和XE2会出现问题,也可能与其他版本一起出现问题.
要重现向表单添加TVirtualStringTree,显示标题,向标题添加多个列,并激活选项toGridExtensions(MiscOptions),toUseExplorerTheme(PaintOptions),toExtendedFocus(SelectionOptions),运行程序并单击任何单元格.
我在一个TTreeView对象中显示项目.当一个项目有子项时,控件>在图标旁边绘制一个(或者如果展开则绘制一个向下箭头).
我想知道>即使没有添加任何孩子,我是否能以某种方式告诉该项目.
在我的软件中存在某些条件,其中向用户显示有孩子是有意义的,而没有实际添加孩子(然后在选择项目时完成)
使用c ++ Builder 2009 VCL,但这个Q也应该对Delphi有效.