본문 바로가기
Delphi Tip/+Tip

폼 Border 없이 사이즈 변경

by MonoSoft 2024. 2. 1.
728x90
반응형

폼 Border 없이 사이즈 변경

728x90

 

 

 

폼이 Border 를 갖고 있지 않을 때 마우스가 경계에 오면

커서가 바뀌면서 ReSize 가 되게 하는 방법입니다.

 

WM_NCHITTEST 를 가로채서 거기에서 마우스 좌표를

폼좌표계로 변환후 마우스 위치에 따라 메시지의 result 를

HTTOP, HTLEFT 등으로 바꿔주기만 하면 됩니다.

 

폼의 BorderStyle 를 bsNone 로 해서 경계를 없애준 뒤에 하면 됩니다.

 

unit Unit1;

 

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics,

Controls, Forms, Dialogs, StdCtrls;

 

type

TForm1 = class(TForm)

Button1: TButton;

private

{ Private declarations }

protected

procedure WMNCHITTEST(var msg: TMessage); message WM_NCHITTEST;

public

{ Public declarations }

end;

 

var

Form1: TForm1;

 

implementation

 

{$R *.dfm}

 

{ TForm1 }

 

procedure TForm1.WMNCHITTEST(var msg: TMessage);

var

MousePos: TPoint;

begin

MousePos := Point(msg.LParam and $FFFF, (msg.LParam shr 16) and $FFFF);

MousePos := Self.ScreenToClient(MousePos);

 

if (MousePos.X <= 4) then

msg.Result := HTLEFT;

 

if (Width - 4 <= MousePos.X) then

msg.Result := HTRIGHT;

 

if (Height - 4 <= MousePos.Y) then

msg.Result := HTBOTTOM;

 

if (MousePos.Y <= 4) then

msg.Result := HTTOP;

 

if ((MousePos.X <= 4) and (MousePos.Y <= 4)) then

msg.Result := HTTOPLEFT;

 

if ((MousePos.X <= 4) and (Height - 4 <= MousePos.Y)) then

msg.Result := HTBOTTOMLEFT;

 

if ((Width - 4 <= MousePos.X) and (MousePos.Y <= 4)) then

msg.Result := HTTOPRIGHT;

 

if ((Width - 4 <= MousePos.X) and (Height - 4 <= MousePos.Y)) then

msg.Result := HTBOTTOMRIGHT;

end;

 

end.

 

728x90
반응형

댓글