VirtualStringTreeView使用

*自定义结点结构:

  PTagCustomListItem = ^TTagCustomListItem ;
  TTagCustomListItem = record
    Name:string;
    Id:Integer;
  end;

  

 

*初始化:

 VST.NodeDataSize := SizeOf(TTagCustomListItem);
  VST.RootNodeCount := 2;

 

*遍历根节点:

var
  PVN:PVirtualNode;
  _pNodeData:PTagCustomListItem;
begin
   PVN := VST.GetFirstChild(nil);
   while Assigned(PVN) do
   begin
     _pNodeData := VST.GetNodeData(PVN);
     if Assigned(_pNodeData) then
       ShowMessage(_pNodeData.Name);
     PVN := VST.GetNextSibling(PVN);
   end;
end;

 

 

*遍历所有节点:

VST.IterateSubtree(nil,VSTIterateProc,nil,[]);


procedure TForm1.VSTIterateProc(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  _pNodeData:PTagCustomListItem;
begin
  _pNodeData := Sender.GetNodeData(Node);
  if Assigned(_pNodeData) then
    ShowMessage(_pNodeData.Name);
end;

 

*增加根节点:

  _count := VST.RootNodeCount ;
  VST.RootNodeCount := _count + 1;

 

*增加子节点: 

var
  _count: Cardinal;
begin
   // add as child
   _count := VST.ChildCount[VST.FocusedNode];
   VST.ChildCount[VST.FocusedNode] := _count + 1 ;
   VST.Expanded[VST.FocusedNode] := True;
   VST.InvalidateToBottom(VST.FocusedNode);
end;

 

*另一种添加节点方法:

procedure TForm1.FormCreate(Sender: TObject);
var
Data:PTagCustomListItem;
RootNode:PVirtualNode;
begin
//清除所有Node
VirtualStringTree1.Clear;
//指定VitrualStringTree有幾個Node
//VirtualStringTree1.RootNodeCount := 2;
//將所定義的結構大小指定給VitualStringTree
VirtualStringTree1.NodeDataSize := SizeOf(TTagCustomListItem);

//添加节点
RootNode:= VirtualStringTree1.AddChild(nil);
Data:=VirtualStringTree1.GetNodeData(RootNode);
Data^.Name:='根结点';

RootNode:= VirtualStringTree1.AddChild(nil);
Data:=VirtualStringTree1.GetNodeData(RootNode);
Data^.Name:='根结点aaa'; 

end;

 

 

*必须的回调函数:

procedure TForm1.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
var
  _pNodeData:PTagCustomListItem;
begin
  _pNodeData := Sender.GetNodeData(Node);

  if Assigned(_pNodeData) then
    CellText := _pNodeData.Name;
end;

procedure TForm1.VSTInitNode(Sender: TBaseVirtualTree; ParentNode,
  Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
var
  _pNodeData:PTagCustomListItem;
begin
  _pNodeData := Sender.GetNodeData(Node);
  
  if Assigned(_pNodeData) then
    _pNodeData.Name := Format('Node Level:%d, Index:%d ',[Sender.GetNodeLevel(Node),Node.Index]);
end;

  

你可能感兴趣的:(treeview)