프로그래밍/델파이

WM_SYSCOMMAND로 NONCLIENT 영역의 마우스 동작 흉내내기

채윤아빠 2007. 12. 21. 23:21
728x90
반응형
WM_SYSCOMMAND 메시지로 윈도우 폼의 타이틀 바가 아닌 클라이언트 영역에서 마우스를 눌렀을 때, WM_MOUSEDOWN 메시지에서 WM_SYSCOMMAND의 WParam으로 $F012를 보내면, 폼을 이동시키는 효과를 그대로 낼 수 있습니다.

보통 SC_CLOSE 등 미리정의된 상수가 있지만, 아래 값들은 상수로 정의되어 있지 않아서 WParam으로 직접 넣어 주면 됩니다.
 $F001 : 우측 고정 넓이 조절
 $F002 : 좌측 고정 넓이 조절
 $F003 : 하단 고정 높이 조절
 $F004 : 우하단 고정 전체 크기 조절
 $F005 : 좌하단 고정 전체 크기 조절
 $F006 : 상단 고정 높이 조절
 $F007 : 우상단 고정 전체 크기 조절
 $F008 : 좌상단 고정 전체 크기 조절
 $F009, $F012 : 이동

OnMouseDown 이벤트에서 보통
  ReleaseCapture;
  Perform(WM_SYSCOMMAND, $F009, 0); // 윈도우 이동

이렇게 처리를 하게 되는데, 이렇게 하면 팝업 관련 이벤트가 제대로 발생하지 않으므로, 아래와 같이 Button을 검사해서 처리하도록 하면 되겠습니다.
if (Button = mbLeft) then
begin
  ReleaseCapture;
  Perform(WM_SYSCOMMAND, $F009, 0); // 윈도우 이동
end;