社区
C++ Builder
帖子详情
在BCB中如何在自定义类中加入基类事件的代码?
Hank
2000-06-16 09:35:00
加精
在BCB中,新建一个类,如何加入它基类的事件代码?
例如:新建一个类,命名为TShowEdit,继承自TEdit,如何在TShowEdit中加入OnExit事件(其它如OnClick,OnEnter等),使得TShowEdit类每离开焦点时都首先激活在TShowEdit类中定义的代码,然后才激活我实际应用过程中的代码。
...全文
289
11
打赏
收藏
在BCB中如何在自定义类中加入基类事件的代码?
在BCB中,新建一个类,如何加入它基类的事件代码? 例如:新建一个类,命名为TShowEdit,继承自TEdit,如何在TShowEdit中加入OnExit事件(其它如OnClick,OnEnter等),使得TShowEdit类每离开焦点时都首先激活在TShowEdit类中定义的代码,然后才激活我实际应用过程中的代码。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xiangdie
2001-08-07
打赏
举报
回复
学习
Hank
2000-07-03
打赏
举报
回复
是的,QIANXH的方法是对的,Wingsun EMAIL给我的也是正确的!
问题是已经基本解决,剩下的就是一些后继问题。不过我先声明一下问题的未解决部分,估计要用到句柄。
1、设计好这个类以后,在实际应用中,在对应事件中的代码不执行。例如我设计的类代码如下:
//**********ECODE.H**********//
class PACKAGE TECODE : public TEdit
{
private:
protected:
DYNAMIC void __fastcall DoExit();
public:
__fastcall TECODE(TComponent* Owner);
__published:
};
//**********ECODE.CPP**********//
void __fastcall TECODE::DoExit()
{
if (Text!="0")
{
Text="0";
ShowMessage("The Class Sucessful");
}
else
{
Text="Sucess";
ShowMessage("The Class 0000 Sucessful");
}
}
在实际应用过程中的代码如下:
void __fastcall TForm6::ECODE1Exit(TObject *Sender)
{
ShowMessage("The Control Sucessful");
}
//---------------------------------------------------------------------------
void __fastcall TForm6::ECODE2Exit(TObject *Sender)
{
ShowMessage("The Control Sucessful");
}
//---------------------------------------------------------------------------
void __fastcall TForm6::ECODE3Exit(TObject *Sender)
{
ShowMessage("The Control Sucessful");
}
//---------------------------------------------------------------------------
但是在实际应用过程中的代码根本就不执行!
2、如果是按上面的写法,在执行OnExit()事件后,后一个输入框的文本会随鼠标的移动自动选取!肯定是某一句柄没有释放!
这些问题我自己搞定得了,如果出来了会告诉两位。
再次感谢qianxh,Wingsun两位,请qianxh告诉我你的email。
qianxh
2000-07-01
打赏
举报
回复
不知你有没有按上次回答的去试一下:
DoEnter(DoExit、Click)是各个控件的OnEnter(OnExit、OnClick)事件的响应
函数,每次发生事件都会执行该函数,如果你想先执行控件代码再执行应用程序的代码,
只需象下面所示交换一下顺序:
void __fastcall TShowEdit::DoEnter()
{
// 先写你自己的代码
TEdit::DoEnter();
}
其中TEdit::DoEnter()即是执行应用程序的事件响应。
Wingsun
2000-06-30
打赏
举报
回复
class TMyShape : public TShape
{
public:
__fastcall TMyShape(TComponent* AOwner);
__fastcall ~TMyShape(void){};
__property OnDblClick;
protected:
priveate:
void __fastcall MyDblClick(TObject *Sender)
};
__fastcall TMyShape ::TMyShape (TComponent* Owner)
: TShape(Owner)
{
OnDblClick=MyDblClick;
}
__fastcall TMyShape::MyDblClick(TObject * Sender)
{
.....
.....
TShape::OnDblClick(Sender);
}
Hank
2000-06-30
打赏
举报
回复
首先声明一下:qianxh 和 ploto 两位本身曲解了我的意思。小弟在标题中是说的不很清楚,但在里面的说明中已经很清楚。我的代码实现是在自定义类中实现!
Wingsun 大侠是真正明白我的意思,其实我开始的思路也是如此设置一个public: 型的过程,然后象普通属性或过程那么调用,可惜不行(声明:如果自定义属性不与系统重复是可以的)!当时是这样的:
class PACKAGE TShowEdit: public TEdit
{
private:
void __fastcall SetOnExit();
protected:
public:
__fastcall TShowEdit(TComponent* Owner);
__published:
__property OnExit={read=SetOnExit,write=SetOnExit};
};
很可惜,无论我怎样换(将 void __fastcall SetOnExit(); 设为private:或public:),系统总是提示:
E2347 Parameter mismatch in write access specifier of property OnExit
估计是基类本身的属性和过程根本不允许读写。那么只有一种方法,对自定义类的继承自基类的过程自己进行设计。就象wingsun 大侠的代码一样,然后在类的实现 .cpp中对基类的过程重新进行设计!我需要的就是这个!但是不知怎么进行设计!
各位可以考虑一下:如果我自己设计一个类以后,如果输入错误,总是出现相应的代码,那多方便!就象这样的类:继承自TEdit,如果文字输入错误,都会出现提示。以前是用TEdit类,然后在每次用到的地方都在它的OnExit中写入同样的代码,这多麻烦!如果实现自定义类就很方便,问题就是怎么激活这部分代码!
Hank
2000-06-30
打赏
举报
回复
首先感谢Wingsun大侠,我的电子邮件地址是:
starfarm@263.net
Wingsun
2000-06-30
打赏
举报
回复
我写了一段代码,给我你的Email我发给你,你看一看。
ploto
2000-06-29
打赏
举报
回复
qianxh的方法是标准的C++调用基类方法的方法,其实不一定要同名函数如
void __fastcall TShowEdit::DoEnter()
{
TEdit::DoExit();
//...
}
同样也可。
qianxh
2000-06-28
打赏
举报
回复
//申明部分
{
protected:
DYNAMIC void __fastcall DoEnter();
DYNAMIC void __fastcall DoExit();
DYNAMIC void __fastcall Click();
}
// 程序部分
void __fastcall TShowEdit::DoEnter()
{
TEdit::DoEnter();
// 加入你自己的代码
}
void __fastcall TShowEdit::DoExit()
{
TEdit::DoExit();
// 加入你自己的代码
}
void __fastcall TShowEdit::Click()
{
TEdit::Click();
// 加入你自己的代码
}
SCUM
2000-06-27
打赏
举报
回复
应该有更好的方法。
Wingsun
2000-06-16
打赏
举报
回复
如下:
class TMyShape : public TShape
{
public:
__fastcall TMyShape(TComponent* AOwner);
__fastcall ~TMyShape(void){};
__property OnDblClick;
protected:
priveate:
__fastcall MyDblClick();
};
可以在定义时
OnDblClick = {read=MyDblClick, write=MyDblClick};
也可以在类的实例化时将OnDblClick=MyDblClick;即可。
BCB
6常见问题
一段时间没用cbuilder了,再用的时候,发现总是磕磕绊绊,把遇到的一些“小问题”贴在这里,希望能给其他一些不熟悉cb6的人一些帮助: 1.先安装一些控件后,以后卸载,但编译后来的项目总提示找不到。。。,需要给一些lib,bpi指定路径? 解决方法:close掉工程,使用ultraed...
BCB
的编码规则参考:
BCB
团队开发小组编码规则(摘录)
软件编码规范(一) 作者:luhongjun前言: 通过建立
代码
编写规范,形成
BCB
开发小组编码约定,提高程序的可靠性、可读性、可修改性、可维护性、一致性,保证程序
代码
的质量,继承软件开发成果,充分利用资源。提高程序的可继承性,使开发人员之间的工作成果可以共享。软件编码要遵循以下原则:1.遵循开发流程,在设计的指导下进行
代码
编写。2.
代码
的编写以实现设计的功能和性能为目标,要求正确完成设计
深入
BCB
理解VCL的消息机制
深入
BCB
理解VCL的消息机制
引子:本文所谈及的技术内容都来自于Internet的公开信息。由笔者在闲暇之际整理
后,贴出来以飴网友,姑且妄称原创。每次在国外网站上找到精彩文章的时候,心
中
都
会暗自叹息,为什么在
中
文网站难以觅得这类文章呢?其实原因大家都明白。
时至今日,学习Windows编程的兄弟们都知道消息机制的重要性。所以理解消息机制也
成了不可或缺的功课。大家都知道,Borland的C++ Builder以及Delphi的核心是VCL。
深入VCL 理解
BCB
的消息机制
BCB
消息机制
方法1。使用消息映射(Message Map)重载TObject的Dispatch虚成员函数 BEGIN_MESSAGE_MAP VCL_MESSAGE_HANDLER( … …) END_MESSAGE_MAP( …) 熟悉MFC都知道,上面其实是定义了一段消息处理的宏 e.g BEGIN_MESSAGE_MAP VCL_MESSAGE_HANDLER(WM_PAINT,TMess
C++ Builder
13,822
社区成员
102,680
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章