delphi控件-VirtualStringTreeView使用-转

http://peirenlei.iteye.com/blog/487207

*自定义结点结构:

Delphi代码  收藏代码
  1. PTagCustomListItem = ^TTagCustomListItem ;  
  2. TTagCustomListItem = record  
  3.   Name:string;  
  4.   Id:Integer;  
  5. end;  

  

 

*初始化:

Delphi代码  收藏代码
  1. VST.NodeDataSize := SizeOf(TTagCustomListItem);  
  2.  VST.RootNodeCount := 2;  

 

*遍历根节点:

Delphi代码  收藏代码
  1. var  
  2.   PVN:PVirtualNode;  
  3.   _pNodeData:PTagCustomListItem;  
  4. begin  
  5.    PVN := VST.GetFirstChild(nil);  
  6.    while Assigned(PVN) do  
  7.    begin  
  8.      _pNodeData := VST.GetNodeData(PVN);  
  9.      if Assigned(_pNodeData) then  
  10.        ShowMessage(_pNodeData.Name);  
  11.      PVN := VST.GetNextSibling(PVN);  
  12.    end;  
  13. end;  

 

 

*遍历所有节点:

Delphi代码  收藏代码
  1. VST.IterateSubtree(nil,VSTIterateProc,nil,[]);  
  2.   
  3.   
  4. procedure TForm1.VSTIterateProc(Sender: TBaseVirtualTree;  
  5.   Node: PVirtualNode; Data: Pointer; var Abort: Boolean);  
  6. var  
  7.   _pNodeData:PTagCustomListItem;  
  8. begin  
  9.   _pNodeData := Sender.GetNodeData(Node);  
  10.   if Assigned(_pNodeData) then  
  11.     ShowMessage(_pNodeData.Name);  
  12. end;  

 

*增加根节点:

Delphi代码  收藏代码
  1. _count := VST.RootNodeCount ;  
  2. VST.RootNodeCount := _count + 1;  

 

*增加子节点: 

Delphi代码  收藏代码
  1. var  
  2.   _count: Cardinal;  
  3. begin  
  4.    // add as child  
  5.    _count := VST.ChildCount[VST.FocusedNode];  
  6.    VST.ChildCount[VST.FocusedNode] := _count + 1 ;  
  7.    VST.Expanded[VST.FocusedNode] := True;  
  8.    VST.InvalidateToBottom(VST.FocusedNode);  
  9. end;  

 

*另一种添加节点方法:

Delphi代码  收藏代码
  1. procedure TForm1.FormCreate(Sender: TObject);  
  2. var  
  3. Data:PTagCustomListItem;  
  4. RootNode:PVirtualNode;  
  5. begin  
  6. //清除所有Node  
  7. VirtualStringTree1.Clear;  
  8. //指定VitrualStringTree有幾個Node  
  9. //VirtualStringTree1.RootNodeCount := 2;  
  10. //將所定義的結構大小指定給VitualStringTree  
  11. VirtualStringTree1.NodeDataSize := SizeOf(TTagCustomListItem);  
  12.   
  13. //添加节点  
  14. RootNode:= VirtualStringTree1.AddChild(nil);  
  15. Data:=VirtualStringTree1.GetNodeData(RootNode);  
  16. Data^.Name:='根结点';  
  17.   
  18. RootNode:= VirtualStringTree1.AddChild(nil);  
  19. Data:=VirtualStringTree1.GetNodeData(RootNode);  
  20. Data^.Name:='根结点aaa';   
  21.   
  22. end;  

 

 

*必须的回调函数:

Delphi代码  收藏代码
  1. procedure TForm1.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;  
  2.   Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);  
  3. var  
  4.   _pNodeData:PTagCustomListItem;  
  5. begin  
  6.   _pNodeData := Sender.GetNodeData(Node);  
  7.   
  8.   if Assigned(_pNodeData) then  
  9.     CellText := _pNodeData.Name;  
  10. end;  
  11.   
  12. procedure TForm1.VSTInitNode(Sender: TBaseVirtualTree; ParentNode,  
  13.   Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);  
  14. var  
  15.   _pNodeData:PTagCustomListItem;  
  16. begin  
  17.   _pNodeData := Sender.GetNodeData(Node);  
  18.     
  19.   if Assigned(_pNodeData) then  
  20.     _pNodeData.Name := Format('Node Level:%d, Index:%d ',[Sender.GetNodeLevel(Node),Node.Index]);  
  21. end; 
posted @ 2016-07-19 16:53  海蓝7  阅读(597)  评论(0编辑  收藏  举报