//节点的拖放操作 procedure TFSetup.myTreeDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin if TTreeView(Source)=myTree then Accept:=true; end;procedure TFSetup.myTreeDragDrop(Sender, Source: TObject; X, Y: Integer); begin try myTree.Selected.MoveTo(myTree.GetNodeAt(X,Y),naInsert); except end; end;
给大家一段比较通用的代码,我自己一直用这个,很好用,经整理,如下:功能说明: 在一个或者多个TTreeView之间拖动TTreeNode的代码, 以两个TTreeView作为例子。源代码: {在两个TTreeView之间拖动TTreeNode} {当然一个和多个是相同原理} {原作者信息} { Member Name inthe Date Account Created 10/10/98 Expert Points 576944 Profile Work in Music industry as an Engineer dealing with electrics, mechanical, electronics,pneumatics ,Plcs etc.. Programming is my hobby, mostly delphi but have some knowledge of others such as c/c++,asm,php,ladder/stl etc. with computers ive had experience with Debian, Mandrake,OS-9 ,3.1/win9*,nt/2k ,macOS and a few other RTOS. }{zdcnow(磁效应)2002-8-21下载于E-E} unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls;type TForm1 = class(TForm) TreeView1: TTreeView; TreeView2: TTreeView; procedure TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer); procedure TreeView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); procedure TreeView2DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); procedure TreeView2DragDrop(Sender, Source: TObject; X, Y: Integer); private { Private declarations } public { Public declarations } end;var Form1: TForm1; implementation{$R *.DFM}procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept := Source is TTreeView; end;procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer); procedure CopyChildNode(ASNode:TTreeNode;var ADNode:TTreeNode); var i:integer; CNode:TTreeNode; begin for i:=0 to ASNode.Count-1 do begin CNode:=TTreeView(Sender).Items.AddChild(ADNode,ASNode.Item[i].Text); if ASNode.Item[i].HasChildren then CopyChildNode(ASNode.Item[i],CNode); end; end; var NNode, SNode, DNode : TTreeNode; begin SNode := TTreeView(Source).Selected; DNode := TTreeView(Sender).GetNodeAt(X, Y); if DNode = nil then NNode := TTreeView(Sender).Items.Add(nil, SNode.Text) else NNode := TTreeView(Sender).Items.AddChild(DNode, SNode.text); if SNode.HasChildren then CopyChildNode(SNode,NNode); SNode.Delete; end;procedure TForm1.TreeView2DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept := Source is TTreeView; end;procedure TForm1.TreeView2DragDrop(Sender, Source: TObject; X, Y: Integer); procedure CopyChildNode(ASNode:TTreeNode;var ADNode:TTreeNode); var i:integer; CNode:TTreeNode; begin for i:=0 to ASNode.Count-1 do begin CNode:=TTreeView(Sender).Items.AddChild(ADNode,ASNode.Item[i].Text); if ASNode.Item[i].HasChildren then CopyChildNode(ASNode.Item[i],CNode); end; end; var NNode, SNode, DNode : TTreeNode; begin SNode := TTreeView(Source).Selected; DNode := TTreeView(Sender).GetNodeAt(X, Y); if DNode = nil then NNode := TTreeView(Sender).Items.Add(nil, SNode.Text) else NNode := TTreeView(Sender).Items.AddChild(DNode, SNode.text); if SNode.HasChildren then CopyChildNode(SNode,NNode); SNode.Delete; end;end.
在dragdrop中执行删除、添加操作。
Accept:=true;
procedure TFSetup.myTreeDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
if TTreeView(Source)=myTree then
Accept:=true;
end;procedure TFSetup.myTreeDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
try
myTree.Selected.MoveTo(myTree.GetNodeAt(X,Y),naInsert);
except
end;
end;
在一个或者多个TTreeView之间拖动TTreeNode的代码,
以两个TTreeView作为例子。源代码:
{在两个TTreeView之间拖动TTreeNode}
{当然一个和多个是相同原理}
{原作者信息}
{
Member Name inthe
Date Account Created 10/10/98
Expert Points 576944
Profile Work in Music industry as an Engineer dealing with electrics, mechanical, electronics,pneumatics ,Plcs etc..
Programming is my hobby, mostly delphi but have some knowledge of others such as c/c++,asm,php,ladder/stl etc.
with computers ive had experience with Debian, Mandrake,OS-9 ,3.1/win9*,nt/2k
,macOS and a few other RTOS.
}{zdcnow(磁效应)2002-8-21下载于E-E}
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls;type
TForm1 = class(TForm)
TreeView1: TTreeView;
TreeView2: TTreeView;
procedure TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure TreeView2DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure TreeView2DragDrop(Sender, Source: TObject; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
implementation{$R *.DFM}procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := Source is TTreeView;
end;procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure CopyChildNode(ASNode:TTreeNode;var ADNode:TTreeNode);
var
i:integer;
CNode:TTreeNode;
begin
for i:=0 to ASNode.Count-1 do
begin
CNode:=TTreeView(Sender).Items.AddChild(ADNode,ASNode.Item[i].Text);
if ASNode.Item[i].HasChildren then
CopyChildNode(ASNode.Item[i],CNode);
end;
end;
var
NNode, SNode, DNode : TTreeNode;
begin
SNode := TTreeView(Source).Selected;
DNode := TTreeView(Sender).GetNodeAt(X, Y); if DNode = nil then
NNode := TTreeView(Sender).Items.Add(nil, SNode.Text)
else
NNode := TTreeView(Sender).Items.AddChild(DNode, SNode.text);
if SNode.HasChildren then CopyChildNode(SNode,NNode);
SNode.Delete;
end;procedure TForm1.TreeView2DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := Source is TTreeView;
end;procedure TForm1.TreeView2DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure CopyChildNode(ASNode:TTreeNode;var ADNode:TTreeNode);
var
i:integer;
CNode:TTreeNode;
begin
for i:=0 to ASNode.Count-1 do
begin
CNode:=TTreeView(Sender).Items.AddChild(ADNode,ASNode.Item[i].Text);
if ASNode.Item[i].HasChildren then
CopyChildNode(ASNode.Item[i],CNode);
end;
end;
var
NNode, SNode, DNode : TTreeNode;
begin
SNode := TTreeView(Source).Selected;
DNode := TTreeView(Sender).GetNodeAt(X, Y); if DNode = nil then
NNode := TTreeView(Sender).Items.Add(nil, SNode.Text)
else
NNode := TTreeView(Sender).Items.AddChild(DNode, SNode.text);
if SNode.HasChildren then CopyChildNode(SNode,NNode);
SNode.Delete;
end;end.