如何用Delphi实现无边界窗体的移动

解决方案 »

  1.   

    一、在窗体的OnMouseUp里记录当前鼠标指针的位置。
    二、在窗体的OnMouseMove事件里写代码,判断当前指针位置与之前的位置发生的变化,然后修改窗体的Top,Left值。我之前在VFP里写过。但在DELPHI里没有写过。所以没有代码给你参考。对不起。
      

  2.   

    在 private 部分加入下列代码 :
    procedure wmnchittest(var msg:twmnchittest);message wm_nchittest;在程序部分加入以下代码 :
    procedure TForm1.wmnchittest(var msg:twmnchittest);
    begin
    inherited;
    if (htclient=msg.result) then msg.result:=htcaption;
    end;
      

  3.   

    帮人帮到底,临时写了一段代码贴出来,希望能帮上忙。
    在fMX, fMY
    procedure TMainForm.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      IF ssLeft In Shift Then begin
        Left:= X - (fMX - Left);
        Top:= Y - (fMY - Top);
      end;
    end;procedure TMainForm.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      fMX:= X;
      fMY:= Y;
    end;
      

  4.   

    对消息WM_NCHITTEST进行处理当然是最标准的做法,哪种利用MouseUp,MouseMove,MouseDown事件进行处理没处理好会产生很多BUG!当然还要通过Msg.xPos,Msg.yPos判断标题栏目范围,还有如何产生缩放效果,也是处理该消息,只是根据Msg.xPos,Msg.yPos把以前的Result改为其它的!具体应查询MSDN
      

  5.   

    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      ReleaseCapture;
      Perform(WM_SYSCOMMAND,$f012,0);
    end;