Move window的两种方法

1、通过控件,适合局部区域移动

procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

Windows.ReleaseCapture;

Perform(WM_SYSCOMMAND, SC_MOVE + 1, 0);

end;


2、通过处理窗口消息,适合整体窗口移动

procedure TTestForm.WMNCHitTest(var Msg: TWMNCHitTest);


function CanDoDrag(const APos: TPoint): Boolean;

begin

Result := (APos.Y < 52);

end;



var

LScreenPos: TPoint;

LPos: TPoint;

begin

DefaultHandler(Msg);



if Msg.Result = HTCLIENT then

begin

LScreenPos.X := Msg.XPos;

LScreenPos.Y := Msg.YPos;

LPos := ScreenToClient(LScreenPos);


if CanDoDrag(LPos) then

Msg.Result := HTCAPTION;

end;

end;

你可能感兴趣的:(delphi)