__fastcall TfrmADM::TfrmADM(TComponent* Owner)
: TForm(Owner)
{
// Panel 위에 이미지가 위치해 있을 경우 Panel 의 WindowProc 를 제어한다
// 그 전에 Panel 의 WindowProc 를 저장해서 WndSubProc 호출시 같이 호출한다.
// 그렇지 않으면 무한 루프~
OriginalProc = PanelTool->WindowProc;
PanelTool->WindowProc = WndSubProc;
// Panel 위에 있지 않고 Form 위에 있을 경우에는 frmXXX->WindowProc = WndSubProc;
// 등으로 처리한다.
}
void __fastcall TfrmADM::WndSubProc(Messages::TMessage &Message)
{
// 기존 Panel 의 Proc 를 호출한다.
OriginalProc(Message);
// ImagePH2PC 는 TImage 임당~
if(Message.LParam == (long)ImagePH2PC && Message.Msg == CM_MOUSEENTER) OnOverImg(ImagePH2PC, 0);
if(Message.LParam == (long)ImagePC2PH && Message.Msg == CM_MOUSEENTER) OnOverImg(ImagePC2PH, 1);
if(Message.LParam == (long)ImageUpgrade && Message.Msg == CM_MOUSEENTER) OnOverImg(ImageUpgrade, 2);
if(Message.LParam == (long)ImageSetup && Message.Msg == CM_MOUSEENTER) OnOverImg(ImageSetup, 3);
if(Message.LParam == (long)ImageHelp && Message.Msg == CM_MOUSEENTER) OnOverImg(ImageHelp, 4);
if(Message.LParam == (long)ImageAnycall && Message.Msg == CM_MOUSEENTER) OnOverImg(ImageAnycall, 5);
if(Message.LParam == (long)ImagePH2PC && Message.Msg == CM_MOUSELEAVE) OnNormalImg(ImagePH2PC, 0);
if(Message.LParam == (long)ImagePC2PH && Message.Msg == CM_MOUSELEAVE) OnNormalImg(ImagePC2PH, 1);
if(Message.LParam == (long)ImageUpgrade && Message.Msg == CM_MOUSELEAVE) OnNormalImg(ImageUpgrade, 2);
if(Message.LParam == (long)ImageSetup && Message.Msg == CM_MOUSELEAVE) OnNormalImg(ImageSetup, 3);
if(Message.LParam == (long)ImageHelp && Message.Msg == CM_MOUSELEAVE) OnNormalImg(ImageHelp, 4);
if(Message.LParam == (long)ImageAnycall && Message.Msg == CM_MOUSELEAVE) OnNormalImg(ImageAnycall, 5);
}
//---------------------------------------------------------------------------
// 마우스 On & Over 함수 처리
void TfrmADM::OnOverImg(TImage* img, int spec)
{
// TImageList 에 있는 녀석의 이미지를 할당한다
Graphics::TBitmap *image = new Graphics::TBitmap();
ImageListToolDown->GetBitmap(spec, image);
img->Picture->Assign(image);
}
// Over 가 되지 않았을 경우를 처리
void TfrmADM::OnNormalImg(TImage* img, int spec)
{
Graphics::TBitmap *image = new Graphics::TBitmap();
ImageListToolNormal->GetBitmap(spec, image);
img->Picture->Assign(image);
}
void __fastcall TfrmADM::FormDestroy(TObject *Sender)
{
// 폼 해제시 Panel 의 WindowProc 를 해준다.
// 뭐 특별히 꼭 해줘야 할 이유는 없음. 적절히 복구해 주시길..
PanelTool->WindowProc = OriginalProc;
}
|