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

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[1133] [Controls] MouseWheel 이벤트가 없는 Control에서 MouseWheel이벤트를 받으려면..
장성호 [nasilso] 24824 읽음    2013-05-23 17:34
음..

VCL Control중에 MouseWheel이벤트가 있는 Control은 많지 않습니다.

이런경우
기본 Control을 상속받아 Wheel이벤트를 구현하면 됩니다.

하지만 class선언과 구현이 불편하다고 느끼는 경우에

[Control에 MouseWheel이벤트가 없는 경우에..]

그냥 Control이 올라가 있는 Form의 MouseWheel 이벤트를 사용하시면 됩니다.


그런데 문제는 Form의 MouseWheel 이벤트는
Form위의 아무 Control에서 wheel이 발생하면 이벤트가 뜨기 때문에..

원하는 특정Control인지 판별하는 방법이 필요합니다.
Form의 Wheel이벤트에서 Sender가 이벤트가 발생한 Control이면 참 좋겠지만
아쉽게도 Sender는 입니다. Form입니다.

[현재 마우스 커서 있는 위치의 VCL- Control이 무엇인지 확인 방법]

   FindDragTarget 이라는 vcl함수가 있습니다.
   이 함수를 이용하면 현재 Mouse커서 위치의 Control이 무엇인지 판별해줍니다.


void __fastcall TForm8::FormMouseWheel(TObject *Sender, TShiftState Shift, int WheelDelta, TPoint &MousePos,
			 bool &Handled)
{
	//FindVCLWindow()
	TControl *pCtrl=FindDragTarget(MousePos,false);
	if(pCtrl==PaintBox1)
	{
		TControl *pSender=(TControl *)Sender;
		Memo1->Lines->Add("MouseWheel-PaintBox1 , Sender="+pSender->Name);
	}
	else if(pCtrl==Image1)
	{
		Memo1->Lines->Add("MouseWheel-Image1");
	}
	else if(pCtrl==Label1)
	{
		Memo1->Lines->Add("MouseWheel-Label1");
	}
	else if(pCtrl==Panel1)
	{
		Memo1->Lines->Add("MouseWheel-Panel1");
	}
}

  

그럼..

행복을 찾아서 [qorqnseh]   2013-06-07 11:05 X
제가 원하던 거네요 ^^ 감사합니다.
그린비 [greenvy]   2015-02-11 14:10 X
정말 감사합니다 !!!
이런 방법이 있었군요~~~
덕분에 많은 도움 받고 있습니다. 감사합니다~!

+ -

관련 글 리스트
1133 [Controls] MouseWheel 이벤트가 없는 Control에서 MouseWheel이벤트를 받으려면.. 장성호 24824 2013/05/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.