社区
C++ Builder
帖子详情
请问如何重载改变Button->Enabled时的代码?
kevincsdn
2003-06-24 08:49:57
请问如何重载改变Button->Enabled时的代码?
就是说,当我有一条语句:Button->Enabled=false;时,能够执行我自定义的代码。
...全文
45
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");
}
}
PowerBuilder大图标Toolbar实例设计与实现
集中管理所有热键绑定:// 定义结构体// 初始化映射数组astr_accels[1].
button
_index = 1 // Ctrl+N → 新建astr_accels[2].
button
_index = 2 // Ctrl+S → 保存graph LRA[KeyDown Event] --> B{匹配快捷键?...
VC常用小知识
(1) 如何通过
代码
获得应用程序主窗口的 指针? 主窗口的 指针保存在CWinThread::m_pMainWnd中,调用AfxGetMainWnd实现。...AfxGetMainWnd() ->ShowWindow(SW_SHOWMAXMIZED) //使程序最大化
C#窗体分割功能实现与应用实战
但由于原生控件未暴露足够绘图接口,通常建议采用“覆盖层”技术:graph TDA[原始SplitContainer] --> B[添加透明Panel覆盖]B --> C{监听鼠标进入Splitter区域}C -->|是| D[显示自定义高亮分割条]C -->|否| E[隐藏...
Qt学习笔记
QTableWidget自动适应列宽和行高: ui->TableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::...:checked
button
部件被选中 :disab
led
部件被禁用 :
enab
led
部件被启用 :focus 部件获得焦点
基于51单片机与LabVIEW的虚拟示波器系统设计与实现
虚拟示波器以“硬件采集+软件重构”为核心思想,构建由前端信号调理电路、51单片机控制核心、ADC模数转换模块、串行...graph LRA[模拟信号] --> B[信号调理]D --> E[串口通信]E --> F[LabVIEW显示]F --> G[波形分析]
C++ Builder
13,873
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章