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

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);
}
....


...全文
195 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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的
Apace是软动科技有限公司(以下简称“软动科技” )自主研发的一套基于分布式事务型的通用实时数据库系统,它主要应用于现代工业企业,包括电力、石油、矿山、化工、钢铁、电信、航空等领域。 Apace提供对实时时序数据的压缩、计算、存储、告警、分发、查询、统计功能,同时,为上层业务系统开发提供了丰富的应用接口。另外,Apace还拥有强大的组态图设计器以及Excel扩展报表插件。 系统引入了多种创新的技术和理念,各方面的指标在同类软件中都名列前茅。在实时数据采集方面,Apace可以在一台普通PC上稳定的承载30万点同步更新数据;在历史数据处理方面,我们在对多种压缩算法进行研究改进后,创造了Apace独有的压缩算法,对历史数据的压缩可达到平均35:1的高压缩比。同时,Apace独创的索引技术,可以实现检索的时间无关性,即可以从几十、上百年的历史数据中高效的检索任一时间点的数据;在告警服务里,Apace首度提出了趋势拟合和波动拟合告警,这项技术让Apace实时数据库的告警能力得到了质的飞跃,可实现更为复杂的告警规则;在计算服务方面,计算规则可以采用C#、VB.NET或JScript语言进行编写,支持程序集动态引用技术,算法设计者可以使用自定义的第三方程序集,大大加强了计算服务的计算能力。

604

社区成员

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

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