폼 Border 없이 사이즈 변경
폼이 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.
'Delphi Tip > +Tip' 카테고리의 다른 글
델파이에서 화면에 자석효과 주는 법 (0) | 2024.03.18 |
---|---|
하위폼 종료 감지 (0) | 2024.03.04 |
디버깅용 콘솔창 띄우기 (0) | 2024.01.12 |
마우스커서가 폼(Form)안에 있는지 여부 (0) | 2024.01.08 |
프로그램에서 DOS 명령어 처리 (0) | 2023.12.29 |
댓글