我一直试图弄清楚这两件事:
1)如何在代码中更改整行的颜色?就像,当VT看起来像ListView?
2)如何缩进复选框?我的孩子复选框和相同的“缩进?”作为我的根复选框。
谢谢!
答案 0 :(得分:2)
1)
procedure VSTBeforeItemErase(
Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode;
ItemRect: TRect; var ItemColor: TColor;
var EraseAction: TItemEraseAction);
begin
EraseAction := eaColor;
ItemColor := clLime;
end;
2)每个节点的缩进设置复选框分别是IMHO不可能。 树具有Indent属性,它为所有节点(包括它们的复选框)设置缩进。在内部调用AdjustCoordinatesByIndent和PaintCheckImage方法,但两者都是隐藏的。修改其中一个可以帮助你,但你需要非常具体,我会说最好的是创建自己的组件后代。
如果要创建高级示例的属性页中的内容,则需要将节点添加到树层次结构中的多个级别。
为你的灵感......
var CurrentNode: PVirtualNode;
CurrentSubnode: PVirtualNode;
begin
VirtualStringTree1.Indent := 50; // this increases indention for all nodes in the tree
CurrentNode := VirtualStringTree1.AddChild(nil); // create a node to the root
CurrentNode.CheckType := ctCheckBox; // check support of a node
CurrentSubnode := VirtualStringTree1.AddChild(CurrentNode); // create a subnode to your first node
CurrentSubnode.CheckType := ctCheckBox; // check support of a node
end;
答案 1 :(得分:0)
1)尝试将toFullRowSelect
添加到TreeOptions.SelectionOptions
。
2)我无法回答这个问题。 也许尝试 toFixedIndent
。