在拖拽的过程里进行数据交换
如A:=1  B:=2
拖拽时:
C:=A的数据
A:=B的数据
B:=C的数据

解决方案 »

  1.   

    这是一个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.
      

  2.   

    以下是我程序里一个移动位置的例子: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;
    ......