基本使用
1.定义节点的数据结构
TPermNode = record
ID: string;
TEXT: string;
PARENT_ID: string;
end;
PPermNode = ^TPermNode;
2.添加节点
var
Node,subnode: PVirtualNode;
Data: PPermNode;
subnode := vst1.AddChild(Node);
Data := vst1.GetNodeData(subnode);
data.ID := ds.FieldByName('ID').AsString;
data.TEXT := ds.FieldByName('TEXT').AsString;
3.FreeNode事件
Data := Sender.GetNodeData(Node);
Finalize(Data^);
4.GetText事件 根据Column来写多列
var
data: PPermNode;
begin
Data := Sender.GetNodeData(Node);
if Assigned(Data) then
begin
case Column of
0:
CellText := Data.TEXT;
1:
CellText := GetPurviewText(Data.ID);
end;
end;
end;
5.GetImageIndex事件 同上
6.PaintText事件 自定义TargetCanvas
6.GetPopupMenu事件 设定PopupMenu
7.OnSaveNode和Onloadnode 保存为文件,需要自己实现这二个事件
- 显示Header
1.双击VST
2.添加Column -> Text属性
3.Include( VST.Header.Option, hoVisible);
- 显示单选、复选框
Include(VST.TreeOptions.MiscOptions,toCheckSupport);
VST.CheckImageKind :=ckXP;
Node.CheckType :=ctCheckBox;//新加节点如果要显示复选框,一定要指定,默认值ctNone
Node.CheckState=csCheckedNormal;//是否选中状态
-
不显示TreeLine
TreeOption->PaintOptions->toShowTreeLines -
添加节点
var
Node: PVirtualNode;
Data: PVSTNode;
begin
Node := VST.AddChild(nil);
Data := VST.GetNodeData(Node);
//...
end;
-
更新显示
VST.InvalidateNode(Node);
-
当前选中的节点
VST.FocusedNode
-
遍历
var
Node:PVirtualNode;
Data:PNodeData;
begin
Node:= VST.GetFirst;
while Assigned(Node) do
begin
Data := VST.GetNodeData(Node);
//...
Node := VST.GetNext(Node);
end;
end;
- 节点没有子节点,但想显示节点前的展开+符号
Include(Node.States,vsHasChildren);
-
三态复选框选中级连选择, Node.CheckType := ctTriStateCheckBox;
-
选中的三态:未选中csUncheckedNormal,选中csCheckedNormal,子节点选中父节点状态csMixedNormal
-
假如以对象而不是记录的方式来存放数据结构
1.初使化时
VST.NodeDataSize:=4;
2.添加节点
NewNode:= VST.AddChild(ParentNode,Data);
3.获取节点数据vst.GetNodeData(Node)^ //注意GetNodeData函数获取的其实是一个指针
4.释放数据 在OnFreeNode事件中把对象Free掉