频道分类

delphi 鼠标拖动控件自由移动位置

作者:admin 来源: 日期:2021/1/30 14:16:14 人气: 标签:

 

方法:

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