Q&A

  • ShowModal 폼을 벗어난 마우스 이벤트
ShowModal 폼을 불러내고 마우스 클릭이 모달폼 밖에서 클릭하면
자동으로 폼을 종료하게 하고 싶습니다.

모달폼 밖에서도 마우스의 이벤트를 감시하는 방법이나
더좋은 방법을 알려 주십시요.


고수님들의 명쾌한 답을 기다리겠습니다.
3  COMMENTS
  • Profile
    송태성 2004.04.01 04:03
    명쾌한 답 너무나도 감사드립니다.

    항상 건강 과 행복이 가득하시길 ....
  • Profile
    최용일 2004.04.01 03:21
    안녕하세요. 최용일입니다.

    마우스를 캡쳐하세요. 아래 예제입니다.

    윈도우 크기를 변경하거나, 이동시키거나 해서 캡쳐가 풀릴때는 다시 캡쳐해주셔야 합니다.

    type
      TForm1 = class(TForm)
        Memo1: TMemo;
          procedure FormActivate(Sender: TObject);
          procedure FormDeactivate(Sender: TObject);

      private
          procedure MouseButtonDown(var Message: TWMMouse);
          procedure WMLButtonDown(var Message: TWMMouse); message WM_LBUTTONDOWN;
          procedure WMMButtonDown(var Message: TWMMouse); message WM_MBUTTONDOWN;
          procedure WMRButtonDown(var Message: TWMMouse); message WM_RBUTTONDOWN;
      end;

    implementation

    {$R *.dfm}

    procedure TForm1.FormActivate(Sender: TObject);
    begin
        SetCapture(Handle);
    end;

    procedure TForm1.FormDeactivate(Sender: TObject);
    begin
        ReleaseCapture;
        Close;
    end;

    procedure TForm1.MouseButtonDown(var Message: TWMMouse);
    var
        P: TPoint;
    begin
        P := ClientToScreen(SmallPointToPoint(Message.Pos));
        if not PtInRect(BoundsRect, P) then
            Close;
    end;

    procedure TForm1.WMLButtonDown(var Message: TWMMouse);
    begin
        MouseButtonDown(Message);
    end;

    procedure TForm1.WMMButtonDown(var Message: TWMMouse);
    begin
        MouseButtonDown(Message);
    end;

    procedure TForm1.WMRButtonDown(var Message: TWMMouse);
    begin
        MouseButtonDown(Message);
    end;

    ^^ 항상 즐코하세요...

  • Profile
    너구리 2004.04.01 03:11
    지금 다시 윈도우메세지를 이용해서

    해봤는데요..

    잘되는데요..

    제가 지금 테스트한 파일을 올려볼꼐요..

    원하시는게 맞을듯 하거든요..아마 팝업메뉴 컴포넌트도 저렇게 되있을겁니다.