unit SystemTime;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics,Controls, Forms, Dialogs, StdCtrls,ExtCtrls;
type
TSysTime = class(TObject)
private
//系统日期、时间
FStartDateTime : TDateTime;
// 定时器
FTimer : TTimer;
// 流逝时间变量
FElapsedTime : Integer;
procedure Timer(Sender: TObject);
protected
public
constructor Create; virtual;
destructor Destroy; override;
procedure SetNewTime(NewTime :TSystemTime);
procedure ResetTime;
end;
implementation
//构造器
constructor TSysTime.Create;
begin
//保存当前日期、时间
FStartDateTime := Now;
//生成定时器对象
FTimer := TTimer.Create(nil);
// 设定时钟间隔为一秒
FTimer.Interval := 1000;
//时钟事件
FTimer.OnTimer := Timer;
// 开始记时
FTimer.Enabled := True;
end;
//设定系统新时间
procedure TSysTime.SetNewTime(NewTime :
TSystemTime);
begin
SetLocalTime(NewTime);
end;
//流逝时间
procedure TSysTime.Timer(Sender: TObject);
begin
// 保存流逝的时间(以秒为单位),每秒加1
Inc(FElapsedTime);
end;
//恢复系统时钟
procedure TSysTime.ResetTime;
var
NewTime : TSystemTime;
tmTemp : Double;
dtTemp : TDateTime;
begin
//将流逝的时间转换为天数
tmTemp := FElapsedTime/86400;
//将流逝的时间加到原来的时间上
dtTemp := FStartDateTime + tmTemp;
//转换为Windows 32位时间格式
DateTimeToSystemTime(dtTemp, NewTime);
//设定时间
SetLocalTime(NewTime);
end;
//释放
destructor TSysTime.Destroy;
begin
//恢复系统时钟
ResetTime;
// 记时器停止
FTimer.Enabled := False;
// 释放时钟对象
FTimer.Free;
end;
end.