基本使用

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. ifAssigned(Data)then
  6. begin
  7. caseColumnof
  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. whileAssigned(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掉