Virtual Treeview使用心得
基本使用
1.定义节点的数据结构
TPermNode=recordID:string;TEXT:string;PARENT_ID:string;end;PPermNode=^TPermNode;
2.添加节点
varNode,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来写多列
vardata:PPermNode;beginData:=Sender.GetNodeData(Node);ifAssigned(Data)thenbegincaseColumnof0: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;//新加节点如果要显示复选框,一定要指定,默认值ctNoneNode.CheckState=csCheckedNormal;//是否选中状态
不显示TreeLine
TreeOption->PaintOptions->toShowTreeLines添加节点
varNode:PVirtualNode;Data:PVSTNode;beginNode:=VST.AddChild(nil);Data:=VST.GetNodeData(Node);//...end;
更新显示
VST.InvalidateNode(Node);
当前选中的节点
VST.FocusedNode
遍历
varNode:PVirtualNode;Data:PNodeData;beginNode:=VST.GetFirst;whileAssigned(Node)dobeginData:=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 国际许可协议 进行许可。