안녕하세여..
혼자 델파이를 공부하기 시작했습니다.
팁등을 보고 따라 하고 있는데 모르는게 생겼어여....
캡션 없는 폼에서 드래그하기 팁을 보고 따라 하고 있는데..
잘 안 되네여.
폼만 있을 경우 드래그가 되는데....
패널위에 있에 Label을 붙였을 경우에는 동작을 안 하네여?
참조한 코드는
lbCaption 이것은 폼의 특정 위치에 Label을 올려 놓은 것입니다.
그리고 Transparent 속성을 투명하게 했지요.. 물론 다른 Control를 사용해도 되겠지요.
아래 코드는 WMNCHitTest가 발생했을 때 lbCaption의 영역에 마우스 커서가 있는 상태였다면 그때만
Caption Bar가 눌러진 것처럼 하는 것입니다.
procedure Tform1.WMNCHitTest(var Msg:TWMNCHitTest);
begin
inherited;
WITH Msg DO
IF PtInRect( label1.BoundsRect, ScreenToClient( Point(XPos,YPos) ) )then
Result := htCaption;
end;
이 소스를 보고 따라 했는데 안 움직이네여...쩝..
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
procedure WMNCHitTest(var Msg: TWMNCHitTest); message wm_NCHitTest;
public
{ Public declarations }
end;
var
이 소스로 하면 폼만은 움직이는데...위에 소스로 하면 아무것도 안 움직이네여..
제가 하고 싶은거는 캡션 없는 폼을 만들고 그위에 캡션처럼 Label을 붙여 그걸 캡션 처럼 사용 하고 싶습니다.. 조언 부탁 드립니다.
아 그리고...'WMNCHitTes't 등등의 자료는 어디서 구하나여??
헬프에도 없고...책에도 없던데....
조언 부탁 드립니다.
안녕하세요. 최용일입니다.
WM_NCHITTEST는 말 그대로 NC영역에서 발생한 마우스 이벤트입니다.
TLabel은 윈도우컨트롤이 아니니까 폼위에 라벨이 있다면 이 라벨의 영역은 폼의 NC영역이므로 폼에서 제대로 처리를 하지만 판넬(TPanel)위에 라벨이 있을경우 이 라벨의 영역은 판넬의 NC영역이라서 이 메세지를 실질적으로 받는 객체는 판넬이 되어서 폼이 드래그가 안되는겁니다.
판넬대신에 베벨(TBevel)같은 윈도우컨트롤이 아닌 객체로 바꾸세요...
'WMNCHitTest'는 그냥 메세지 핸들러를 표현하는 이름이구요. 아무렇게나 지어도 됩니다 message뒤에 오는 메세지상수값으로 델파이가 판단하니까 이름은 상관이 없습니다.
도움말은 델파이메뉴의 Help/Window SDK부분에서 찾으시면 됩니다. Ctrl+F1도 되구요...
참고로 if 문에서 default처리 하는 부분이 빠졌네요...
IF PtInRect( label1.BoundsRect, ScreenToClient( Point(XPos,YPos)))then
Result := htCaption
else
inherited;
^^ 항상 즐코하세요...