方法:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Button1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end; var Form1: TForm1; isMouseDown : boolean ; // 是否拖拽 posX,posY : Integer; // 拖动开始时候的坐标 implementation {$R *.dfm} procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin isMouseDown := True; // 开始拖动 posX := Mouse.CursorPos.X - Button1.Left ; // 记录开始的X坐标 posY := Mouse.CursorPos.Y - Button1.Top ; // 记录开始的y坐标end; procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin if isMouseDown then // 鼠标是按下状态(可以拖) begin Button1.Left := Mouse.CursorPos.X - posX ; // 设置新的X位置(Left) Button1.Top := Mouse.CursorPos.Y - posY ; // 设置新的Y位置(Top) end;end; procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin isMouseDown := False; // 拖动结束end; end.
来源:https://bbs.csdn.net/topics/391076577