15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Как определить когда курсор мышки попал/покинул контрол.

Компилятор: C++ Builder

Чтобы определить, когда курсор мышки попал или покинул пределы контрола, необходимо обработать VCL сообщения CM_MOUSEENTER и CM_MOUSELEAVE. Это можно сделать через сабклассинг процедуры либо через наследование контрола и метода WndProc() (или через карту сообщений).

// в заголовке...
     Controls::TWndMethod OldLabelWP;
     void __fastcall NewLabelWP(TMessage &Msg);

 // в исходнике...
 __fastcall TForm1::TForm1(TComponent *Owner)
     : TForm(Owner)
 {
     OldLabelWP = Label1->WindowProc;
     Label1->WindowProc = NewLabelWP;
 }

 void __fastcall TForm1::NewLabelWP(TMessage &Msg)
 {
     switch (Msg.Msg)
     {
         case CM_MOUSEENTER:
         {
           
// курсор мышки попал в контрол
            break;
         }
         case CM_MOUSELEAVE:
         {
           
// курсор мышки покинул контрол
            break;
         }
         case WM_DESTROY:
         {
            Label1->WindowProc = OldLabelWP;
            break;
         }
     }
     OldLabelWP(Msg);
 }