Basé sur le Timer Windoz, qui a la mauvaise particularité de compter jusqu'à 86399 secondes puis se remettre à 0 à minuit, la petite application réalisée ici permet de conserver sa précision à 1ms près (rafraîchissement du timer VB) tout en étendant le temps de comptage à 1.7E+308 secondes ou kek'choz kom'ça... En outre, l'appli' renvoie la valeur Double en Public, afin que ce "super timer" bateau puisse être exploité.
Source / Exemple :
Dim consigneTimer As Double 'valeur de départ du Timer
Dim minuit As Boolean 'détection du passage à minuit
Dim minuitOK As Boolean 'validation du premier passage à minuit
Dim jours As Integer 'nombre de jours implémentés
'Activation et désactivation du supertimer
Private Sub depart_Click()
If depart.Caption = "Go !" Then
Timer1.Enabled = True
depart.Caption = "Stop"
Else
Timer1.Enabled = False
depart.Caption = "Go !"
End If
End Sub
'initialisation des variables
Private Sub Form_Load()
consigneTimer = Timer
minuit = False
minuitOK = False
jours = 0
End Sub
'réinitialisation des variables
Private Sub raz_Click()
consigneTimer = Timer
minuit = False
minuitOK = False
jours = 0
afficher.Caption = "0"
afficherJours.Caption = "0"
afficherTimer.Caption = CStr(Timer)
End Sub
'rafraîchissement de la fonction superTimer et de l'affichage
Private Sub Timer1_Timer()
superTimer
afficher.Caption = CStr(Round(superTimer, 2))
afficherTimer.Caption = CStr(Timer)
afficherJours.Caption = CStr(jours)
End Sub
'Calculs du supertimer en fonction de la valeur de consigne,
'du premier passage à minuit et du nombre de jours
Public Function superTimer() As Double
'On détecte que l'on s'apprète à passer à minuit
If Timer > 86398 Then minuit = True
'On vient de passer minuit pour la première fois
If (minuit = True) And (Timer < 1) And (jours = 0) And (minuitOK = False) Then
'On observera la valeur opposée à celle de consigne désormais...
consigneTimer = 86400 - consigneTimer
'On se prépare déjà pour le prochain passage à minuit
minuit = False
'On garde "à l'esprit" que l'on a déjà passé minuit une première fois...
minuitOK = True
End If
'On vient de passer minuit une seconde fois ou au-delà
If (minuitOK = True) And (minuit = True) And (Timer < 1) Then
'On incrémente le nombre de jours de fonctionnement du supertimer
'ce nombre de jours est considéré sur les passages à minuit,
'et non pas sur les passages du Timer à la valeur de consigne...
jours = jours + 1
'On se prépare pour le prochain passage à minuit
minuit = False
End If
'On n'a pas encore passé minuit une seule fois...
If minuitOK = False Then
'On considère alors l'écart entre le Timer et la valeur de consigne...
superTimer = Timer - consigneTimer
'On a déjà passé minuit une ou plusieurs fois...
Else
'On considère la consigne recalculée + le timer
' + le nombre de secondes par jours déjà passés
superTimer = consigneTimer + Timer + (86400 * jours)
End If
End Function
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.