程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi NetClock從互聯網校對系統時間

Delphi NetClock從互聯網校對系統時間

編輯:Delphi

Delphi NetClock程序,從互聯網校准Windows系統時間,實現了從互聯網得到時間然後修改系統時間的功能。通過本例,讀者可以掌握TidTime控件的基本用法和如何察看控件函數的實現。主要是利用TIdTimeImage控件從互聯網獲取標准時間,調用SetLocalTime()函數校對系統時間。

一、運行截圖:

Delphi 校准系統時間

二、實現思路:

1.啟動Delphi,建立一個標准的項目。

2.添加控件:(1)添加TIdTime控件:本例使用了TIdTime控件SStab,在該控件不是一個常用控件,我們需要在組件頁的Indy ClIEnts頁找到這個控件。

添加TIdTime控件

(2)添加其他控件:一個Tedit控件用於修改獲取網絡時間的網址,若干標簽用來顯示信息,若干按鈕用於執行操作。調整好他們的大小和位置,並修改控件相應屬性,如圖所示。

添加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執行該工程,試試看看能否正確實現程序的功能。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved