工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛
您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > Delphi > 正文
基于Delphi的组件设计之简单实例
[文章信息]
作者:不详
时间:2004-09-13
出处:csdn
责任编辑:方舟
[文章导读]
这一章的重点是说明一个组件的制作全过程,在其中可以学到很多组件制作的技巧
advertisement
热点推荐
· 真没想到VB也可以这样用之指针技术
· 禁止QQ登录的方法
· 给你的XML文件做个数字签名
· ImageReady制作“焰火”小动画
· Java加密和数字签名编程快速入门
[正文]

1 2  下一页

  接下来要动手来做一个组件了,我想了一个计数器组件,功能方面是比较简单的,但这不是本章的重点,这一章的重点是说明一个组件的制作全过程。在其中可以学到很多组件制作的技巧,当然这些也是我从书上学得的。

  这是一个可以计数的组件,为了简单,我以秒为单位,当开始时,他就从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;

  而属性则是根据私有成员来设定了:

public
property Count:Integer read FCount default 0; //计数值的只读属性,这个属性不能声明在Published中,因为它是只读的,只在程序运行时通过它来得到计数值。
published
property 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;//开始计数

  都比较简单。


1 2  下一页

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • 基于Delphi的组件设计之概念
  • 浅述Delphi下的OpenGL图形开发
  • 深入理解Delphi的消息机制
  • Delphi处理SQL Server多媒体数据
  • Delphi中为RichEdit加入链接
  • 民营家电商排队造手机 设备商全面杀入
  • 英特尔澄清杨旭任职传闻 官方没宣布此消息
  • 国资委河北密制联通拆分方案
  • 垃圾邮件害人害企害国 清除垃圾邮件不手软
  • 中兴携手阿尔卡特 全球逐鹿CDMA
  • 用友总裁王文京:誓将ERP变成“大众消费”
  • 香港消费者委员会:数码相机最贵未必最好
  • 外电称中兴正评估西门子手机业务 或能并购
  • Advertisement

    天极无线


    奇妙科幻|美好风光|清风车影|漫画卡通|星座生肖|明星写真|动物世界
    老鼠爱大米
    挥着翅膀的女孩
    女人味
    栀子花开
    白月光
    刚刚好
    江南
    快乐崇拜
    亲爱的你怎么不在我身边
    小薇
    2002年的第一场雪
    有多少爱可以重来
    我的地盘
    七里香
    情人
     
    老鼠爱大米 老板电话
    冲动的惩罚 七里香
    我不是黄蓉 女生撒娇
    盛夏的果实 坚持到底
    孤单北半球 眉飞色舞
    挪威的森林 可爱女人
    最浪漫的事 老板电话

    CSEEK搜索