我們一開始不要新建組件單元
一
接下來給這個類起名叫TTimeCount
類建立如下
TTimeCount=class(TCustomPanel)
private
protected
public
published
end;
二
FCount; 只讀私有成員
FActive:Boolean; /確定是否發生類的時間間隔事件
FInterval:TInterval; 這個可以設置時間事件觸發間隔
TInterval=(TenM
分別表示十分鐘到六十分鐘
TimeLen
FTimeOut:TNotifyEvent;時間間隔事件的方法指針
我們要它能以秒為單位來計數
FTimer:TTimer;
這個成員對象要在類構造函數中實例化它
如下
//構造函數
constructor TTimeCount
//創建時間控件並設置相關的參數
procedure CreateTimer;
begin
FTimer:=TTimer
FTimer
FTimer
FTimer
end;
begin
inherited Create(AOwner);
CreateTimer;
end;
//析構函數
destructor TTimeCount
begin
FTimer
inherited Destroy;
end;
構造函數中還要設置該組件的外觀和默認值
其中
FTimerTimer;是很重要的函數
procedure FTimerTimer(Sender:Tobject);//時間控件的事件處理函數
在這個處理函數中
//事件調度函數
procedure TTimeCount
begin
if Assigned(FTimeOut) then
FTimeOut(Self);
end;
而屬性則是根據私有成員來設定了
public
property Count:Integer read FCount default
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;//開始計數
都比較簡單
三
TCustomPanel及其父類有好多的屬性設為Protected
以下是計數組件的源碼
unit CountUnit;
interface
uses
SysUtils
type
//用於設置時間事件發生的間隔
TInterval=(TenM
TTimeCount=class(TCustomPanel)
private
FTimer:TTimer;
FCount:integer; //只讀私有成員
FInterval:TInterval; //時間事件發生的間隔
FActive:Boolean; //決定是否發生間隔事件
TimeLen:Integer;//發生事件的時間長度
TimeNum:integer;//計數值
FTimeOut:TNotifyEvent;//事件的方法指針
procedure SetInterval(I:TInterval);
procedure SetActive(A:boolean);
procedure FTimerTimer(Sender:Tobject);//時間控件的事件處理函數
protected
procedure DoTimeOut;dynamic; //調度方法
public
procedure pause; //暫停計數
procedure Resume;//從暫停的計數開始計數
procedure stop;//停止
procedure start;//開始計數
constructor Create(AOwner:TComponent);override;
destructor Destroy;override;
property Count:Integer read FCount; //計數值的只讀屬性
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;
//顯式祖先類的一些屬性在對象察看器中
property BevelInner;
property BevelOuter;
property BevelWidth;
property Color;
property Font;
property PopupMenu;
property ShowHint;
property TabOrder;
property TabStop;
property Visible;
property OnClick;
property OnDblClick;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
end;
implementation
//構造函數
constructor TTimeCount
//創建時間控件並設置相關的參數
procedure CreateTimer;
begin
FTimer:=TTimer
FTimer
FTimer
FTimer
end;
//以下是設置外觀的
procedure setView;
begin
Width:=
Height:=
Color:=$
Font
Font
Font
BevelOuter := bvLowered ;
Caption:=
end;
begin
inherited Create(AOwner);
FCount:=
FInterval:=TenM;
FActive:=False;
TimeLen:=
TimeNum:=
CreateTimer;
setView;
end;
//析構函數
destructor TTimeCount
begin
FTimer
inherited Destroy;
end;
//設置時間事件發生間隔
procedure TTimeCount
begin
if FInterval<>I then
begin
FInterval:=I;
case FInterval of
TenM: TimeLen:=
TwentyM:TimeLen:=
ThirtyM: TimeLen:=
FortyM: TimeLen:=
FiftyM:TimeLen:=
SixtyM:TimeLen:=
end;
end;
end;
procedure TTimeCount
begin
if FActive<>A then
begin
FActive:=A;
TimeNum:=
end;
end;
procedure TTimeCount
begin
if FTimer
FTimer
end;
procedure TTimeCount
begin
if not FTimer
FTimer
end;
procedure TTimeCount
begin
FTimer
FCoun
From:http://tw.wingwit.com/Article/program/Delphi/201311/24697.html