procedure TForm1.FormMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  FDetaX := x;
  FDetaY := y;
  MoveEnable := True;
end;
procedure TForm1.FormMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
var
  nLeft,nTop:integer; 
begin
  if (not (ssLeft in Shift))or(MoveEnable = False) then exit;
  nleft := Left + X - FDetaX;
  nTop := Top + Y - FDetaY;
  //重设窗口位置
  SetBounds(nLeft,nTop,width,height);
end;procedure TForm1.FormMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  MoveEnable := False;
end;

解决方案 »

  1.   

    type
      TForm1 = class(TForm)
    public
      procedure AppMessage(var Msg:TMsg);message WM_LButtonDown;
    end;implementation
    //.........procedure TForm1.AppMessage(var Msg:TMsg);
    begin
       SendMessage(Handle,WM_NCLButtonDown,HTCaption,GetMessagePos);
    end;
      

  2.   

    procedure WMncHitTest(var Msg: TWMNCHitTest); message WM_NCHITTEST;procedure TForm1.WMncHitTest(var Msg: TWMNCHitTest);
    begin
      inherited;
      if Msg.Result = htClient then
        Msg.Result := HTCAPTION
    end;
      

  3.   

    真高興能看到CROD這麽簡潔的東西。受用無數
      

  4.   

    更简单的
    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      ReleaseCapture;
       Form1.perform(WM_SysCommand,$F012,0);
    end;
      

  5.   

    事实上有可能Form收不到这些消息,因为有控件在它上面,如Panel之类的。
      

  6.   

    一样啊,响应Panel的MouseDown消息