如何批量为按钮添加鼠标离开事件?

xcluii 2010-06-08 11:01:06
现一个窗体上有许多按钮或其他控件,都要增加对鼠标离开事件的响应,什么样的方式才是最好的?

不要用Timer,和SetCapture。

我用的方法是替换每个控件的WinProc,如下:

void __fastcall TFormHintMsg::FormCreate(TObject *Sender)
{
Btn1->WindowProc = Proc1;
Btn2->WindowProc = Proc2;
Btn3->WindowProc = Proc3;
... ...
}
void __fastcall TFormHintMsg::Proc1(TMessage &message)
{
if(message.Msg == CM_MOUSEENTER)
{
//
}
if(message.Msg == CM_MOUSELEAVE)
{
//
}
Btn1->Dispatch(&message);
}
void __fastcall TFormHintMsg::Proc2(TMessage &message)
{
//
Btn2->Dispatch(&message);
}
....


...全文
206 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuanner 2010-06-11
  • 打赏
  • 举报
回复
to 老妖:学习啦!CB6版本确实这样.

to xcluii:不好意思,没有见到要求所有的.那只能认命了!
在CB2010上OnMouseLeave与OnMouseEnter是在TControl的Protected的访问区里,也不是所有控件都会有这个事件,那些没有这个事件的控件,也只能通过继承,举个例子(如 TrackBar控件,就没有OnMouseLeave与OnMouseEnter事件,通过继承重写组件包,公开这个接口.
xuanner 2010-06-08
  • 打赏
  • 举报
回复
窗体上放一个TPanel pnl,Align设置alClient,通过pnl->ControlCount遍历面板的所有控件,设置需要响应的控件的OnMouseLeave事件为自己定义的函数(其实就是函数指针).
fxworld 2010-06-08
  • 打赏
  • 举报
回复
这样做太累了,建议自己做一个组件,从TButton继承,以后直接使用就可以了。

或者使用cb2010 ,这个版本在TControl加上了CM_MOUSEENTER和CM_MOUSELEAVE的消息处理,这样可视组件自动都带了OnMouseEnter和OnMouseLeave事件。
ccrun.com 2010-06-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xuanner 的回复:]
窗体上放一个TPanel pnl,Align设置alClient,通过pnl->ControlCount遍历面板的所有控件,设置需要响应的控件的OnMouseLeave事件为自己定义的函数(其实就是函数指针).
[/Quote]

并不是每一个组件都有OnMouseLeave事件。

子类化每一个控件,响应鼠标进入和离开消息才是王道。
xcluii 2010-06-08
  • 打赏
  • 举报
回复
to:xuanner

如果是遍历组件的话,怎么定义各自的OnMouseLeave事件函数,组件是不带OnMouseLeave的

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧