ㅇㅇ 님이 쓰신 글 :
: panel에서 마우스가 나가면 패널의 height가 1/3으로 줄어들고 마우스가 들어오면 패널의 높이가 원래대로 돌아오는 기능을 구현하려 합니다. 패널 컴포넌트는 TMS 컴포넌트 중 하나인 TAdvSmoothPanel을 사용하고 있습니다.
: 처음엔 mouseenter와 mouseleave 이벤트를 사용하여 이 기능을 구현하려 하였습니다.
: 하지만 패널에 들어왔을 때만 이벤트가 적용되고 패널의 자식 컴포넌트에 마우스가 들어왔을 때는 동작을 안하더군요.
: 패널의 자식 컴포넌트에도 이벤트를 적용시키려면 어떤 이벤트를 사용해야 하나요?
:
: 다음은 TAdvSmoothPanel의 마우스 관련 이벤트입니다.
: -OnMouseActivate
: -OnMouseDown
: -OnMouseEnter
: -OnMouseLeave
: -OnMouseMove
: -OnMouseUp
:
: mouseover 이벤트는 이 패널에는 존재하지 않네요.
답변:
간단한 걸 어렵게 생각하네요.
: -OnMouseEnter
: -OnMouseLeave
두개의 핸들러 안에서... 윈도우즈 API 이용해서 스크린 좌표기준의 마우스 포인트 위치를 얻어서...
그 위치를 패널의 클라이언트 Rect로 변환해서...
위에서 얻은 마우스 포인트의 위치가 Panel의 ClientRect 영역 안에 있느냐, 아니냐로
로직을 구현하면 간단하게 처리할 수 있지요.
MouseEnter가 발생했냐 아니면 MouseLeave가 발생했냐로 판단하지 말고...
두개의 이벤트가 발생했을 때의 마우스 포인트 위치가 Panel의 ClientRect 영역 안에 있냐 없냐로 판단하면 됌.
|