拖动时,控件跟随光标拖动
var
iMouseX, iMouseY: Integer;//全局
procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.DragMode := dmAutomatic;
scPanel2.OnDragOver := scPanel1DragOver;
end;
procedure TForm1.Label1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := True;
end;
procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
iMouseX := X;
iMouseY := Y;
end;
procedure TForm1.scPanel1DragOver(Sender, Source: TObject; X, Y:
Integer; State: TDragState; var Accept: Boolean);
begin
Label1.Parent := TWinControl(Sender);
Label1.Left := X - iMouseX;
Label1.Top := Y - iMouseY;
end;
如果想拖动的控件不随光标移动,以下代码
var
Form1: TForm1;
iMouseX,iPanelX,iPanely, iMouseY: Integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.DragMode := dmAutomatic;
scPanel2.OnDragOver := scPanel1DragOver;
end;
procedure TForm1.Label1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := True;
end;
procedure TForm1.Label1EndDrag(Sender, Target: TObject; X, Y: Integer);
begin //拖动结束代码
Label1.Left := iPanelX - iMouseX;
Label1.Top := iPanelY - iMouseY;
end;
procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
iMouseX := X;
iMouseY := Y;
end;
procedure TForm1.scPanel1DragOver(Sender, Source: TObject; X, Y:
Integer; State: TDragState; var Accept: Boolean);
begin
TControl(Source).Parent := TWinControl(Sender);
// TControl(Source).Left := X - iMouseX;
// TControl(Source).Top := Y - iMouseY;
iPanelX := X;
iPanelY := Y;
end;