社区
C++ Builder
帖子详情
请问如何重载改变Button->Enabled时的代码?
kevincsdn
2003-06-24 08:49:57
请问如何重载改变Button->Enabled时的代码?
就是说,当我有一条语句:Button->Enabled=false;时,能够执行我自定义的代码。
...全文
36
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");
}
}
ExtAspNet_v2.3.2_dll
-Window的Target属性由字符串类型变为枚举类型,注意更新以前的
代码
:Target="_self" -> Target="Self", Target="_parent" -> Target="Parent"。 -Menu
Button
, Link
Button
,
Button
, Link
Button
Field的...
C++MFC教程
当用户进行了输入或是窗口的状态发生
改变
时
系统都会发送消息到某一个窗口。例如当菜单转中之后会有WM_COMMAND消息发送,WPARAM的高字中(HIWORD(wParam))是命令的ID号,对菜单来讲就是菜单ID。当然用户也可以定义...
微服务系列第八季-Java中重写、
重载
及枚举
微服务应用是分布式...包括:Java中重写的概念、重写中super的使用、方法的重写规则、方法的
重载
概念、方法重写与
重载
的区别、枚举的概念、内部类中使用枚举、迭代枚举元素、在switch中使用枚举类、枚举的常用方法。
玩QT学习
方法:【工具】->【选项】->【文本编辑器】->【Behavior】 很实用和方便的功能,尤其是你在给同事讲解
代码
时
,可以方便地放大
代码
区域 鼠标滚轮,缩放字体 (4)显示行号、高亮显示当前行 方法:【工具】->【选项】-...
Yii初学者必看-yii 表单验证规则
对yii深入了解总结出:希望对初学者有些帮助 Active Record (AR) 是一个流行的 对象-关系映射 (ORM) 技术。 每个 AR 类代表一个数据表(或视图),数据表(或视图)的列在 AR ... 例如,我们可以使用以下
代码
向 tbl_
C++ Builder
13,826
社区成员
102,678
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章