mouseleave 일 때만 좌표를 잡아서 시도해봤을 때 뭔가 불완전한 느낌이 들었었는데 leave, enter 둘 다 좌표를 계산해서 잡으니 완벽하네요. 조언 감사합니다:)
빌더(TWx) 님이 쓰신 글 :
: ㅇㅇ 님이 쓰신 글 :
: : 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 영역 안에 있냐 없냐로 판단하면 됌.
:
:
:
|