Q&A

  • Message 에서 Enter값을 삭제하는 방법좀...
B라는 컴포넌트에서 Focused일대 VK_RETURN이면 어떤 작업을 하게 했는데
이전 컴포넌트(A)에서 엔터를 치면 다음으로 포커스로(B) 이동시켰는데
이때 enter가 실행되면서 원하지 안던일이 발생합니다.

B에서 포커스이동시 엔터는 삭제하고 그 이후부터 엔터가 먹어야 하는데 방법좀 알려 주세요.

이전 콤포넌트는 어떤게 올지 몰라서 KeyDown, KeyPress (#0)에서는 처리할 수  없습니다.

B라는 컴포넌트는 Application.OnMessage을 이용했는데 디버거를 잡으면 Enter가 안먹고
실행시는 먹습니다.  방법좀 알려 주시면 감사 하겠습니다.

procedure TPsRealGrid.CMEnter(var Message: TCMEnter);
begin
   여기서  들어온 Message에 Enter값을 삭제하면 될것 같은데.. 삭제방법을 모르겠습니다...
end;
4  COMMENTS
  • Profile
    최용일 2005.08.02 21:58
    안녕하세요. 최용일입니다.

    메소드형태로 보아 CM_Enter를 처리하는 메세지 핸들러 같은데...
    맞다면 Message.Result := 0; 하시면 될겁니다.

    헛.. 그런데 질문을 자세히 보니까.... ㅠㅠ

    CMEnter에 대해서 잘못 이해를 하신것같네요...
    이것 뿐만 아니라 대부분의 컴포넌트에 OnEnter이벤트가 있는데...
    이게 Enter가 눌렀을때 발생하는게 아니라 포커스가 들어왔을때 발생하는 것입니다.
    반대로 포커스가 나갈때는 CMExit, OnExit가 발생하구요...

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

  • Profile
    danyshin 2005.08.02 22:09


    답변 감사합니다. 그래서 포커스가 들어오면 Enter키 값을 지우고 그 자리에서 Enter를 다시 치면
    어떤 작업을 하는 것입니다..

    컴포넌트인데 CreateWnd procedure 에서

    Forms.Application.OnMessage := EscMessage;를 넘겨주고 아래의 작업을 하는 것입니다.


    procedure EscMessage(var Msg: TMsg; var Handled: Boolean);
    begin
      if (Msg.wParam = VK_RETURN) and (Self.Focused) then
      begin
         PsPanelShow;<---- 이부분이 두번 작동 되는 것입니다..
      end
      else if (Msg.wParam = VK_INSERT) and (Self.Focused) then
      begin
         PsRowInsert;
      end
      else if (Msg.wParam = VK_DELETE) and (Self.Focused)then
      begin
         PsRowDelete;
      end;
    end;


    최용일님이 답변주신 Message.Result := 0;를 넣어 봤든데도 안되서 질문을 올렸습니다..

    다시한번 답변 부탁드립니다..





  • Profile
    최용일 2005.08.02 23:32
    OnMessage 이벤트는 Handled 를 True로 만들어서 메세지가 처리
  • Profile
    danyshin 2005.08.03 04:08

    답변 감사합니다.  그래서 Self.Focused일때만 실행을 하게 하였습니다.  물론 이전에 전역메세지는

    SaveMessage: TMessageEvent; 정의하고

    Create시에 SaveMessage := Forms.Application.OnMessage; 보관하고

    Destroy시에 Forms.Application.OnMessage := SaveMessage; 돌려 주었습니다.

    좀더 좋은 방법이 있을법은 하지만 필요에 의해서 어쩔수 없이 만들고 있습니다...

    좀더 고민해 보겠습니다.... 감사합니다.