초보라 도움이 필요합니다.
두개의 폼을 동시에 움직이기 위해 다음과 같은 프로시져를 사용했어요.
procedure onmove(var msg : tmessage); message wm_move;
첫번째 폼에서 버튼을 클릭하면 두번째 폼이 나오고 첫번째 폼의 제목 표시줄을
가지고 움직이면 두번째 폼이 따라다니게요...
근데 폼의 제목 표시줄을 모두 없애고 (borderstyle = bsNone)
이미지를 맨 위에다 갖다 놓아서 제목 표시줄 대신 사용하려고 하는데
두개의 폼을 어떻게 동시에 움직이죠?
마우스로 이미지를 가지고 움직여야 하는데 방법을 잘 모르겠어요.
꼼짝을 하지 않는군요.
자세하게 설명 좀 해주세요.
즉, 마우스포인터의 위치를 검사해서 그곳이 이미지내이라면 메세지구조체의
Result값에 htCaption을 넣어주시면 됩니다. 말하자면 이미지에서의 드래그를
캡션바에서의 드래그로 속이는 것입니다.
아래는 간단한 예제입니다.
type
TForm1 = class(TForm)
Image1: TImage;
public
procedure WMNCHitTest(var Msg: TWMNCHitTest); message WM_NCHITTEST;
end;
...
procedure TForm1.WMNCHitTest(var Msg: TWMNCHitTest);
var
P: TPoint;
ImageRect: TRect;
begin
// 마우스 좌표를 구합니다.
P := Point(Msg.XPos, Msg.YPos);
// 마우스 좌표를 클라이언트 좌표로 바꿉니다.
P := ScreenToClient(P);
ImageRect := Rect(Image1.Left, Image1.Top, Image1.left +Image1.Width,
Image1.top+ Image1.Height);
// 마우스 포인터가 이미지 내에 있다면
if PtInRect(ImageRect, P) then
Msg.Result := htcaption // 캡션바에서 일어난 일인 것처럼 폼을 속인다.
else
inherited;
end;
end.
꼭! 꼭! wrote:
> 초보라 도움이 필요합니다.
> 두개의 폼을 동시에 움직이기 위해 다음과 같은 프로시져를 사용했어요.
> procedure onmove(var msg : tmessage); message wm_move;
> 첫번째 폼에서 버튼을 클릭하면 두번째 폼이 나오고 첫번째 폼의 제목 표시줄을
> 가지고 움직이면 두번째 폼이 따라다니게요...
>
> 근데 폼의 제목 표시줄을 모두 없애고 (borderstyle = bsNone)
> 이미지를 맨 위에다 갖다 놓아서 제목 표시줄 대신 사용하려고 하는데
> 두개의 폼을 어떻게 동시에 움직이죠?
> 마우스로 이미지를 가지고 움직여야 하는데 방법을 잘 모르겠어요.
> 꼼짝을 하지 않는군요.
> 자세하게 설명 좀 해주세요.