VCL中有很多事件和属性,但并不是对每个子类组件都公开,这当然是正确的,但有些
时候却给我们带来了麻烦,比如想使用TRichEdit的OnDlbClick事件,找来找去却找不
到,只好通过重载窗口过程或增加消息映射来实现,实际不需要这么麻烦,既然Borland
已经实现好了却不给我们,那就动粗。
例子一: 增加双击事件通用函数
bool __fastcall SetDblClick(TControl *Ctl, Classes::TNotifyEvent EventFun)
{
class TMyControl : public TControl
{
__published:
__property OnDblClick;
};
if (dynamic_cast<TControl *>(Ctl) != NULL)
{
((TMyControl *)Ctl)->OnDblClick = EventFun;
return true;
}
return false;
}
{
class TMyControl : public TControl
{
__published:
__property OnDblClick;
};
if (dynamic_cast<TControl *>(Ctl) != NULL)
{
((TMyControl *)Ctl)->OnDblClick = EventFun;
return true;
}
return false;
}
用法:
void __fastcall TForm1::MyDblClick(TObject *Sender)
{
ShowMessage("DblClick");
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
SetDblClick(RichEdit1, MyDblClick); //增加双击函数
//SetDblClick(RichEdit1, NULL);//取消双击函数
}
{
ShowMessage("DblClick");
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
SetDblClick(RichEdit1, MyDblClick); //增加双击函数
//SetDblClick(RichEdit1, NULL);//取消双击函数
}
例子二:增加颜色属性
void __fastcall TForm1::Button2Click(TObject *Sender)
{
class TMyControl : public TWinControl
{
__published:
__property Color;
};
((TMyControl *)PageControl1)->Color = clBlue;
}
{
class TMyControl : public TWinControl
{
__published:
__property Color;
};
((TMyControl *)PageControl1)->Color = clBlue;
}
组件属性如果不支持,公开也没用,比如TButton的Color,应用时候要注意。