📄 main.pas
字号:
unit Main;
interface
uses
Windows, SysUtils, Classes, Controls, Forms, StdCtrls, ExtCtrls,
IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdDayTime;
type
TMainFrm = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
lbCurZone: TLabel;
lbCurTime: TLabel;
lbNetTime: TLabel;
Timer1: TTimer;
Panel1: TPanel;
cmdTime: TButton;
cmdSync: TButton;
cmdExit: TButton;
IdDayTime1: TIdDayTime;
Label4: TLabel;
cbbTimeSvr: TComboBox;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure cmdTimeClick(Sender: TObject);
procedure cmdExitClick(Sender: TObject);
private
{ Private declarations }
hBias: Integer;
mBias: Integer;
function ShowMsg(sMsg: String; Btns: LongInt = mb_Ok+mb_IconError): Integer;
public
{ Public declarations }
end;
var
MainFrm: TMainFrm;
implementation
{$R *.dfm}
{$I TimeSvrs.inc}
procedure TMainFrm.FormCreate(Sender: TObject);
var
i: Integer;
tzInfo: Time_Zone_Information;
begin
Application.Title:=Caption;
GetTimeZoneInformation(tzInfo);
//获取当地时区和格林威治的时间差
hBias:=tzInfo.Bias div 60;
mBias:=tzInfo.Bias mod 60;
//显示当地时区
lbCurZone.Caption:=Trim(tzInfo.DaylightName);
//显示当前时间
lbCurTime.Caption:=FormatDateTime('yyyy-mm-dd hh:nn:ss.zzz',Now);
//初始化时间服务器列表
for i:=0 to Length(ATimeSvr)-1 do cbbTimeSvr.Items.Append(ATimeSvr[i].Host);
end;
procedure TMainFrm.FormDestroy(Sender: TObject);
begin
//
end;
procedure TMainFrm.FormShow(Sender: TObject);
begin
//
end;
procedure TMainFrm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//
end;
function TMainFrm.ShowMsg(sMsg: String; Btns: LongInt = mb_Ok+mb_IconError): Integer;
begin
Result:=Application.MessageBox(PChar(sMsg),PChar(Caption),Btns);
end;
procedure TMainFrm.cmdTimeClick(Sender: TObject);
var
TimeStr: String;
SysTime: TSystemTime;
begin
//服务器地址简单判断
if Length(cbbTimeSvr.Text)<=5 then
begin
ShowMsg('互联网时间服务器无效,请重新输入或选择一个!');
cbbTimeSvr.SetFocus;
Exit;
end;
//从时间服务器获取时间
cmdTime.Enabled:=false;
cmdSync.Enabled:=false;
try
IdDayTime1.Host:=cbbTimeSvr.Text;
TimeStr:=Trim(IdDayTime1.DayTimeStr);
SysTime.wYear:=StrToInt(Copy(TimeStr,7,2));
SysTime.wMonth:=StrToInt(Copy(TimeStr,10,2));
SysTime.wDay:=StrToInt(Copy(TimeStr,13,2));
SysTime.wHour:=StrToInt(Copy(TimeStr,16,2));
SysTime.wMinute:=StrToInt(Copy(TimeStr,19,2));
SysTime.wSecond:=StrToInt(Copy(TimeStr,22,2));
SysTime.wMilliseconds:=StrToInt(Copy(TimeStr,32,3));
except
cmdTime.Enabled:=true;
cmdSync.Enabled:=true;
ShowMsg(Format('从时间服务器"%s"获取时间失败!',[cbbTimeSvr.Text]));
Exit;
end;
//对获取的时间进行修正
SysTime.wYear:=SysTime.wYear+2000;
SysTime.wHour:=SysTime.wHour-hBias;
SysTime.wMinute:=SysTime.wMinute-mBias;
//显示当前和互联网当前时间
lbCurTime.Caption:=FormatDateTime('yyyy-mm-dd hh:nn:ss.zzz',Now);
lbNetTime.Caption:=FormatDateTime('yyyy-mm-dd hh:nn:ss.zzz',SystemTimeToDateTime(SysTime));
//如果是cmdSync则进行本机时间同步
if (Sender=cmdSync) then
begin
SetLocalTime(SysTime);
lbCurTime.Caption:=FormatDateTime('yyyy-mm-dd hh:nn:ss.zzz',Now);
ShowMsg(Format('从时间服务器"%s"同步时间成功!',[cbbTimeSvr.Text]),mb_Ok+mb_IconInformation);
end;
cmdTime.Enabled:=true;
cmdSync.Enabled:=true;
end;
procedure TMainFrm.cmdExitClick(Sender: TObject);
begin
Close;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -