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,应用时候要注意。