delphi treeview 如何自定义目录树! 不用控件!比如给定两个目录,‘C:\windows\system32’,
'F:\myTest\A';
可以在一个treeview中建立以这两个路径为根节点的目录树!C:\Windows\system32
---- Public
------MyFile
---- TestF:\myTest\A
------ picruteFile
-------png
-------bmpdelphi 控件自带的目录树是 整个磁盘的路径! 我想的是指定几个路径作为根节点! 目录树中 ,根节点是任意输入的路径(比如C:\Windows\system32,不是有磁盘开始),根节点下的路径显示仍然和控件中的一样!
'F:\myTest\A';
可以在一个treeview中建立以这两个路径为根节点的目录树!C:\Windows\system32
---- Public
------MyFile
---- TestF:\myTest\A
------ picruteFile
-------png
-------bmpdelphi 控件自带的目录树是 整个磁盘的路径! 我想的是指定几个路径作为根节点! 目录树中 ,根节点是任意输入的路径(比如C:\Windows\system32,不是有磁盘开始),根节点下的路径显示仍然和控件中的一样!
---- Public(二级) (C:\Windows\system32\Public)
------MyFile(三级)(C:\Windows\system32\Public\MyFile)
......(n级)
---- Test(二级)(C:\Windows\system32\Test)F:\myTest\A(一级)(F:\myTest\A)
------ picruteFile(二级)(F:\myTest\A\picruteFile)
-------png(三级) (F:\myTest\A\picruteFile\Png)
-------bmp(二级)(F:\myTest\A\bmp)
根节点的Text就显示“F:\myTest\A”
不过完全达到你的效果适合有点难。
但用你的路径为根节点的目录树是可以实现的下面的代码不知是否有用type pInt = ^integer; procedure TForm1.Button1Click(Sender: TObject);
var ParentNode,Node : TTreeNode;
id : pInt;
begin
table.open;
table.first;
while not table.eof do
begin
//使用Node.data域来存放id,以用于find;
ParentNode:=FindNodeByID(T1,table.FieldByName('PARENT').asInteger);
new(id);
id^:=table.FieldByName('ID').asInteger;
Node:=T1.items.AddChildObject(ParentNode,table.FieldByName('NAME').asString,id);
table.Next;
end;
table.close;
end; Function TForm1.FindNodeByID(T:TTreeView; id:integer):TTreeNode;
var i:integer;
begin
result:=nil;
for i:=0 to T.Items.Count-1 do
if integer(T.Items[i].Data^)=id
then begin
result := T.Items[i];
exit;
end;
end; 要注意在free TreeView之前要把items[i].data^先释放掉。不然就会有内存泄漏。 我是自己申请了内存来存放id的。
在你用完了这个Treeview,比如在窗口关闭时,要先dispose它。
procedure Tform1.FormClose;
var i:integer;
begin
for i:=0 to T1.items.count-1 do
begin
dispose(T1.items[i].data);
T1.items[i].data:=nil;
end;
end; 。