Если имеется в виду не "определить", а обработать событие - то можно.
Определяешь в классе формы:
class TForm1 : public TForm
{
__published:
// ...
private:
TWndMethod OldProc;
void __fastcall NewBtnProc(TMessage& msg);
};
Далее переопределяем оконную процедуру кнопки (Button1) при создании формы:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
OldProc = Button1->WindowProc; // сохраняем текущую процедуру
Button1->WindowProc = NewBtnProc; // определяем новую процедуру
}
Сама новая процедура обрабатывает сообщения:
void __fastcall TForm1::NewBtnProc(TMessage& msg)
{
switch(msg.Msg) {
case WM_MOUSEMOVE: // мышь попала в кнопку
CheckBox1->Checked = true;
break;
case WM_MOUSELEAVE: // мышь вышла из кнопки
CheckBox1->Checked = false;
break;
}
OldProc(msg); // обрабатываем все другие события
}
При желании можно и событие определить без создания компонента. Для этого надо создать класс-потомок от TButton и прописать все вышеуказанное в нем. Например:
// --- определение нового класса-потомка от TButton
class PACKAGE TMyButton : public TButton
{
protected:
TWndMethod OldProc;
inline void __fastcall NewBtnProc(TMessage& msg)
{
switch(msg.Msg) {
case WM_MOUSEMOVE:
if(FOnMEnter) FOnMEnter(this);
break;
case WM_MOUSELEAVE:
if(FOnMLeave) FOnMLeave(this);
break;
}
OldProc(msg);
}
TNotifyEvent FOnMEnter, FOnMLeave;
public:
inline __fastcall virtual TMyButton(System::Classes::TComponent* AOwner) :
TButton(AOwner), FOnMEnter(0), FOnMLeave(0)
{
OldProc = WindowProc;
WindowProc = NewBtnProc;
}
inline __fastcall virtual ~TMyButton() { }
public:
__property TNotifyEvent OnMEnter = {read=FOnMEnter, write=FOnMEnter};
__property TNotifyEvent OnMLeave = {read=FOnMLeave, write=FOnMLeave};
};
// --- указатель на кнопку в классе формы
class TForm1 : public TForm
{
__published:
TCheckBox *CheckBox1;
private:
TMyButton* MyButton;
void __fastcall BtnMouseEnter(TObject *Sender);
void __fastcall BtnMouseLeave(TObject *Sender);
public:
__fastcall TForm1(TComponent* Owner);
};
// --- создание кнопки на форме и присвоение обработчиков событий
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
MyButton = new TMyButton(this);
MyButton->Parent = this;
MyButton->Left = 8;
MyButton->Top = 8;
MyButton->Width = 137;
MyButton->Height = 41;
MyButton->Caption = "New button";
MyButton->OnMEnter = &BtnMouseEnter;
MyButton->OnMLeave = &BtnMouseLeave;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnMouseEnter(TObject *Sender)
{
CheckBox1->Checked = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnMouseLeave(TObject *Sender)
{
CheckBox1->Checked = false;
}