这是一个TreeView托动的例子,treeview1.DragMode:=dmAutomatic; listview的你自己写吧。 unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls;type TForm1 = class(TForm) TreeView1: TTreeView; ListBox1: TListBox; Button1: TButton; procedure TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer); procedure TreeView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer); var Snode,Tnode : ttreenode; begin if source=treeview1 then begin Snode:=TreeView1.Selected; Tnode:=treeview1.GetNodeAt(x,y); if (Tnode<>nil) and (Tnode<>Snode) then Snode.MoveTo(Tnode,naAddchildFirst) else exit; end; end; procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); var Snode,Tnode:Ttreenode; begin if source=treeview1 then begin Snode:=treeview1.Selected; Tnode:=treeview1.GetNodeAt(x,y); if (Tnode<>nil) and (Tnode<>Snode) and (Tnode<>Snode.Parent) then accept:=true else accept:=false; end else accept:=false; end; end.
以下是我程序里一个移动位置的例子:Var ts: TListItem; dataid:pdatanode; tdc,tds1,tds2,tsc,tss1,tss2,pxsql:string; movid,m:integer;begin if rzlistview1.Selected<>nil then begin j:=rzlistview1.Items.Count; if j<>0 then begin ts:=rzListView1.Selected; rzListView1.SetFocus; i:=ts.Index; if i<j-1 then begin tsc:= rzlistview1.Items[i].Caption; tss1:=rzlistview1.Items[i].SubItems[0]; tss2:=rzlistview1.Items[i].SubItems[1]; rzlistview1.Refresh; rzListView1.Items[i+1].Selected:=true; rzListView1.SetFocus; tdc:=rzlistview1.Items[i+1].Caption; tds1:=rzlistview1.Items[i+1].SubItems[0]; tds2:=rzlistview1.Items[i+1].SubItems[1]; rzlistview1.Items[i+1].Caption:=tsc; rzlistview1.Items[i+1].SubItems[0]:=tss1; rzlistview1.Items[i+1].SubItems[1]:=tds2; rzlistview1.Items[i].Caption:=tdc; rzlistview1.Items[i].SubItems[0]:=tds1; rzlistview1.Items[i].SubItems[1]:=tss2; end; end; ......
listview的你自己写吧。
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls;type
TForm1 = class(TForm)
TreeView1: TTreeView;
ListBox1: TListBox;
Button1: TButton;
procedure TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
Snode,Tnode : ttreenode;
begin
if source=treeview1 then
begin
Snode:=TreeView1.Selected;
Tnode:=treeview1.GetNodeAt(x,y);
if (Tnode<>nil) and (Tnode<>Snode) then
Snode.MoveTo(Tnode,naAddchildFirst)
else
exit;
end;
end;
procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
var
Snode,Tnode:Ttreenode;
begin
if source=treeview1 then
begin
Snode:=treeview1.Selected;
Tnode:=treeview1.GetNodeAt(x,y);
if (Tnode<>nil) and (Tnode<>Snode) and (Tnode<>Snode.Parent) then
accept:=true
else
accept:=false;
end
else
accept:=false;
end;
end.
ts: TListItem;
dataid:pdatanode;
tdc,tds1,tds2,tsc,tss1,tss2,pxsql:string;
movid,m:integer;begin
if rzlistview1.Selected<>nil then
begin
j:=rzlistview1.Items.Count;
if j<>0 then
begin
ts:=rzListView1.Selected;
rzListView1.SetFocus;
i:=ts.Index;
if i<j-1 then
begin
tsc:= rzlistview1.Items[i].Caption;
tss1:=rzlistview1.Items[i].SubItems[0];
tss2:=rzlistview1.Items[i].SubItems[1];
rzlistview1.Refresh;
rzListView1.Items[i+1].Selected:=true;
rzListView1.SetFocus;
tdc:=rzlistview1.Items[i+1].Caption;
tds1:=rzlistview1.Items[i+1].SubItems[0];
tds2:=rzlistview1.Items[i+1].SubItems[1];
rzlistview1.Items[i+1].Caption:=tsc;
rzlistview1.Items[i+1].SubItems[0]:=tss1;
rzlistview1.Items[i+1].SubItems[1]:=tds2;
rzlistview1.Items[i].Caption:=tdc;
rzlistview1.Items[i].SubItems[0]:=tds1;
rzlistview1.Items[i].SubItems[1]:=tss2;
end;
end;
......