Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Delphi > Débutant
Débutant Pour bien débuter avec Delphi
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 17/12/2012, 15h14   #1
gillou026
Invité de passage
 
Inscription : mars 2006
Messages : 33
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 33
Points : 3
Points : 3
Par défaut Synchroniser l'heure du PC avec une pendule externe

Bonjour

Dans une application, j'ai besoin de pouvoir régler l'heure de mon PC de façon à ce qu'elle soit synchro (au moins pendant quelques heures) avec une horloge HH:MM:SS externe.

Je veux que les secondes soient parfaitement synchro (enfin à 50 ms près ... c'est suffisant).

En gros sur mon appli j'ai l'horloge qui s'affiche en temps réel HH:MM:SS et 2 boutons "+50ms" et "-50ms" qui doivent agir sur les secondes du PC.

Je me met en face la pendule de référence (une pendule radio pilotée par exemple) et je clique sur + ou - de façon à ajuster l'heure du PC jusqu'à ce que visuellement le changement se fasse en même temps.

Lire et afficher l'heure sur la form : je sais faire.

Par contre ajouter ou enlever mes 50 ms et aller l'écrire dans l'horloge : Là j'ai besoin de vous .... je ne sais pas faire ....

Quelqu'un pour m'aider ???

gillou026 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2012, 15h28   #2
Andnotor
Rédacteur/Modérateur
 
Avatar de Andnotor
 
Inscription : septembre 2008
Messages : 2 856
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 2 856
Points : 5 970
Points : 5 970
SetLocalTime, mais pourquoi ne pas utiliser un serveur NTP ? Pas de connexion Internet ?
__________________
Mes tutoriels Delphi
Andnotor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2012, 15h43   #3
gillou026
Invité de passage
 
Inscription : mars 2006
Messages : 33
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 33
Points : 3
Points : 3
Le PC peut être en pleine nature sans connexion internet effectivement ...

Et puis l'horloge avec laquelle je veux me synchroniser n'est peut être pas à l'heure d'internet ....

Merci pour la réponse ...

Je vais regarder ça.

gillou026 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2012, 16h03   #4
gillou026
Invité de passage
 
Inscription : mars 2006
Messages : 33
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 33
Points : 3
Points : 3
Heuuuu je viens de jeter un coup d'oeil mais ça m'aide pas vraiment ...

Comme j'intègre ça dans mon appli ????

C'est sous Delphi 6 ...
gillou026 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 17/12/2012, 16h31   #5
tourlourou
Modérateur
 
Homme Yves Lemaire
Biologiste ; Progr(amateur)
Inscription : mars 2005
Messages : 1 676
Détails du profil
Informations personnelles :
Nom : Homme Yves Lemaire
Âge : 50
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Biologiste ; Progr(amateur)

Informations forums :
Inscription : mars 2005
Messages : 1 676
Points : 3 067
Points : 3 067
Regarde peut-être du côté de DecodeTime/EncodeTime ?
__________________
Delphi 5 Pro / Win 98 PE - Code Typhon 2.80 64 Bits / Win 7 - Code Typhon 2.70 64 Bits / Ubuntu 12.04
tourlourou est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2012, 16h38   #6
ShaiLeTroll
Expert Confirmé Sénior
 
Avatar de ShaiLeTroll
 
Homme
Développeur C++\Delphi
Inscription : juillet 2006
Messages : 9 172
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Développeur C++\Delphi
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juillet 2006
Messages : 9 172
Points : 13 204
Points : 13 204
et DateTimeToSystemTime

Voir ce code par exemple : ...change the system time by Thomas Stutz

Utilise un TDateTimePicker pour fournir le paramètre TDateTime

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
{
  For Windows 9X/ME/NT/2000/XP:
 
  The SetLocalTime function fails if the calling process does not have
  the SE_SYSTEMTIME_NAME privilege. This privilege is disabled by default.
  Use the AdjustTokenPrivileges function to enable this privilege.
}
 
function SetPCSystemTime(dDateTime: TDateTime): Boolean;
const
  SE_SYSTEMTIME_NAME = 'SeSystemtimePrivilege';
var
  hToken: THandle;
  ReturnLength: DWORD;
  tkp, PrevTokenPriv: TTokenPrivileges;
  luid: TLargeInteger;
  dSysTime: TSystemTime;
begin
  Result := False;
  if (Win32Platform = VER_PLATFORM_WIN32_NT) then
  begin
    if OpenProcessToken(GetCurrentProcess,
      TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
    begin
      try
        if not LookupPrivilegeValue(nil, SE_SYSTEMTIME_NAME, luid) then Exit;
        tkp.PrivilegeCount := 1;
        tkp.Privileges[0].luid := luid;
        tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
        if not AdjustTokenPrivileges(hToken, False, tkp, SizeOf(TTOKENPRIVILEGES),
          PrevTokenPriv, ReturnLength) then
          Exit;
        if (GetLastError <> ERROR_SUCCESS) then
        begin
          raise Exception.Create(SysErrorMessage(GetLastError));
          Exit;
        end;
      finally
        CloseHandle(hToken);
      end;
    end;
  end;
  DateTimeToSystemTime(dDateTime, dSysTime);
  Result := Windows.SetLocalTime(dSysTime);
end;
__________________
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !

L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Halte à la ségrégation des Cinémas, VO sur Paris, VF en Banlieue, Abonnement résilié !
ShaiLeTroll est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2012, 16h44   #7
gillou026
Invité de passage
 
Inscription : mars 2006
Messages : 33
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 33
Points : 3
Points : 3
je viens de trouver un truc qui devait me dépanner ...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
var
  Form1: TForm1;
  t:_SYSTEMTIME;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 
       GetSystemTime(t);
       label1.caption := inttostr(t.wHour);
       label2.caption := inttostr(t.wMinute);
       label3.caption := inttostr(t.wSecond);
       t.wYear:= 2012;
       t.wMonth:= 12;
       t.wDay:= 17;
       t.wHour:= 16;
       t.wMinute:= 40;
       t.wSecond:= 30;
       t.wMilliseconds := 500;
       SetSystemTime(t);
end;
 
end.
Avec ça on peut aller écrire direct dans l'horloge du PC. J'ai plus qu'à faire une boucle pour attendre que les ms du PC soient à 500 et en fonction du bouton sur lequel j'ai appuyé (+ ou -), j'ajoute ou enlève 50ms.

Je vais tester ...
gillou026 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 09h49   #8
gillou026
Invité de passage
 
Inscription : mars 2006
Messages : 33
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 33
Points : 3
Points : 3
Bon effectivement ça marche super bien ....

Voici juste un extrait de code pour régler (ajouter) une minute. C'est pareil pour régler le reste.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
var
  Form1: TForm1;
  tampon : word;
  t:_SYSTEMTIME;
 
////////////////////////////////////////////////////////////////////
procedure TForm1.ajouter_minuteClick(Sender: TObject);
begin
        GetSystemTime(t);
        tampon := t.wMinute;
        tampon := tampon + 1;
        if (tampon >= 60) then
        begin
            tampon := 0;
        end;
        t.wMinute := tampon;
        SetSystemTime(t);
end;
gillou026 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h43.


 
 
 
 
Partenaires

Hébergement Web