Delphi VirtualStringTree绘图

时间:2011-01-11 13:05:46

标签: delphi listview virtualtreeview

我一直试图弄清楚这两件事:

1)如何在代码中更改整行的颜色?就像,当VT看起来像ListView?

2)如何缩进复选框?我的孩子复选框和相同的“缩进?”作为我的根复选框。

谢谢!

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