(接上文)
组件的代码由于假设你已经熟悉delphi开发(它和一般开发没什么不同),我们就直接贴出来并加上适当的注释:
unit Clock;
interface
uses
SysUtils, Classes, Controls, StdCtrls,ExtCtrls;
type
TState=(StClock,StRunClock,StBackClock);//定义枚举类表示控件的3种状态:时钟、跑表、倒计时钟
TClock = class(TCustomLabel)
private
fState:TState;
fTimer:TTimer;//为什么使用这个组件作为我们组件的私有成员就不用说了吧
RCD:array[1..8] of integer;//跑表中的各个数位。
fBeginTime:string;//到计时时的开始时钟,之所以没用TTime类型是为了在后面演示属性编辑器
fWakeTime:string;//闹钟时间,出于和上面同样的理由
fAllowWake:boolean;//是否开启闹钟功能
fOnWakeUp:TNotifyEvent;//为了使组件更加完美,我们允许组件用户能够响应闹钟到来时的时件
fOnTimeUp:TNotifyEvent;//同上能够响应倒计时种完成时的事件,我们将发布这两个事件
function GetActive:boolean;//控制Timer是否工作以控制3种状态的钟是否工作
procedure SetActive(Value:boolean);
procedure SetState(Value:TState);
procedure SetBeginTime(Value:string);
procedure SetWakeTime(Value:string);
protected
procedure WalkClock(sender:TObject);//作为时钟时走种的事件
procedure RunClock(sender:TObject); //跑表
procedure BackClock(sender:TObject);//倒计时
public
constructor Create(AOwner:TComponent);override;//完成一些初始化工作
procedure ReSetRunClock; //跑表和倒计时都需要一个复位方法给组件使用者调用
procedure ReSetBackClock;
published
property State:TState read fState write SetState default StClock;//默认为时钟状态
property Active:boolean read GetActive write SetActive;//控制3种状态的钟是否工作
property BeginTime:string read fBeginTime write SetBeginTime;
property WakeTime:string read fWakeTime write SetWakeTime;
property AllowWake:boolean read fAllowWake write fAllowWake;
property OnWakeUp:TNotifyEvent read fOnWakeUp write fOnWakeUp;
property OnTimeUp:TNotifyEvent read fOnTimeUp write fOnTimeUp;
//最后我们再发布一些被TCustomLabel所隐藏而我们又需要的属性
property Align;
property Alignment;
property Color;
property Font;
property ParentColor;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowHint;
&n