基于Delphi的组件设计之简单实例

2016-01-29 14:26 9 1 收藏

基于Delphi的组件设计之简单实例,基于Delphi的组件设计之简单实例

【 tulaoshi.com - Delphi 】

  这是一个可以计数的组件,为了简单,我以秒为单位,当开始时,他就从0开始增加,并显示出来,到3600时,它又回到0,如此循环。当然它也可以停止,暂停,继续。另外,他还有一个时间事件,即可以设定每隔多少时间来触发这个事件,这倒是一个好的功能,我们可以设半个小时触发事件,在事件处理函数中来一个声音,然后睡个觉,半个小时后,就由这个声音来提醒你起床了。

  我们一开始不要新建组件单元,而是把它当成一个工程中的一个类来应用,这样更易于调试,于是我们新建一个工程,又新建一个空白单元用于放置这个类

  一、确定父类

  接下来给这个类起名叫TTimeCount,那么它的父类应该是什么呢,它要能显示出来,得有一个容量来让他显示,TPanel是个不错的选择,我看了一下源码,发觉TPanel什么也没有做,只是把它的父类TCustomPanel的属性显化出来(这个等一下讲),TCustomPanel把好多的属性声明为Protected,为他的子类提供了选择,他的子类如果要使这些属性能在对象察看器中看到,可以在Published重新声明一下,如果不想,则不用去理会他。而我们的计数器组件正好不用那么多属性,正好合适。于是我决定用TCusomPanel为父类

  类建立如下:

TTimeCount=class(TCustomPanel)
private
protected
public
published
end;
  二、确定成员,方法和属性和事件

  FCount; 只读私有成员,保存计数值

  FActive:Boolean; /确定是否发生类的时间间隔事件

  FInterval:TInterval; 这个可以设置时间事件触发间隔,本来用整型值会好一些,但会了学习起见,这里用了一个枚举形的,在Type中声明如下:

TInterval=(TenM,TwentyM,ThirtyM,FortyM,FiftyM,SixtyM);
  分别表示十分钟到六十分钟。

  TimeLen,TimeNum:integer;这两个用在类的时间事件发生的确定上,与外界隔绝。

  FTimeOut:TNotifyEvent;时间间隔事件的方法指针,通过调度方法实现他与外部的处理函数关联。

  我们要它能以秒为单位来计数,则要涉及到时间的应用,所以就有了这个最重要的成员:

  FTimer:TTimer;

  这个成员对象要在类构造函数中实例化它,并赋与他的属性值,还要在析构函数在释放它。

  如下:

//构造函数,继承父类的构造函数,并初始化类中的成员。

constructor TTimeCount.Create(AOwner:TComponent);

//创建时间控件并设置相关的参数

procedure CreateTimer;
begin
FTimer:=TTimer.Create(self);
FTimer.Enabled:=False;
FTimer.Interval:=1000;
FTimer.OnTimer:=FTimerTimer;
end;
begin
inherited Create(AOwner);
CreateTimer;
end;

//析构函数,先释放时间控件,再继承父类的析构函数

destructor TTimeCount.Destroy;
begin
FTimer.Free;
inherited Destroy;
end;
  构造函数中还要设置该组件的外观和默认值,这里把它删去,到源代码再贴出来。

  其中

  FTimerTimer;是很重要的函数,在该类中有声明:

procedure FTimerTimer(Sender:Tobject);//时间控件的事件处理函数
  在这个处理函数中,实现了计数值的递增并显示到容器中,此外,还在判断类的时间事件是否有足够条件触发了,如果有则调用DoTimeOut;过程,这个就是事件的调度函数啦:

//事件调度函数,将外部的事件处理函数和该类的事件方法指针联系起来

procedure TTimeCount.DoTimeOut;
begin
if Assigned(FTimeOut) then
FTimeOut(Self);
end;
  而属性则是根据私有成员来设定了:

来源:http://www.tulaoshi.com/n/20160129/1493293.html

延伸阅读
标签: Delphi
  组件技术是新一代软件技术发展的标志,作为著名的RAD开发工具,Delphi可以轻松地实现组件的开发。本文将详细介绍Delphi中DCOM/CORBA的实现步骤。 ■创建应用服务器 要创建一个多层Client/Server应用程序,首先要创建应用服务器,然后注册或安装应用服务器,只有应用服务器已注册并且正在运行的情况下,才能创建...
标签: Delphi
分布式COM(以下简称DCOM)的出现给我们轻松的创建分布式应用提供了机会;我们可以完全不去理会低级别的Windows Sockets(DCOM通过MS-RPC让客户与对象进行通信,幸运的是要开发COM应用,开发者几乎可以不去理会MS-RPC)而开发出功能强大、偶合性低(功能模块相对独立,很好的发挥了OO的思想)、易于部署的分布式计算系统。 本文我们...
这将是最后一个组件了,目标定为非可视化,事实上非可视化组件要比可视化组件难做,因为是从TComponent继承而来,就没有了很多属性和事件。而这些都要我们从头来做过。 这个非可视化组件,我决定为托盘组件,其中用到的技术较多,我不如列一个表出来,然后再来讲解好一点。另外,可能篇幅会多一些,请耐心看。 用到的技术: ...
Struts 和 Tiles 辅助基于组件的开发(5) Struts 和 Tiles 更复杂的使用 篇幅所限,不答应我再深入讨论 Struts 和 Tiles 包其它一些实用的方面,但我真的想简要地谈一下,这样您可以对 Struts 和 Tiles 可以做些什么有所了解。假如有足够的需求,可能这些内容会是将来文章的主题。 您会在本文的两个示例中注重到,我编码了名...

经验教程

512

收藏

68
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部