컴포넌트를 제작하면서 제가 만든 컴포넌트가 포커스를 읽을때
폼에서 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와 같이 동작을 하게 하고 싶은데...
어떻게 해야 하나요..??
고수님의 답변좀 부탁합니다..
메세지를 잡아챌수가 없죠. 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와 같이 동작을 하게 하고 싶은데...
> 어떻게 해야 하나요..??
> 고수님의 답변좀 부탁합니다..