1.每个Button的DragMode都设为dmAutomatic;
2.每个Panel的下面两个事件都指向同一个:
procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := Source is TButton;
end;
procedure TForm1.Panel1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
if Source is TButton then
begin
TButton(Source).Parent := TPanel(Sender);
TButton(Source).Left := X;
TButton(Source).Top := Y;
end;
end;