Delphi Virtual String Tree 基本用法

首先建立树节点所用的记录类型

type
HXL_TNode = record
name:string;
desc:string;
BRoot:Boolean;
end;

定义该类型指针

pHXL_TNode = ^ HXL_TNode;

然后在 virtualstringtree 所在的 frame 或者 form 的 create 函数中,初始化你的 virtualtree

添加列:vrtlstrngtr1.Header.Columns.Add

设置第 n 列的名称 vrtlstrngtr1.Header.Columns[n].Text := ‘ 名字 ’;

设置第 n 列的宽度:vrtlstrngtr1.Header.Columns[n].Width := 120;

设置折叠在第 n 列进行:vrtlstrngtr1.Header.MainColumn := n;

设置树节点所占的空间大小:vrtlstrngtr1.NodeDataSize := SizeOf(HXL_TNode);

假设你所定义的 virtualstringtree 为 vrtlstrngtr1

  p_node: pHXL_TNode;
p_node1, p_node2: PVirtualNode;

建立父节点:
  p_node1 := vrtlstrngtr1.AddChild(nil);
p_node := vrtlstrngtr1.GetNodeData(p_node1);
p_node^.name :=‘绿茶’;
p_node^.desc :=‘不发酵的茶’;
p_node^.BRoot := True;

注意:不是用 p_node1.parent 是不是为空来判断是不是父节点,p_node1 的父节点不是空节点,而是 vrtlstrngtr1.RootNode. 如果你想自己控制,则可以自己定义 BRoot 成员,来判断是不是根节点。

添加子节点
  p_node2 := vrtlstrngtr1.AddChild(p_node1);
p_node := vrtlstrngtr1.GetNodeData(p_node2);
p_node^.name := '西湖龙井';
p_node^.desc :=‘产地西湖的名茶’;
p_node^.BRoot := False;

如果要显示,则需要在 Events 中点击 OnGetText 右面的空白出,自动生成 vrtlstrngtr1GetText 函数:
  procedure 树所在的 frame 或者 form 的类.vrtlstrngtr1GetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
var
p_node: pHXL_TNode;
begin
p_node := Sender.GetNodeData(Node);
case Column of
0: CellText := p_node.name;
1: CellText := p_node.desc;
end;
end;

点击 virtual string tree 要做处理,则需要在 events 中点击 OnClick 右面的空白处,就会自动生成一个 vrtlstrngtr1Click(Sender: TObject) 函数

这里添加你要做的处理

获取所点击的节点

p_node := vrtlstrngtr1.FocusedNode; 如果点击的地方不在节点出,则会返回空,做处理时,需要加以判断。

如果你想设置某节点 p_node1 以高亮形式显示给用户:

首先设置该节点被选中,vrtlstrngtr1.Selected[p_node1] := True; 此时该节点的背景色是灰色,如果想设置其它颜色,则在属性中设置:properties->colors->UnfocusedSelectionColor 中设置. 如果你想起父节点也能在当前树的窗体中显示出来,则只需 vrtlstrngtr1.FocusedNode := p_node1 父节点;

将树完全折叠起来用 vrtlstrngtr1.FullCollapse(nil);

将树在节点 p_node 处展开用 vrtlstrngtr1.Expanded[p_node] := True;

树节点用的比较多的属性:ChildCount,NextSibling,PrevSibling,Parent,FirstChild,LastChild.

正文完
 
评论(没有评论)
验证码