怎么改变Treeview中的图标? OnClick事件Click获取Node.text 批量处理及实现TreeView结点拖拽的实例
2009-03-17 02:35
691 查看
//这个过程根据你的要求选择图标
procedure TForm1.TreeView1GetImageIndex(Sender: TObject; Node: TTreeNode);
begin
if Node.HasChildren then
if Node.Expanded then
Node.ImageIndex := 3 //节点有子节点时打开的图标
else
Node.ImageIndex := 0 //节点有子节点时收起来的图标
else Node.ImageIndex := 1; //节点没有子节点时图标
end;
//这个过程显示选择的图标
procedure TForm1.TreeView1GetSelectedIndex(Sender: TObject; Node: TTreeNode);
begin
Node.SelectedIndex := Node.ImageIndex; //节点选择后使用的图标
end;
-------------------------------------------------------------------------------------------------------
//treeview的单击事件
procedure TForm1.TreeView1Click(Sender: TObject);
begin
//如果选中节点的等级(level)为0(根节点等级为0,根节点的子节点等级为1,依次类推)并且其序号(index)为0(同等级下的的节点按从上到下数第一个为0,第二个为1,以此类推)
if(treeview1.Selected.Level = 0)and(treeview1.Selected.Index = 0) then
begin
//这里写点中了第一个根节点后要做的事
form1.Color := clred;
end
else
if (treeview1.Selected.Level = 1)and(treeview1.Selected.Index=1) then
begin
//这里写点中了第三个根节点的第2个子节点后要做的事
form1.Color := clblue;
end;
end;
//如果你想点节点前的“+”号也有同样的效果,那么就应该在Expanding事件里写判断处理程序。
//【补充】【如果你不想要点+号的时候触发事件,这下面的可以删去 】
procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
begin
if(node.Level = 0)and(node.Index = 0) then
begin
form1.Color := clred;
end
else
if (node.Level = 1)and(node.Index=1) then
begin
form1.Color := clblue;
end;
end;
//直接Click获取Node.text
procedure TForm1.TreeView1Click(Sender: TObject);
begin
if TreeView1.Selected.Index >= 0 then
Edit1.Text := TreeView1.Selected.Text;
end;
-------------------------------------------------------------------------------------------------------------
//如何批量处理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;
procedure TForm1.TreeView1GetImageIndex(Sender: TObject; Node: TTreeNode);
begin
if Node.HasChildren then
if Node.Expanded then
Node.ImageIndex := 3 //节点有子节点时打开的图标
else
Node.ImageIndex := 0 //节点有子节点时收起来的图标
else Node.ImageIndex := 1; //节点没有子节点时图标
end;
//这个过程显示选择的图标
procedure TForm1.TreeView1GetSelectedIndex(Sender: TObject; Node: TTreeNode);
begin
Node.SelectedIndex := Node.ImageIndex; //节点选择后使用的图标
end;
-------------------------------------------------------------------------------------------------------
//treeview的单击事件
procedure TForm1.TreeView1Click(Sender: TObject);
begin
//如果选中节点的等级(level)为0(根节点等级为0,根节点的子节点等级为1,依次类推)并且其序号(index)为0(同等级下的的节点按从上到下数第一个为0,第二个为1,以此类推)
if(treeview1.Selected.Level = 0)and(treeview1.Selected.Index = 0) then
begin
//这里写点中了第一个根节点后要做的事
form1.Color := clred;
end
else
if (treeview1.Selected.Level = 1)and(treeview1.Selected.Index=1) then
begin
//这里写点中了第三个根节点的第2个子节点后要做的事
form1.Color := clblue;
end;
end;
//如果你想点节点前的“+”号也有同样的效果,那么就应该在Expanding事件里写判断处理程序。
//【补充】【如果你不想要点+号的时候触发事件,这下面的可以删去 】
procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
begin
if(node.Level = 0)and(node.Index = 0) then
begin
form1.Color := clred;
end
else
if (node.Level = 1)and(node.Index=1) then
begin
form1.Color := clblue;
end;
end;
//直接Click获取Node.text
procedure TForm1.TreeView1Click(Sender: TObject);
begin
if TreeView1.Selected.Index >= 0 then
Edit1.Text := TreeView1.Selected.Text;
end;
-------------------------------------------------------------------------------------------------------------
//如何批量处理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;
相关文章推荐
- 实现TreeView结点拖拽的实例
- Delphi 实现TreeView结点拖拽的实例(转)
- 实例区别onClick和onDBClick两事件方法
- c#中怎样实现当一个类实例的属性值改变时,触发事件调用另一个方法?
- 怎么通过onclick事件获取js函数返回值(代码少)
- Ext4+Servlet+HTML5实现实时获取文件上传进度、本地预览、文件拖拽上传的相册实例
- TreeView 的派生类: TreeViewEx 实现 NodeShowToolTip、NodeDoubleClick 事件
- 微信小程序 实现拖拽事件监听实例详解
- 实例区别onClick和onDBClick两事件方法
- 纯JavaScript实现获取onclick、onchange等事件的值
- Ext4+Servlet+HTML5实现实时获取文件上传进度、本地预览、文件拖拽上传的相册实例
- 怎么让Html控件onclick事件和onserverclick事件同时有效
- CKEDITOR 3.4.2中 按钮事件中 动态改变图标和title 获取按钮
- Ext4+Servlet+HTML5实现实时获取文件上传进度、本地预览、文件拖拽上传的相册实例
- c#用Treeview实现FolderBrowerDialog 和动态获取系统图标(运用了Win32 dll类库)
- Jquery 改变元素的 onclick 事件(出现几个click事件响应叠加的情况解决方案)
- TreeView 的派生类: TreeViewEx 实现 NodeShowToolTip、NodeDoubleClick 事件
- zTree之checkbox选中事件---获取状态改变的结点