Virtual Treeview使用心得

基本使用

1.定义节点的数据结构

  1. TPermNode = record
  2. ID: string;
  3. TEXT: string;
  4. PARENT_ID: string;
  5. end;
  6. PPermNode = ^TPermNode;

2.添加节点

  1. var
  2. Node,subnode: PVirtualNode;
  3. Data: PPermNode;
  4. subnode := vst1.AddChild(Node);
  5. Data := vst1.GetNodeData(subnode);
  6. data.ID := ds.FieldByName('ID').AsString;
  7. data.TEXT := ds.FieldByName('TEXT').AsString;

3.FreeNode事件

  1. Data := Sender.GetNodeData(Node);
  2. Finalize(Data^);

4.GetText事件 根据Column来写多列

  1. var
  2. data: PPermNode;
  3. begin
  4. Data := Sender.GetNodeData(Node);
  5. if Assigned(Data) then
  6. begin
  7. case Column of
  8. 0:
  9. CellText := Data.TEXT;
  10. 1:
  11. CellText := GetPurviewText(Data.ID);
  12. end;
  13. end;
  14. end;

5.GetImageIndex事件 同上

6.PaintText事件 自定义TargetCanvas

6.GetPopupMenu事件 设定PopupMenu

7.OnSaveNode和Onloadnode 保存为文件,需要自己实现这二个事件

  • 显示Header

1.双击VST
2.添加Column -> Text属性
3.Include( VST.Header.Option, hoVisible);

  • 显示单选、复选框
  1. Include(VST.TreeOptions.MiscOptions,toCheckSupport);
  2. VST.CheckImageKind :=ckXP;
  3. Node.CheckType :=ctCheckBox;//新加节点如果要显示复选框,一定要指定,默认值ctNone
  4. Node.CheckState=csCheckedNormal;//是否选中状态
  • 不显示TreeLine
    TreeOption->PaintOptions->toShowTreeLines

  • 添加节点

  1. var
  2. Node: PVirtualNode;
  3. Data: PVSTNode;
  4. begin
  5. Node := VST.AddChild(nil);
  6. Data := VST.GetNodeData(Node);
  7. //...
  8. end;
  • 更新显示

    VST.InvalidateNode(Node);

  • 当前选中的节点

    VST.FocusedNode

  • 遍历

  1. var
  2. Node:PVirtualNode;
  3. Data:PNodeData;
  4. begin
  5. Node:= VST.GetFirst;
  6. while Assigned(Node) do
  7. begin
  8. Data := VST.GetNodeData(Node);
  9. //...
  10. Node := VST.GetNext(Node);
  11. end;
  12. 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掉

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据