我的朋友正在使用 VirtualTreeView 在 Delphi 中工作,但遇到了下一个问题:他有两列,第一列中的每一行都有数据和子项。是否可以不更改第一列宽度以设置最大子列宽度?
传奇:
- 圆圈是节点
- 矩形是文本(根节点的黑色矩形是两列)
它现在看起来如何 - 看看孩子的黑色反应。它必须如何 - 看起来是红色矩形。
我的朋友正在使用 VirtualTreeView 在 Delphi 中工作,但遇到了下一个问题:他有两列,第一列中的每一行都有数据和子项。是否可以不更改第一列宽度以设置最大子列宽度?
传奇:
它现在看起来如何 - 看看孩子的黑色反应。它必须如何 - 看起来是红色矩形。
这称为列跨越,是的,它可以很容易地完成 - 只需将TreeOptions -> AutoOptions -> toAutoSpanColumns
选项设置为True
. 它的工作方式是,如果相邻列是空的,则当前列的标题将扩展到其中。由于您只希望它适用于子列,因此您必须实现OnGetCellIsEmpty
事件并IsEmpty := True
仅返回子节点,即类似
procedure TForm1.VT_GetCellIsEmpty(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; var IsEmpty: Boolean);
begin
IsEmpty := (Sender.GetNodeLevel(Node) > 0);
end;