C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[75511] Re: 간단한 걸 어렵게 생각하네요.
빌더(TWx) [builder] 2228 읽음    2019-08-10 00:36
ㅇㅇ 님이 쓰신 글 :
: 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 영역 안에 있냐 없냐로 판단하면 됌.



+ -

관련 글 리스트
75506 패널의 자식 컴포넌트에도 이벤트가 적용되게 하려면 어떻게 해야하나요? ㅇㅇ 2190 2019/08/09
75511     Re: 간단한 걸 어렵게 생각하네요. 빌더(TWx) 2228 2019/08/10
75519         Re:Re: 간단한 걸 어렵게 생각하네요. ㅇㅇ 2280 2019/08/14
75508     Re:패널의 자식 컴포넌트에도 이벤트가 적용되게 하려면 어떻게 해야하나요? 아루스 2238 2019/08/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.