Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16496445
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:50:37

下载本文示例代码
  接下来要动手来做一个组件了,我想了一个计数器组件,功能方面是比较简单的,但这不是本章的重点,这一章的重点是说明一个组件的制作全过程。在其中可以学到很多组件制作的技巧,当然这些也是我从书上学得的。   这是一个可以计数的组件,为了简单,我以秒为单位,当开始时,他就从0开始增加,并显示出来,到3600时,它又回到0,如此循环。当然它也可以停止,暂停,继续。另外,他还有一个时间事件,即可以设定每隔多少时间来触发这个事件,这倒是一个好的功能,我们可以设半个小时触发事件,在事件处理函数中来一个声音,然后睡个觉,半个小时后,就由这个声音来提醒你起床了。  我们一开始不要新建组件单元,而是把它当成一个工程中的一个类来应用,这样更易于调试,于是我们新建一个工程,又新建一个空白单元用于放置这个类  一、确定父类:  接下来给这个类起名叫TTimeCount,那么它的父类应该是什么呢,它要能显示出来,得有一个容量来让他显示,TPanel是个不错的选择,我看了一下源码,发觉TPanel什么也没有做,只是把它的父类TCustomPanel的属性显化出来(这个等一下讲),TCustomPanel把好多的属性声明为Protected,为他的子类提供了选择,他的子类如果要使这些属性能在对象察看器中看到,可以在Published重新声明一下,如果不想,则不用去理会他。而我们的计数器组件正好不用那么多属性,正好合适。于是我决定用TCusomPanel为父类  类建立如下: TTimeCount=class(TCustomPanel)privateprotectedpublicpublishedend;  二、确定成员,方法和属性和事件  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;beginFTimer:=TTimer.Create(self);FTimer.Enabled:=False;FTimer.Interval:=1000;FTimer.OnTimer:=FTimerTimer;end;begininherited Create(AOwner);CreateTimer;end;//析构函数,先释放时间控件,再继承父类的析构函数destructor TTimeCount.Destroy;beginFTimer.Free;inherited Destroy;end;  构造函数中还要设置该组件的外观和默认值,这里把它删去,到源代码再贴出来。  其中  FTimerTimer;是很重要的函数,在该类中有声明: procedure FTimerTimer(Sender:Tobject);//时间控件的事件处理函数  在这个处理函数中,实现了计数值的递增并显示到容器中,此外,还在判断类的时间事件是否有足够条件触发了,如果有则调用DoTimeOut;过程,这个就是事件的调度函数啦: //事件调度函数,将外部的事件处理函数和该类的事件方法指针联系起来procedure TTimeCount.DoTimeOut;beginif Assigned(FTimeOut) thenFTimeOut(Self);end;  而属性则是根据私有成员来设定了: publicproperty Count:Integer read FCount default 0; //计数值的只读属性,这个属性不能声明在Published中,因为它是只读的,只在程序运行时通过它来得到计数值。publishedproperty Interval:TInterval read FInterval write SetInterval Default TenM;property Active:boolean read FActive write SetActive default false;property OnTimeOut:TNotifyEvent read FTimeOut write FTimeOut;  此外还有几个自定义方法即 procedure pause; //暂停计数procedure Resume;//从暂停的计数开始计数。procedure stop;//停止procedure start;//开始计数  都比较简单。共2页。 1 2 :   接下来要动手来做一个组件了,我想了一个计数器组件,功能方面是比较简单的,但这不是本章的重点,这一章的重点是说明一个组件的制作全过程。在其中可以学到很多组件制作的技巧,当然这些也是我从书上学得的。   这是一个可以计数的组件,为了简单,我以秒为单位,当开始时,他就从0开始增加,并显示出来,到3600时,它又回到0,如此循环。当然它也可以停止,暂停,继续。另外,他还有一个时间事件,即可以设定每隔多少时间来触发这个事件,这倒是一个好的功能,我们可以设半个小时触发事件,在事件处理函数中来一个声音,然后睡个觉,半个小时后,就由这个声音来提醒你起床了。  我们一开始不要新建组件单元,而是把它当成一个工程中的一个类来应用,这样更易于调试,于是我们新建一个工程,又新建一个空白单元用于放置这个类  一、确定父类:  接下来给这个类起名叫TTimeCount,那么它的父类应该是什么呢,它要能显示出来,得有一个容量来让他显示,TPanel是个不错的选择,我看了一下源码,发觉TPanel什么也没有做,只是把它的父类TCustomPanel的属性显化出来(这个等一下讲),TCustomPanel把好多的属性声明为Protected,为他的子类提供了选择,他的子类如果要使这些属性能在对象察看器中看到,可以在Published重新声明一下,如果不想,则不用去理会他。而我们的计数器组件正好不用那么多属性,正好合适。于是我决定用TCusomPanel为父类  类建立如下: TTimeCount=class(TCustomPanel)privateprotectedpublicpublishedend;  二、确定成员,方法和属性和事件  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;beginFTimer:=TTimer.Create(self);FTimer.Enabled:=False;FTimer.Interval:=1000;FTimer.OnTimer:=FTimerTimer;end;begininherited Create(AOwner);CreateTimer;end;//析构函数,先释放时间控件,再继承父类的析构函数destructor TTimeCount.Destroy;beginFTimer.Free;inherited Destroy;end;  构造函数中还要设置该组件的外观和默认值,这里把它删去,到源代码再贴出来。  其中  FTimerTimer;是很重要的函数,在该类中有声明: procedure FTimerTimer(Sender:Tobject);//时间控件的事件处理函数  在这个处理函数中,实现了计数值的递增并显示到容器中,此外,还在判断类的时间事件是否有足够条件触发了,如果有则调用DoTimeOut;过程,这个就是事件的调度函数啦: //事件调度函数,将外部的事件处理函数和该类的事件方法指针联系起来procedure TTimeCount.DoTimeOut;beginif Assigned(FTimeOut) thenFTimeOut(Self);end;  而属性则是根据私有成员来设定了: publicproperty Count:Integer read FCount default 0; //计数值的只读属性,这个属性不能声明在Published中,因为它是只读的,只在程序运行时通过它来得到计数值。publishedproperty Interval:TInterval read FInterval write SetInterval Default TenM;property Active:boolean read FActive write SetActive default false;property OnTimeOut:TNotifyEvent read FTimeOut write FTimeOut;  此外还有几个自定义方法即 procedure pause; //暂停计数procedure Resume;//从暂停的计数开始计数。procedure stop;//停止procedure start;//开始计数  都比较简单。共2页。 1 2 : 下载本文示例代码


基于Delphi的组件设计之简单实例基于Delphi的组件设计之简单实例基于Delphi的组件设计之简单实例基于Delphi的组件设计之简单实例基于Delphi的组件设计之简单实例基于Delphi的组件设计之简单实例基于Delphi的组件设计之简单实例基于Delphi的组件设计之简单实例基于Delphi的组件设计之简单实例基于Delphi的组件设计之简单实例基于Delphi的组件设计之简单实例基于Delphi的组件设计之简单实例基于Delphi的组件设计之简单实例基于Delphi的组件设计之简单实例基于Delphi的组件设计之简单实例
阅读(114) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~