社区
C++ Builder
帖子详情
请问如何重载改变Button->Enabled时的代码?
kevincsdn
2003-06-24 08:49:57
请问如何重载改变Button->Enabled时的代码?
就是说,当我有一条语句:Button->Enabled=false;时,能够执行我自定义的代码。
...全文
87
8
打赏
收藏
请问如何重载改变Button->Enabled时的代码?
请问如何重载改变Button->Enabled时的代码? 就是说,当我有一条语句:Button->Enabled=false;时,能够执行我自定义的代码。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kevincsdn
2003-06-24
打赏
举报
回复
谢谢2位
我的程序现在基本完成,现在想做一些小改动,也不想重写控件。
能不能在不声明新类,不用新控件的基础上,实现呢?
TopCat
2003-06-24
打赏
举报
回复
不好意思,回复有点长,直接贴这里了:
原贴内容:
如果你要重写控件,就New一个Component,祖先类选TButton,然后重载GetEnabled和SetEnabled方法
return TButton::GetEnabled();你这个有返回值吗?
http://expert.csdn.net/Expert/topic/1949/1949492.xml?temp=.4744837
-----------------------------------
不是很明白你的意思。
GetEnabled是当Enabled属性作为右值的时候调用的,当然应该有返回值了。
属性(property)是BCB扩展的特性,让成员函数可以像变量一样使用。Enabled属性的定义如下:
__property bool Enabled = {read=GetEnabled, write=SetEnabled, stored=IsEnabledStored, default=1};
它的意思是:当你读Enabled属性时,会调用GetEnabled函数,而写它的时候调用SetEnabled,后面两个参数不是很理解,你可以自己去看帮助。
所以,你写bool temp = Button1->Enabled;的时候,其实是执行了:bool temp=Button1->GetEnabled(); 当然,实际上你不能这么调用,因为GetEnabled是被保护的。那么你说GetEnabled该不该有返回值呢? :) 同样的,SetEnabled也应该有一个bool类型的参数。
在父类TButton中已经实现了GetEnabled和SetEnabled,所以你只要重载这两个函数就可以了
kevincsdn
2003-06-24
打赏
举报
回复
ActionList怎么用,我看了半天,也没明白
还有TActionManager, TActionToolBar
TopCat
2003-06-24
打赏
举报
回复
如果你要重写控件,就New一个Component,祖先类选TButton,然后重载GetEnabled和SetEnabled方法:
class PACKAGE TMyButton : public TButton
{
private:
protected:
__fastcall bool GetEnabled()
{
return TButton::GetEnabled();
};
__fastcall void SetEnabled(bool enabled)
{
if (enabled)
ShowMessage("Button Enabled");
else
ShowMessage("Button Disabled");
TButton::SetEnabled(enabled);
}
public:
__fastcall TMyButton(TComponent* Owner);
__published:
};
如果不想新写控件而只想用消息控制,那么楼上的方法不错。
xuv2002
2003-06-24
打赏
举报
回复
捕获CM_ENABLEDCHANGED消息
class TMyButton : public TButton
{
public:
__fastcall TMyButton(TComponent* Owner);
void __fastcall WndProc(TMessage &msg);
};
void __fastcall TMyButton::WndProc(TMessage &msg)
{
TButton::WndProc(msg);
if(msg.Msg == CM_ENABLEDCHANGED){
if(Enabled == false)
ShowMessage("haha");
}
}
yankcsdn
2003-06-24
打赏
举报
回复
我认为还是用ActionList,然后将Button的Enable代码指向不同的Action比较好!
kevincsdn
2003-06-24
打赏
举报
回复
谢谢,上面的可以。还有2个小问题。
Button1->WindowProc = MyProc;我是放在窗体的构造函数里的,会不会放在其他地方比较好?
为什么我用ClassExplorer中的New Method里的Message Handle添加函数不行,而且找不到CM_ENABLEDCHANGED,必须手动添加?
xuv2002
2003-06-24
打赏
举报
回复
那就捕捉消息咯
Button1->WindowProc = MyProc;
//---------------------------------------------------------------------------
void __fastcall TForm1::MyProc(TMessage &msg) // 在.h 里面声明
{
Button1->Dispatch(&msg);
if(msg.Msg == CM_ENABLEDCHANGED){
if(Button1->Enabled == false)
ShowMessage("haha");
}
}
基于C++ Builder 6的记事本软件开发:毕业设计实战指南
桌面应用程序开发是计算机软件工程领域的核心实践方向,其原理基于事件驱动编程模型与图形用户界面(GUI)框架。通过可视化组件库和集成开发环境(IDE),开发者能够高效构建功能完备的Windows原生应用,这对于理解操作系统交互、文件系统操作及内存管理具有重要技术价值。在文本编辑、办公辅助等典型应用场景中,记事本软件作为经典案例,涵盖了从界面设计到文件处理的全流程。本文聚焦于使用C++ Builder 6这一RAD工具,详细解析如何实现包括多文档界面(MDI)和语法高亮在内的核心功能模块,为毕业设计提供扎实的工
游戏引擎架构实战:游戏对象与资源管理核心机制详解
在游戏引擎开发中,游戏对象与资源管理是影响性能与稳定性的核心模块。游戏对象通过组件化设计实现灵活组合,资源管理则依赖引用计数与异步加载等机制控制生命周期。合理运用对象池、资源池与ECS架构,能显著提升内存复用率与缓存命中率,降低内存泄漏风险。这些技术广泛应用于开放世界、大规模NPC与载具等场景,是引擎架构设计的关键基础。
Plyr 3.8.4 集成实战指南:为 HTML5、YouTube 与 Vimeo 打造可定制、无障碍的现代媒体播放器
Plyr 是一个简单、轻量、可访问且高度可定制的 HTML5、YouTube 与 Vimeo 媒体播放器(当前仓库版本 3.8.4),支持 WebVTT 字幕、键盘快捷键、画中画、预览缩略图、i18n 国际化和广告变现等能力。本指南以仓库根目录的 [README.md](https://link.gitcode.com/i/16cc2421ca6e86881f0c8d2d7ea0711c) 为主体
电励磁同步电机异步牵入-稳态运行-能耗制动全周期动态特性的MatlabSimulink仿真研究
内容概要:本文基于Matlab/Simulink平台,对电励磁同步电机在异步牵入、稳态运行及能耗制动三个阶段的全周期动态特性进行建模仿真与系统研究。研究构建了完整的电机数学模型与仿真系统,重点分析了电机从异步启动到同步运行的过渡过程、稳态运行
时
的电磁与机械性能,以及执行能耗制动
时
的减速特性与能量耗散机理。通过仿真,揭示了励磁电流、负载转矩与转速在不同工况下的动态响应规律与耦合关系,为电机的控制策略设计与性能优化提供了理论依据和数据支持。; 适合人群:具备电机学、电力电子与电力拖动基础知识的电气工程及相关专业的研究生、科研人员与工程技术人员。; 使用场景及目标:①研究电励磁同步电机的启动特性,解决异步牵入过程不稳定或失败的问题;②分析电机在不同负载下的稳态运行性能,优化运行效率;③设计和验证能耗制动策略,精确控制制动过程的减速
时
间和能量消耗。; 阅读建议:在学习过程中,应结合电机的基本原理,深入理解仿真模型中各模块(如电机本体、励磁控制、负载模型)的搭建逻辑,并通过调整仿真参数(如励磁电压、负载大小)来观察和分析系统动态响应,以加深对电机全周期运行特性的理解。
Vue3 + ECharts + ECharts-GL(3D地图) + Express + SQLite
# 中国数据可视化大屏 Vue3 + ECharts + ECharts-GL(3D地图) + Express + SQLite ## 快速启动 ### 1. 启动后端(SQLite API) ```bash cd server npm start # 或 node index.js ``` 默认地址:`http://localhost:3001` ### 2. 启动前端 ```bash # 在项目根目录 npm run dev ``` 浏览器打开:`http://localhost:5173` ## 演示账号 | 手机号 | 用户名 | 密码 | 角色 | | ----------- | ------ | ------ | ------ | | 13800000001 | admin | 123456 | 管理员 | | 13800000002 | editor | 123456 | 编辑员 | | 13800000003 | viewer | 123456 | 访客 | 支持两种登录: 1. **手机验证码**(演示环境验证码直接返回页面) 2. **账号密码**(可用用户名 / 手机号 / 邮箱 + 密码) ## 功能概览 - 中间中国地图:人口 / 交通 / 经济图层切换,2D / 3D 切换 - 3D 地图按数据值拉高地区高度,并叠加飞线、原点光圈、立体柱、菱形散点 - 2D 地图同样包含飞线、原点脉冲、柱状模拟、菱形散点 - 左侧:NPM依赖关系图、日历热力图、折线树图 - 右侧:矩形树图⇄旭日图动画过渡、矩阵响应式网格、关系图重叠标签自动隐藏 - 底部:主题河流图 - 数据管理:SQLite 连接切换、建表/删表/改表名、增删改字段、表数据增删改查/导入导出 - 仅管理员(admin)可修改数据库连接与表结构
C++ Builder
13,871
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章