在BCB中如何在自定义类中加入基类事件的代码?

Hank 2000-06-16 09:35:00
加精
在BCB中,新建一个类,如何加入它基类的事件代码?

例如:新建一个类,命名为TShowEdit,继承自TEdit,如何在TShowEdit中加入OnExit事件(其它如OnClick,OnEnter等),使得TShowEdit类每离开焦点时都首先激活在TShowEdit类中定义的代码,然后才激活我实际应用过程中的代码。
...全文
289 11 打赏 收藏 转发到动态 举报
写回复
用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;即可。

13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧