METTRE UNE HEURE NON LIÉE À L'HEURE DE VOTRE PC

Uvatha Messages postés 34 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 17 mai 2007 - 21 août 2003 à 09:41
Uvatha Messages postés 34 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 17 mai 2007 - 21 août 2003 à 19:39
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/8300-mettre-une-heure-non-liee-a-l-heure-de-votre-pc

Uvatha Messages postés 34 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 17 mai 2007
21 août 2003 à 19:39
Merci à tous pour vos façons de le faire... ca va m'aider a rendre la source de mon jeu un peu moins bordel!!! la jai pas le temps de tester aucune de vos méthodes mais je vais le faire puisqu'elles ont l'air de marché et qu'elles sont pas mal moins longues.
cs_neria Messages postés 319 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 16 février 2009
21 août 2003 à 15:56
Salut EBArtSoft !

C'est pas que j'aime pas les commandes internes, mais parfois elles font des choses que l'on n'attend pas d'elle, et puis il est plus facile de déboguer son propre algorithme qu'une commande interne ou qu'un API. Sans racune !

@+
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
21 août 2003 à 15:07
Je remet les \ qui avaient disparus (fait main aussi ... lol) !

Private Declare Function GetTickCount Lib "kernel32" () As Long

Private Sub Command1_Click()
Dim Last As Long
Dim Counter As Long
Last = GetTickCount
Do
Counter = (GetTickCount - Last) 1000
Caption = Format((Counter \ 3600), "00") & ":" & Format((Counter \ 60) Mod 60, "00") & ":" & Format(Counter Mod 60, "00")
DoEvents
Loop
End Sub

@+
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
21 août 2003 à 15:04
>Neria

C'est vrais tu a raison j'ai mis // a la place des \ ce qui incremente a 30 au lieu de 60 ... (l'erreur est humaine ! lol)

Cela dit lorsque que tu programme qlq chose il vaus mieu avoir confiance au commande interne ou bien dans le cas contraire
change de language de prog... lol

Mais puisque que tu prefere une autre methode en voila une :

Private Declare Function GetTickCount Lib "kernel32" () As Long

Private Sub Command1_Click()
Dim Last As Long
Dim Counter As Long
Last = GetTickCount
Do
Counter = (GetTickCount - Last) 1000
Caption = Format((Counter 3600), "00") & ":" & Format((Counter 60) Mod 60, "00") & ":" & Format(Counter Mod 60, "00")
DoEvents
Loop
End Sub

@+
cs_neria Messages postés 319 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 16 février 2009
21 août 2003 à 14:07
Salut !

Evidement quand on choisit de faire confiance aux commandes internes...
Bref j'ai testé ton système ( je n'ai jamais utilisé format ) : PROBLEME !!!
Il incremente les heures quand il est la demi et non quand on arrive à 60 !!!!
Bref mon algo fait main est archaïque mais fiable !!!

@+
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
21 août 2003 à 13:55
Bonjour,

je propose :

(timer1.interval=1000)

Private Sub Timer1_Timer()
Static Counter As Long
Counter = Counter + 1
Caption = Format((Counter / 3600), "00") & ":" & Format((Counter / 60) Mod 60, "00") & ":" & Format(Counter Mod 60, "00")
End Sub

@+
cs_neria Messages postés 319 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 16 février 2009
21 août 2003 à 10:15
Salut !
J'ai regardé ta source, c'est le bordel !
On peut faire beaucoup mieux avec un seul timer ( 1 sec ) :

Private Sub Timer1_Timer()

'Incrémente les secondes
LblSeconds.Caption = LblSeconds.Caption + 1

'Mise en forme
If LblSeconds.Caption < 10 Then LblSeconds.Caption = "0" & LblSeconds.Caption

'On passe une minute, remise à zero et mise en forme
If LblSeconds.Caption = 60 Then
lblsecondes.Caption = "00"
lsblminutes.Caption = LblMinutes.Caption + 1
If LblMinutes.Caption < 10 Then LblMinutes.Caption = "0" & LblMinutes.Caption
End If

'On passe une heure, remise à zero et mise en forme
If LblMinutes.Caption = 60 Then
LblMinutes.Caption = "00"
LblHeures.Caption = LblHeures.Caption + 1
If LblHeures.Caption < 10 Then LblHeures.Caption = "0" & LblHeures.Caption
End If

'On passe un jour, remise à zero de tout
If LblHeures.Caption = 24 Then
lblsecondes.Caption = "00"
LblMinutes.Caption = "00"
LblHeures.Caption = "00"
End If

End Sub

Mais tu peut aussi mettre trois variables et afficher le tout dans un seul label !
tu noteras qu'il y a des commentaires !!! Même si ça parait facile il est necessaire de mettre des commentaires !!!

@+


PS : Envoie moi une capture de ton jeu !
CAD9757 Messages postés 74 Date d'inscription dimanche 17 août 2003 Statut Membre Dernière intervention 27 mars 2004
21 août 2003 à 09:59
Si tu veux faire un truc précis, fuis les timers comme la peste !
Sers toi de la fonction API gettickcount() (précis à la milliseconde) puis convertis la diiférence entre le temps actuel et le temps de réf en hh:mm:ss. Pour les 0 devant : instruction format
Uvatha Messages postés 34 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 17 mai 2007
21 août 2003 à 09:41
Je vais ajouter la date en plus demain... la jmen vais mcoucher.. :P
Dites-moi ce que vous en pensez... et si il y a une facon plus vite, jaimerais le savoir pcq cé chian de faire ces copiers collers pour pas ke vb mette les 9 premiers chiffres tu seul, pour kil mette un 0 avant...
Rejoignez-nous