Un programme ridiculement simple par rapport au service qu'il rend !
Se connecte à des serveurs de temps de type strate2 ( liste sur
http://www.cru.fr/services/ntp/serveurs_francais ) et vous retourne la date et l'heure d'une horloge atomique.
Vous permet également de synchroniser votre PC avec l'heure atomique.
Projet basé sur le super article suivant :
ftp://ftp-developpez.com/svaillant/delphi_datetime/svaillant-datetime.pdf
Source / Exemple :
Version : 1.0.3
Date : 08 Mars 2010
Micro Projet 03 - On utilise un composant Indy (TidSNTP) pour se connecter à un
serveur de temps de type strate 2 pour récupérer la date et l'heure provenant
d'une horloge atomique. Le composant bug dans les versions 6 et moins de Delphi,
pour y remédier il faut avoir au moins la version 9.0 des composants Indy. Il
faut avoir les droits d'administrateur pour changer l'heure et la date du PC.
===============================================================================}
unit f_main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient,
IdSNTP, ExtCtrls;
type
TTimeServ = class(TForm)
SNTP: TIdSNTP;
ListeServeur: TListBox;
ServeurNameBox: TGroupBox;
LabServeur: TLabel;
LocalBox: TGroupBox;
LabDateLocale: TLabel;
LabHeureLocale: TLabel;
ServeurBox: TGroupBox;
LabDateServeur: TLabel;
LabHeureServeur: TLabel;
BtnSysTime: TButton;
Timer: TTimer;
procedure FormCreate(Sender: TObject);
procedure ListeServeurClick(Sender: TObject);
procedure TimerTimer(Sender: TObject);
procedure BtnSysTimeClick(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
var
TimeServ: TTimeServ;
implementation
{$R *.dfm}
{$R 'Resources\UAC_Manifest.RES'} // Pour avoir les droits d'administrateur
procedure TTimeServ.ListeServeurClick(Sender: TObject);
begin
// On affiche le nom du serveur sélectionné
LabServeur.Caption := ListeServeur.Items[ListeServeur.ItemIndex];
// On déclare le nom du serveur au composant TidSNTP
SNTP.Host := ListeServeur.Items[ListeServeur.ItemIndex];
end;
// Interval = 100 donc on va exécuter cette routine 10 fois par seconde
procedure TTimeServ.TimerTimer(Sender: TObject);
var Date1 : TDateTime;
begin
// L'instant présent
Date1 := Now;
// On affiche la date locale
LabDateLocale.Caption := DateToStr(Date1);
// On affiche l'heure locale
LabHeureLocale.Caption := TimeToStr(Date1);
// On affiche la date du serveur de temps
LabDateServeur.Caption := DateToStr(SNTP.DateTime);
// On affiche l'heure du serveur de temps
LabHeureServeur.Caption := TimeToStr(SNTP.DateTime);
end;
procedure TTimeServ.BtnSysTimeClick(Sender: TObject);
var SysTime : TSystemTime;
begin
// On utilise une fonction interne du composant pour changer l'heure locale
SNTP.SyncTime;
end;
procedure TTimeServ.FormCreate(Sender: TObject);
begin
// Teste si "servers.txt" est présent dans le répertoire courant
if not FileExists(GetCurrentDir+'\servers.txt') then
begin
// Si le fichier n'existe pas dans notre répertoire, on le signale
ShowMessage('le fichier "servers.txt" n''est pas dans le répertoire');
// Et on met fin à l'application
Application.Terminate;
end
else
begin
// On charge la liste des serveurs depuis le répertoire courant
ListeServeur.Items.LoadFromFile(GetCurrentDir+'\servers.txt');
// On sélectionne le premier serveur de la liste
ListeServeur.ItemIndex := 0;
// On affiche le nom du serveur sélectionné
LabServeur.Caption := ListeServeur.Items[ListeServeur.ItemIndex];
// On déclare le nom du serveur au composant TidSNTP
SNTP.Host := ListeServeur.Items[ListeServeur.ItemIndex];
SNTP.Active := True;
end;
end;
end.
Conclusion :
Toujours à l'heure juste maintenant :)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.