Virtual Treeview使用心得
基本使用
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);
ifAssigned(Data)then
begin
caseColumnof
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;
whileAssigned(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掉
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。