从互联网校对系统时间
【程序说明】
本程序实现了从互联网得到时间然后修改系统时间的功能。通过本例,读者可以掌握TidTime控件的基本用法和如何察看控件函数的实现。
程序运行效果如图所示。
图201
【编程思路】
实例利用TIdTimeImage控件从互联网获取标准时间,调用SetLocalTime()函数校对系统时间。
【编程步骤】
1.启动DELPHI,建立一个标准的项目。
2.添加控件:
(1)添加TIdTime控件:本例使用了TIdTime控件SStab,在该控件不是一个常用控件,我们需要在组件页的Indy Clients页找到这个控件。
图202
(2)添加其他控件:
一个Tedit控件用于修改获取网络时间的网址,若干标签用来显示信息,若干按钮用于执行操作。调整好他们的大小和位置,如图所示。
图203
1.按下表修改控件属性:
控件名称 | 对象名称 | 控件属性 | 设置值 |
TButton | Button1 | Caption | 获取时间(&G) |
Button2 | Caption | 校对时间(&A) | |
Button3 | Caption | 退出程序(&X) | |
TEdit | Edit1 | Text | clock.psu.edu |
Tlabel | Label1 | Caption | 网络地址: |
2.编写代码:
(1)获取时间:
我们需要获取系统时间和网络时间,其中系统时间我们只需要用now函数就可以得到,然后利用DateTimeToStr()函数将它转换为字符串格式赋值给Label1就行了。
网络时间我们可以利用TidTime控件的DateTime属性直接得到,不过在使用TidTime的那个属性前我们必须告诉它获取时间的网络地址,即Edit1提供的网址。
此按钮的完整代码如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
IdTime1.Host:=Edit1.Text;
Label2.Caption:='网络时间:'+DatetimeToStr(IdTime1.DateTime);
Label1.Caption:='系统时间:'+DatetimeToStr(now);
end;
(2)校对时间:
这里利用TidTime的SyncTime方法既可轻松完成。
此按钮的完整代码如下:
procedure TForm1.Button2Click(Sender: TObject);
begin
IdTime1.SyncTime;
end;
(3)关闭程序:
直接使用DELPHI窗体的Close方法即可。
此按钮得完整代码如下:
procedure TForm1.Button3Click(Sender: TObject);
begin
Close;
end;
3.代码编写完毕,按F9执行该工程,试试看看能否正确实现程序的功能。
【程序小结】
本程序涉及到对系统时间的修改,网络时间的获取,所有核心代码均用控件的属性和方法实现,看上去好像非常简单,实际上我们要学的并不是这些简单的控件使用方法,而是希望掌握一种学习别人控件的方法,例如我们看到校对时间就是一个SyncTime方法就可以实现,而如果我们用键盘Crtl+鼠标左键点开SyncTime函数,我们可以看到如下的代码:
function TIdTime.SyncTime: Boolean;
var
LBufTime:TDateTime;
begin
LBufTime:= DateTime;
Result :=LBufTime <> 0;
if Resultthen begin
Result := SetLocalTime(LBufTime);
end;
end;
其中SetLocalTime才是真正起作用的WinAPI函数。这种方法在很多场合都非常有用,我们可以利用这个方法简化函数,修改函数,学习函数。
Download by http://www.codefans.net