Q&A

  • 콘트롤이 포커스를 잃는것을 Trap하는 방법..
컴포넌트를 제작하면서 제가 만든 컴포넌트가 포커스를 읽을때

폼에서 hide시키기 위해서

procedure CMExit(var Message: TWMNoParams); message CM_EXIT;

와 같이 CM_EXIT 메세지를 Trap하여 procedure내에서 hide처리를 했습니다.

근데...이런 방식은 아주 잘 동작을 하지만..

TspeedButton이나 아니면 폼상의 빈 영역에 마우스를 클릭을 하게되면

CM_EXIT메세지가 발생하지 않아서 제 컴포넌트가 Hide되질 않습니다..



TpopupMenu를 보면 popup Method로 화면에 보였다가도 마우스로 Tpopupmenu

의 영역밖에서 마우스를 클릭을 하게되면 자동으로 Tpopupmenu가 Hide처리가

아주 잘되더군요...

제 컴포넌트에서도 Tpopupmenu와 같이 동작을 하게 하고 싶은데...

어떻게 해야 하나요..??

고수님의 답변좀 부탁합니다..

4  COMMENTS
  • Profile
    최용일 2000.03.31 02:16
    폼의 빈공간을 클릭할땐 포커스 변경이 일어나지 않습니다. 그리니까 CM_EXIT

    메세지를 잡아챌수가 없죠. WM_NCHITTEST메세지를 서브클래싱해서 사용하시면

    될것 같군요...



    WM_NCHITTEST는 폼의 빈 공간을 클릭하거나 했을 때 마우스를 캡쳐하지 않고도

    그 위치를 알 수 있거든요.. 그러니까 여기에서 마우스 좌표가 컴포넌트

    외부라면 hide처리를 하시면 되겠네요.



    초보맨 wrote:

    > 컴포넌트를 제작하면서 제가 만든 컴포넌트가 포커스를 읽을때

    > 폼에서 hide시키기 위해서

    > procedure CMExit(var Message: TWMNoParams); message CM_EXIT;

    > 와 같이 CM_EXIT 메세지를 Trap하여 procedure내에서 hide처리를 했습니다.

    > 근데...이런 방식은 아주 잘 동작을 하지만..

    > TspeedButton이나 아니면 폼상의 빈 영역에 마우스를 클릭을 하게되면

    > CM_EXIT메세지가 발생하지 않아서 제 컴포넌트가 Hide되질 않습니다..

    >

    > TpopupMenu를 보면 popup Method로 화면에 보였다가도 마우스로 Tpopupmenu

    > 의 영역밖에서 마우스를 클릭을 하게되면 자동으로 Tpopupmenu가 Hide처리가

    > 아주 잘되더군요...

    > 제 컴포넌트에서도 Tpopupmenu와 같이 동작을 하게 하고 싶은데...

    > 어떻게 해야 하나요..??

    > 고수님의 답변좀 부탁합니다..

  • Profile
    초보맨 2000.03.31 04:30
    최용일님의 답변에 감사드립니다...

    그런데 제가 델파이에 관란 지식이 좀 짧은 편이라서요 ^^

    염치 없지만....WM_NCHITTEST 메세지를 서브클래싱해서 사용하라고 알려주셨는데..

    그것을 어떻게 하는건지 좀 더 구체적으로 가르켜 주시면 감사하겟습니다..



    그리고 Help를 찾아보니 WM_NCHITTEST는 마우스가 움직이거나 클릭할때 모두

    발생되는것 같은데..이것의 구분은 어떻게 하나요??

    죄송합니다...몰라도 너무 몰라서요...^^



    최용일 wrote:

    > 폼의 빈공간을 클릭할땐 포커스 변경이 일어나지 않습니다. 그리니까 CM_EXIT

    > 메세지를 잡아챌수가 없죠. WM_NCHITTEST메세지를 서브클래싱해서 사용하시면

    > 될것 같군요...

    >

    > WM_NCHITTEST는 폼의 빈 공간을 클릭하거나 했을 때 마우스를 캡쳐하지 않고도

    > 그 위치를 알 수 있거든요.. 그러니까 여기에서 마우스 좌표가 컴포넌트

    > 외부라면 hide처리를 하시면 되겠네요.

    >

    > 초보맨 wrote:

    > > 컴포넌트를 제작하면서 제가 만든 컴포넌트가 포커스를 읽을때

    > > 폼에서 hide시키기 위해서

    > > procedure CMExit(var Message: TWMNoParams); message CM_EXIT;

    > > 와 같이 CM_EXIT 메세지를 Trap하여 procedure내에서 hide처리를 했습니다.

    > > 근데...이런 방식은 아주 잘 동작을 하지만..

    > > TspeedButton이나 아니면 폼상의 빈 영역에 마우스를 클릭을 하게되면

    > > CM_EXIT메세지가 발생하지 않아서 제 컴포넌트가 Hide되질 않습니다..

    > >

    > > TpopupMenu를 보면 popup Method로 화면에 보였다가도 마우스로 Tpopupmenu

    > > 의 영역밖에서 마우스를 클릭을 하게되면 자동으로 Tpopupmenu가 Hide처리가

    > > 아주 잘되더군요...

    > > 제 컴포넌트에서도 Tpopupmenu와 같이 동작을 하게 하고 싶은데...

    > > 어떻게 해야 하나요..??

    > > 고수님의 답변좀 부탁합니다..

  • Profile
    최용일 2000.03.31 05:27
    11207번에 제가 쓴 예제가 있습니다. 그것을 참조해 보세요.



    이미지를 드래그했을때 캡션바를 드래그한 것처럼 속이는 것인데



    도움이 될것 같군요... 해보시고 안되시면 질문주세요...



    초보맨 wrote:

    > 최용일님의 답변에 감사드립니다...

    > 그런데 제가 델파이에 관란 지식이 좀 짧은 편이라서요 ^^

    > 염치 없지만....WM_NCHITTEST 메세지를 서브클래싱해서 사용하라고 알려주셨는데..

    > 그것을 어떻게 하는건지 좀 더 구체적으로 가르켜 주시면 감사하겟습니다..

    >

    > 그리고 Help를 찾아보니 WM_NCHITTEST는 마우스가 움직이거나 클릭할때 모두

    > 발생되는것 같은데..이것의 구분은 어떻게 하나요??

    > 죄송합니다...몰라도 너무 몰라서요...^^

    >

    > 최용일 wrote:

    > > 폼의 빈공간을 클릭할땐 포커스 변경이 일어나지 않습니다. 그리니까 CM_EXIT

    > > 메세지를 잡아챌수가 없죠. WM_NCHITTEST메세지를 서브클래싱해서 사용하시면

    > > 될것 같군요...

    > >

    > > WM_NCHITTEST는 폼의 빈 공간을 클릭하거나 했을 때 마우스를 캡쳐하지 않고도

    > > 그 위치를 알 수 있거든요.. 그러니까 여기에서 마우스 좌표가 컴포넌트

    > > 외부라면 hide처리를 하시면 되겠네요.

    > >

    > > 초보맨 wrote:

    > > > 컴포넌트를 제작하면서 제가 만든 컴포넌트가 포커스를 읽을때

    > > > 폼에서 hide시키기 위해서

    > > > procedure CMExit(var Message: TWMNoParams); message CM_EXIT;

    > > > 와 같이 CM_EXIT 메세지를 Trap하여 procedure내에서 hide처리를 했습니다.

    > > > 근데...이런 방식은 아주 잘 동작을 하지만..

    > > > TspeedButton이나 아니면 폼상의 빈 영역에 마우스를 클릭을 하게되면

    > > > CM_EXIT메세지가 발생하지 않아서 제 컴포넌트가 Hide되질 않습니다..

    > > >

    > > > TpopupMenu를 보면 popup Method로 화면에 보였다가도 마우스로 Tpopupmenu

    > > > 의 영역밖에서 마우스를 클릭을 하게되면 자동으로 Tpopupmenu가 Hide처리가

    > > > 아주 잘되더군요...

    > > > 제 컴포넌트에서도 Tpopupmenu와 같이 동작을 하게 하고 싶은데...

    > > > 어떻게 해야 하나요..??

    > > > 고수님의 답변좀 부탁합니다..

  • Profile
    초보맨 2000.04.01 02:01
    용일님의 예제를 보고

    procedure TEDBCustomCombo.WMNCHitTest(var Msg: TWMNCHitTest);

    var

    P: TPoint;

    ControlRect: TRect;

    begin

    // 마우스 좌표를 구합니다.

    P := Point(Msg.XPos, Msg.YPos);

    // 마우스 좌표를 클라이언트 좌표로 바꿉니다.

    P := ScreenToClient(P);

    ControlRect := Rect(Left, Top, left +Width, top+ Height);

    // 마우스 포인터가 CTRL 내에 있다면

    if not PtInRect(ControlRect, P) then

    // 마우스의 왼쪽 버턴이 눌려지면

    if GetAsyncKeyState(VK_LBUTTON) > 0 then

    showMessage('a')

    // Msg.Result := htcaption // 캡션바에서 일어난 일인 것처럼 폼을 속인다.

    else

    inherited;

    end;

    위와 같이 코딩을 했습니다만... 다른곳에 클릭을 했을때마다 메세지가

    발생을 하지 않더군요......

    다른 방법은 없는건가요..??

    그런데...TpopupMenu는 어떻게 구현이 가능했는지 무지 궁금하군요...



    최용일 wrote:

    > 11207번에 제가 쓴 예제가 있습니다. 그것을 참조해 보세요.

    >

    > 이미지를 드래그했을때 캡션바를 드래그한 것처럼 속이는 것인데

    >

    > 도움이 될것 같군요... 해보시고 안되시면 질문주세요...

    >

    > 초보맨 wrote:

    > > 최용일님의 답변에 감사드립니다...

    > > 그런데 제가 델파이에 관란 지식이 좀 짧은 편이라서요 ^^

    > > 염치 없지만....WM_NCHITTEST 메세지를 서브클래싱해서 사용하라고 알려주셨는데..

    > > 그것을 어떻게 하는건지 좀 더 구체적으로 가르켜 주시면 감사하겟습니다..

    > >

    > > 그리고 Help를 찾아보니 WM_NCHITTEST는 마우스가 움직이거나 클릭할때 모두

    > > 발생되는것 같은데..이것의 구분은 어떻게 하나요??

    > > 죄송합니다...몰라도 너무 몰라서요...^^

    > >

    > > 최용일 wrote:

    > > > 폼의 빈공간을 클릭할땐 포커스 변경이 일어나지 않습니다. 그리니까 CM_EXIT

    > > > 메세지를 잡아챌수가 없죠. WM_NCHITTEST메세지를 서브클래싱해서 사용하시면

    > > > 될것 같군요...

    > > >

    > > > WM_NCHITTEST는 폼의 빈 공간을 클릭하거나 했을 때 마우스를 캡쳐하지 않고도

    > > > 그 위치를 알 수 있거든요.. 그러니까 여기에서 마우스 좌표가 컴포넌트

    > > > 외부라면 hide처리를 하시면 되겠네요.

    > > >

    > > > 초보맨 wrote:

    > > > > 컴포넌트를 제작하면서 제가 만든 컴포넌트가 포커스를 읽을때

    > > > > 폼에서 hide시키기 위해서

    > > > > procedure CMExit(var Message: TWMNoParams); message CM_EXIT;

    > > > > 와 같이 CM_EXIT 메세지를 Trap하여 procedure내에서 hide처리를 했습니다.

    > > > > 근데...이런 방식은 아주 잘 동작을 하지만..

    > > > > TspeedButton이나 아니면 폼상의 빈 영역에 마우스를 클릭을 하게되면

    > > > > CM_EXIT메세지가 발생하지 않아서 제 컴포넌트가 Hide되질 않습니다..

    > > > >

    > > > > TpopupMenu를 보면 popup Method로 화면에 보였다가도 마우스로 Tpopupmenu

    > > > > 의 영역밖에서 마우스를 클릭을 하게되면 자동으로 Tpopupmenu가 Hide처리가

    > > > > 아주 잘되더군요...

    > > > > 제 컴포넌트에서도 Tpopupmenu와 같이 동작을 하게 하고 싶은데...

    > > > > 어떻게 해야 하나요..??

    > > > > 고수님의 답변좀 부탁합니다..

    • 최석기
      2000.03.31 19:18
      장진웅 wrote: > > > 저는 어싱크콤포...트라이얼을 실험중인 개발자입니다.. > > fax 콤...
    • 조규춘
      2000.03.31 12:01
      조규춘이라고 합지요 재목 그대로 입니다. 이 제목이 죄목이 되지 않기를 바라면 적습니다. 퀵리포트를...
    • 김성훈
    • 2000.03.31 07:36
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.03.31 07:54
      리치에디트 데모소스엔 리치에디트에관한 모든것이 들어있는데 분석을 잘못하셨네요. 굉장히 잘 짜진 소스...
    • 박은경
    • 2000.03.31 06:40
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 까마귀
      2000.03.31 08:42
      박은경 wrote: > 안녕하세요? > 진짜 초보인 사람인데요 > 입력되는 5개 수 중 가장 큰수 찾는거 어떻게...
    • 하얀까마귀
      2000.03.31 06:22
      copy('abcdefg',1,2); 이건 참고하세요 strCat, StrComp, StrCopy, StrECopy, StrDispose, StrLen,...
    • 이지훈
    • 2000.03.31 06:06
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.03.31 07:16
      버튼에 ModalResult값을 설정하지 않으신 것 같은데 그럼 ShowModal에서 mrOk나 mrCancel같은 값을 얻으실...
    • 이수정
    • 2000.03.31 05:49
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2000.03.31 05:54
      안녕하세요 하얀까마귀 입니다.. 네 그렇게 하시면 됩니다.. 그냥 그대로 쓰셔도 뭐 상관없겠네요.. ...
    • 이수정
      2000.03.31 09:45
      하얀까마귀 wrote: > 안녕하세요 하얀까마귀 입니다.. > > 네 그렇게 하시면 됩니다.. > > 그냥 그...
    • 이수정
      2000.03.31 06:01
      하얀까마귀 wrote: > 안녕하세요 하얀까마귀 입니다.. > > 네 그렇게 하시면 됩니다.. > > 그냥 그...
    • 하얀까마귀
      2000.03.31 09:01
      안녕하세요 하얀까마귀 입니다. 제가 value대신 asString를 사용하라 한건 value의 경우는 타입이 없으...
    • 유동훈
    • 2000.03.31 04:49
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.03.31 07:28
      아마도 두번째 인자인 IsTerminated이 함수나 객체의 메소드같은데... GetExitCodeProcess는 두번째 인...
    • 정연
    • 2000.03.31 03:50
    • 2 COMMENTS
    • /
    • 0 LIKES
    • delchobo
      2000.03.31 04:40
      정연 wrote: > 에러 멧세지 : invalid use of keyword > token : add > ...
    • 하얀까마귀
      2000.03.31 05:24
      안녕하세요 하얀까마귀 입니다. add가 키워드 이기 때문에 에러가 나는게 맞습니다... 코드를 이렇게...
    • lee
    • 2000.03.31 03:36
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2000.03.31 05:26
      안녕하세요 하얀까마귀 입니다. 그 에러가 왜생기는지는 아실테고... 답변을 할려면 소스가 있어야 ...
    • 사노테
    • 2000.03.31 03:10
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2000.03.31 05:38
      안녕하세요 하얀까마귀 입니다.. 이것도 db에 관련된거네요.... 난 db가 싫은데... 먼저... dbedi...
    • 이동준
    • 2000.03.31 02:58
    • 1 COMMENTS
    • /
    • 0 LIKES
    • delchobo
      2000.03.31 04:48
      이동준 wrote: > locate 메소드를 이용해야 하는데, 키컬럼이 date형입니다. > db에는 char형으로 되어 ...
    • 최은정
    • 2000.03.31 02:37
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2000.03.31 02:43
      최은정 wrote: > Edit Mask 에서 숫자만 들어오게 하고 싶어요.. > 영문처리는 했는데.. 한글이 입력이 ...
    • 까마귀
      2000.03.31 08:25
      구창민 wrote: > 최은정 wrote: > > Edit Mask 에서 숫자만 들어오게 하고 싶어요.. > > 영문처리는 했...
    • 하얀까마귀
      2000.03.31 05:44
      안녕하세요 하얀까마귀 입니다... delphi 3.0에 포함된 퀵리포트와 델파이5.0에 포함된 퀵리포트 얘기 ...
    • 머리나쁜 얀
      2000.03.31 18:26
      넵 잘 보았습니다 답변에 감사 드리구여 2.0도 상관은 없겠군여 버젼 업이 되어도 기존의 작업 화일은
    • 까마귀
    • 2000.03.31 02:06
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최재원
      2000.03.31 03:03
      까마귀 wrote: > 안녕하세요. > 까마귀입니다. 좋은 하루 되시길.... > > 이상한 에러가 자꾸 생겨서...
    • 초보맨
    • 2000.03.31 01:53
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.03.31 02:16
      폼의 빈공간을 클릭할땐 포커스 변경이 일어나지 않습니다. 그리니까 CM_EXIT 메세지를 잡아챌수가 없죠. ...
    • 초보맨
      2000.03.31 04:30
      최용일님의 답변에 감사드립니다... 그런데 제가 델파이에 관란 지식이 좀 짧은 편이라서요 ^^ 염치 없지...
    • 최용일
      2000.03.31 05:27
      11207번에 제가 쓴 예제가 있습니다. 그것을 참조해 보세요. 이미지를 드래그했을때 캡션바를 드래그한 ...
    • 초보맨
      2000.04.01 02:01
      용일님의 예제를 보고 procedure TEDBCustomCombo.WMNCHitTest(var Msg: TWMNCHitTest); var P: TPoint...
    • sun
    • 2000.03.31 01:51
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 조규춘
      2000.03.31 05:35
      sun wrote: > Free와 Cafree의 차이점????의 차이점이 뭔가요.. > > 메모리에 관련된 것 같은데.. 차...
    • 구창민
      2000.03.31 01:46
      변영섭 wrote: > 그림화일(.bmp,jpg)화일을 데이터베이스에 저장하려고 하는데 어떻게 해야하는지요. > s...
    • 임택종
    • 2000.03.31 00:51
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.03.31 01:41
      여기에 또 올리셨네요. 제가 제대로 도움을 못드린 것 같군요.. 또 다른 방법을 알켜드리죠.. 약간의 편...
    • 최석기
      2000.03.31 01:14
      임택종 wrote: > 델파이 고수님들께 도움을 요청합니다 > > > 현 델파이 프로젝트를 진행하는중 ...