问题是这样的:有一个Form窗体,Form上有一个Button,我想实现的效果是当程序跑起来后,当鼠标左键单击Button时,获得对Button的控制权,这时Button会跟随鼠标移动,当鼠标停止移动后,再此单击鼠标左键,Button就落在当前的鼠标坐标位置。多谢...

解决方案 »

  1.   

    那样比较麻烦,不如直接拖着移动,鼠标松开即停止移动procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if (ssLeft in Shift) then begin
         ReleaseCapture;
         SendMessage(Button1.Handle,WM_SYSCOMMAND,SC_MOVE+1,0);
        end;
    end;
      

  2.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        Procedure Test(var Msg: TWMNCHITTEST); message  WM_NCHITTEST;
        { Public declarations }
      end;var
      Form1: TForm1;
      IsMove: Boolean;implementation{$R *.dfm}
    procedure TForm1.Test(var Msg: TWMNCHITTEST);
    var
      P: TPoint;
    begin
      inherited;
      if IsMove then
      begin
        P := Point(MsG.XPos, Msg.YPos);
        p := ScreenToClient(P);
        Button1.Left := P.x + 2;
        Button1.Top := p.Y;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
       IsMove := not IsMove;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      IsMove := False;
    end;
      

  3.   

    TO 1:你好,类似ReleaseCapture、SendMessage这些知识上哪去学?我用的Delphi6,里面的帮助文档没有,应该是Windows API方面的知识,请问我怎么去补这些知识呢?TO 2:Procedure Test(var Msg: TWMNCHITTEST); message  WM_NCHITTEST;
    这一句后面的message  WM_NCHITTEST;有什么作用?而且有关TWMNCHITTEST、WM_NCHITTEST这些知识又去哪学呢?这个应该是Windows消息机制吧?