本文整理自网络,侵删。
方法:
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
相关阅读 >>
更多相关阅读请进入《Delphi》频道 >>