社区
C++ Builder
帖子详情
请问如何重载改变Button->Enabled时的代码?
kevincsdn
2003-06-24 08:49:57
请问如何重载改变Button->Enabled时的代码?
就是说,当我有一条语句:Button->Enabled=false;时,能够执行我自定义的代码。
...全文
42
8
打赏
收藏
请问如何重载改变Button->Enabled时的代码?
请问如何重载改变Button->Enabled时的代码? 就是说,当我有一条语句:Button->Enabled=false;时,能够执行我自定义的代码。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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");
}
}
右击树形控件实现节点动态添加删除修改(VC 6.0实现)
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHT
BUTTON
, point.x, point.y, this); } ``` 接下来,我们需要处理快捷菜单的各个命令。例如,添加节点的命令`ID_ADD_NODE`,删除节点的命令`ID_DELETE_NODE`,...
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。当然用户也可以定义...
VC常用小知识
(1) 如何通过
代码
获得应用程序主窗口的 指针? 主窗口的 指针保存在CWinThread::m_pMainWnd中,调用AfxGetMainWnd实现。...AfxGetMainWnd() ->ShowWindow(SW_SHOWMAXMIZED) //使程序最大化
Qt学习笔记
QTableWidget自动适应列宽和行高: ui->TableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::...:checked
button
部件被选中 :disab
led
部件被禁用 :
enab
led
部件被启用 :focus 部件获得焦点
C++ Builder
13,873
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章