음..
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");
}
}
그럼..
|