unit Unit1;
file://yanlei:E_mail [email protected]
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
ListBox2: TListBox;
procedure ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
var
aPoint: TPoint;
begin
aPoint.x := x;
aPoint.y := y;
if (source is Tlistbox) then
if ((source as Tlistbox).SelCount > 0) and
((sender as Tlistbox).ItemAtPos(apoint, true) <> -1)
and ((sender as Tlistbox).itematpos(apoint, true) <> (sender as Tlistbox).itemindex) then
begin
accept := true;
end;
end;
procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
aPoint: TPoint;
st: string;
p: integer;
i, num: integer;
MYlBox: TStrings;
begin
aPoint.x := x;
aPoint.y := y;
p := (sender as Tlistbox).itematpos(aPoint, true);
MYlBox := Tstringlist.Create;
try
Num := (source as Tlistbox).Items.Count;
for i := num - 1 downto 0 do
begin
if (source as Tlistbox).Selected[i] then
begin
st := (source as Tlistbox).Items[i];
MYlBox.Add(st)
end;
end;
if p > -1 then
begin
for i := 0 to Mylbox.Count - 1 do
begin
(sender as Tlistbox).Items.Insert(p, mylbox[i])
end;
end
else
begin
for i := Mylbox.Count - 1 downto 0 do
begin
(sender as Tlistbox).Items.Add(mylbox[i])
end;
end;
(source as Tlistbox).DeleteSelected;
if P > -1 then
(sender as Tlistbox).Selected[p] := true;
finally
mylbox.Free;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
listbox2.OnDragDrop := listbox1.OnDragDrop;
listbox2.OnDragOver := listbox1.OnDragOver;
listbox1.MultiSelect := true;
listbox2.MultiSelect := true;
listbox1.DragMode := dmAutomatic;
listbox2.DragMode := dmAutomatic;
end;
end.