Delphi NetClock程序,從互聯網校准Windows系統時間,實現了從互聯網得到時間然後修改系統時間的功能。通過本例,讀者可以掌握TidTime控件的基本用法和如何察看控件函數的實現。主要是利用TIdTimeImage控件從互聯網獲取標准時間,調用SetLocalTime()函數校對系統時間。
一、運行截圖:
二、實現思路:
1.啟動Delphi,建立一個標准的項目。
2.添加控件:(1)添加TIdTime控件:本例使用了TIdTime控件SStab,在該控件不是一個常用控件,我們需要在組件頁的Indy ClIEnts頁找到這個控件。
(2)添加其他控件:一個Tedit控件用於修改獲取網絡時間的網址,若干標簽用來顯示信息,若干按鈕用於執行操作。調整好他們的大小和位置,並修改控件相應屬性,如圖所示。
3、編寫代碼:
(1)獲取時間:我們需要獲取系統時間和網絡時間,其中系統時間我們只需要用now函數就可以得到,然後利用DateTimeToStr()函數將它轉換為字符串格式賦值給Label1就行了。
網絡時間我們可以利用TidTime控件的DateTime屬性直接得到,不過在使用TidTime的那個屬性前我們必須告訴它獲取時間的網絡地址,即Edit1提供的網址。此按鈕的完整代碼如下:
1
procedure
TForm1
.
Button1Click(Sender: TObject);
2
begin
3
IdTime1
.
Host:=Edit1
.
Text;
4
Label2
.
Caption:=
'網絡時間:'
+DatetimeToStr(IdTime1
.
DateTime);
5
Label1
.
Caption:=
'系統時間:'
+DatetimeToStr(now);
6
end
;
(2)校對時間:這裡利用TidTime的SyncTime方法既可輕松完成。此按鈕的完整代碼如下:
1
procedure
TForm1
.
Button2Click(Sender: TObject);
2
begin
3
IdTime1
.
SyncTime;
4
end
;
(3)關閉程序:直接使用Delphi窗體的Close方法即可。此按鈕得完整代碼如下:
1
procedure
TForm1
.
Button2Click(Sender: TObject);
2
begin
3
IdTime1
.
SyncTime;
4
end
;
5
procedure
TForm1
.
Button3Click(Sender: TObject);
6
begin
7
Close;
8
end
;
三、完整代碼:
01
unit
Unit1;
02
interface
03
uses
04
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
05
Dialogs, IDBaseComponent, IdComponent, IdTCPConnection, IdTCPClIEnt,
06
IdTime, StdCtrls, ExtCtrls;
07
type
08
TForm1 =
class
(TForm)
09
IdTime1: TIdTime;
10
Button1: TButton;
11
Button2: TButton;
12
Panel1: TPanel;
13
Label1: TLabel;
14
Label2: TLabel;
15
Button3: TButton;
16
Label3: TLabel;
17
Edit1: TEdit;
18
procedure
Button1Click(Sender: TObject);
19
procedure
Button2Click(Sender: TObject);
20
procedure
Button3Click(Sender: TObject);
21
private
22
{ Private declarations }
23
public
24
{ Public declarations }
25
end
;
26
var
27
Form1: TForm1;
28
implementation
29
{$R *.dfm}
30
procedure
TForm1
.
Button1Click(Sender: TObject);
31
begin
32
IdTime1
.
Host:=Edit1
.
Text;
33
Label2
.
Caption:=
'網絡時間:'
+DatetimeToStr(IdTime1
.
DateTime);
34
Label1
.
Caption:=
'系統時間:'
+DatetimeToStr(now);
35
end
;
36
procedure
TForm1
.
Button2Click(Sender: TObject);
37
begin
38
IdTime1
.
SyncTime;
39
end
;
40
procedure
TForm1
.
Button3Click(Sender: TObject);
41
begin
42
Close;
43
end
;
44
end
.
四、編程小結:本程序涉及到對系統時間的修改,網絡時間的獲取,所有核心代碼均用控件的屬性和方法實現,看上去好像非常簡單,實際上我們要學的並不是這些簡單的控件使用方法,而是希望掌握一種學習別人控件的方法,例如我們看到校對時間就是一個SyncTime方法就可以實現,而如果我們用鍵盤Crtl+鼠標左鍵點開SyncTime函數,我們可以看到如下的代碼:
01
function
TIdTime
.
SyncTime:
Boolean
;
02
var
03
LBufTime: TDateTime;
04
begin
05
LBufTime := DateTime;
06
Result := LBufTime <>
0
;
07
if
Result
then
begin
08
Result := SetLocalTime(LBufTime);
09
end
;
10
end
;
其中SetLocalTime才是真正起作用的WinAPI函數。這種方法在很多場合都非常有用,我們可以利用這個方法簡化函數,修改函數,學習函數。
代碼完工後可按F9執行該工程,試試看看能否正確實現程序的功能。