2024年5月30日发(作者:)

Virtual Treeview是一个可以完全代替Delphi自带的Treeview和Listview的

免费完全源码控件,但使用复杂。在看完几个自带DEMO后的一点心得。

自定义结点结构

PTagCustomListItem = ^TTagCustomListItem ;

TTagCustomListItem = record

Name:string;

Id:Integer;

end;

初始化

taSize := SizeOf(TTagCustomListItem);

deCount := 2;

遍历根节点

var

PVN:PVirtualNode;

_pNodeData:PTagCustomListItem;

begin

PVN := stChild(nil);

while Assigned(PVN) do

begin

_pNodeData := eData(PVN);

if Assigned(_pNodeData) then

ShowMessage(_);

PVN := tSibling(PVN);

end;

end;

遍历所有节点:

eSubtree(nil,VSTIterateProc,nil,[]);

procedure rateProc(Sender: TBaseVirtualTree;

Node: PVirtualNode; Data: Pointer; var Abort: Boolean);

var

_pNodeData:PTagCustomListItem;

begin

_pNodeData := eData(Node);

if Assigned(_pNodeData) then

ShowMessage(_);

end;

增加根节点

_count := deCount ;

deCount := _count + 1;

增加子节点

var

_count: Cardinal;

begin

// add as child

_count := ount[dNode];

ount[dNode] := _count + 1 ;

ed[dNode] := True;

dateToBottom(dNode);

end;

另一种添加节点方法

procedure eate(Sender: TObject);

var

Data:PTagCustomListItem;

RootNode:PVirtualNode;

begin

//清除所有Node

;

//指定VitrualStringTree有幾個Node

//deCount := 2;

//將所定義的結構大小指定給VitualStringTree

taSize := SizeOf(TTagCustomListItem);

添加节点

RootNode:= ld(nil);

Data:=eData(RootNode);

Data^.Name:='根结点';

RootNode:= ld(nil);

Data:=eData(RootNode);

Data^.Name:='根结点aaa';

end;

*必须的回调函数:

procedure Text(Sender: TBaseVirtualTree; Node:

PVirtualNode;