DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: vic_168999
今日帖子: 0
在线用户: 1
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 humanity (唤醒) ★☆☆☆☆ -
盒子活跃会员
2004/2/21 11:49:42
标题:
谁有TreeView的示例代码? 浏览:1288
加入我的收藏
楼主: 能否上传或发到我邮箱(98no@163.com)
xie xie?
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 bios (阿贡) ★☆☆☆☆ -
盒子中级会员
2004/2/21 12:29:58
1楼: 第N次给你们贴啦 ,受不了!

一. 如何初始化一个TreeView? 


弄一个窗口,放上一个TreeView和一个Button,分别取名为TV1和Btn1。如果需要 
在每个节点前有个图,请在窗口上放上一个ImageList,取名为ImageList1,双击 
它,加入六个图标。还要记得记得将TV1的Images属性改为ImageList1噢。双击按 
钮Btn1,在里面填入以下代码,然后按F9运行,点击Btn1就可以看到效果了。 


procedure TForm1.Btn1Click(Sender: TObject); 
Const 
MyDocDir = 'C:\My Documents'; 
PersonDir = '3hSoft'; 
Var 
Var 
I : Word; 
SubNodeName : array [1..5] of ShortString; 
RootNode, SubNode : TTreeNode; 
P : PString; 
begin 
SubNodeName[1] := '便笺'; 
SubNodeName[2] := '发件箱'; 
SubNodeName[3] := '联系人'; 
SubNodeName[4] := '任务'; 
SubNodeName[5] := '日记'; 
TV1.Items.Clear; 
TV1.Items.BeginUpdate; 
New(P); 
P^ := MyDocDir + '\' + PersonDir; 
RootNode := TV1.Items.AddObject(Nil, '个人文件夹', P); 
// 此 Node 的图标已对 Images 属性中取第 0 个了。 
For I := 1 to 5 do 
begin 
New(P); 
P^ := MyDocDir + '\' + PersonDir + '\' + SubNodeName[I]; 
SubNode := TV1.Items.AddChildObject(RootNode, SubNodeName[I], P) 


// 如果不想使用图标的话请删除以下两行 
SubNode.ImageIndex := I; 
SubNode.SelectedIndex := I; 
end; 
TV1.Items.EndUpdate; 
end; 

 

二.在TreeView中如何设置选中结点 


var 
i:integer; {i为设置的选中结点的索引值} 


begin 
if i>treeview1.items.count then 
treeview1.items[i].selected:=true; 

或 
treeview1.selected:=treeview1.items[i]; 

三。设置TreeView结点的图形 


1. 设置TreeView的images属性为已存在的images对象 

treeview1.images:=imagelist1; 


2. 在加入结点后执行: 

var 
anode:TTreeNode; 
begein 
anode:=Treeview1.add(nil,'item1'); 
anode.imageindex:=0; {结点未选中时显示的图标} 
anode.selectedindex:=1; {结点选中时显示的图标} 
end 
3. 如果结点图形在改变后未发生变化,可以执行: 
treeview1.refresh; 

 

四。如何批量处理TreeView结点 


使用TreeView的items属性的BeginUpdate和EndUpdate方法,例: 


TreeView1.items.BeginUpdate; 
for i:=0 to TreeView1.items.count-1 do 
begin 
file ://将每个结点的文字改成为小写字母 
TreeView1.items[i].text:=lowercase(TreeView1.items[i].text); 
end; 
TreeView1.items.EndUpdate; 

五。实现TreeView结点拖拽的实例 


下面的程序片段演示了如何实现拖拽treeview构件结点的例子 

{鼠标按下时执行的语句} 
procedure TForm1.Treeview1MouseDown(Sender: TObject; 
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); 
begin 

{判断左键按下并且鼠标点在一个结点上开始实现拖拽} 
if ( Button = mbLeft ) and 
( htOnItem in Treeview1.GetHitTestInfoAt( X, Y ) ) then 
begin 
Treeview1.BeginDrag( False ); 
end; 
end; 

{鼠标拖动执行语句} 
procedure TForm1.Treeview1DragOver( Sender, Source: TObject; 
X, Y: Integer; State: TDragState; var Accept: Boolean); 
var 
Node : TTreeNode; 
begin 
if Source = Treeview1 then 
begin 
Node := Treeview1.GetNodeAt( X, Y ); {取当前结点} 
if Node <> nil then {当前结点不为空才能实现拖拽,accept:=true} 

Accept := true; 
end; 
end; 

{鼠标释放时执行的语句} 
procedure TForm1.Treeview1DragDrop( Sender, Source: TObject; 
X, Y : Integer ); 
var 
TempNode : TTreeNode; 
AttachMode : TNodeAttachMode; 
begin 
if Treeview1.Selected = nil then 
Exit; 

AttachMode := naAddChild; {设置结点移动模式,设移动结点为子结点} 


{ 注意在这里存在一个bug,当移动结点时,如果目标结点没有子结点,} 
{ 则加入的新的子结点会失败,所以先在当前目标结点的下面 } 
{ 加入一个临时子结点,移动完毕后,再将临时结点删除 } 

Treeview1.Items.BeginUpdate; 
try 
TempNode := Treeview1.Items.AddChild( Treeview1.DropTarget, 
'Temp' ); 
try 
{ 移动选中的结点到目标结点 } 
Treeview1.Selected.MoveTo( Treeview1.DropTarget, AttachMode ); 
finally 
TempNode.Free; { 不要忘了释放临时结点 } 
end; 
finally 
Treeview1.Items.EndUpdate; 
end; 
end; 


----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 waterstone (waterstone) ★☆☆☆☆ -
盒子活跃会员
2004/2/21 14:59:34
2楼: 太详尽了!

----------------------------------------------
我来自农村广阔的田野我的每一个动作都很夸张http://waterstone.51r.com
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行70.3125毫秒 RSS