Horloge binaire

Description

Une petite horloge binaire pas si facile à lire que ça mais qui se distingue par un code source particulièrement compact.

Source / Exemple :


Private Sub Command1_Click()
'Afficher ou masquer le poids des bits et l'heure décimale.
'Les 9 contrôles "Label" forment un groupe et sont indexés de 1 à 9.
'Fonctionne comme un switch True-False : propriété Visible = Not (propriété Visible)
Dim i As Integer

For i = 1 To 9
  txtTime(i).Visible = Not (txtTime(i).Visible)
Next i

End Sub

Private Sub Form_Load()
'Définit l'intervalle du contrôle Timer pour afficher l'heure au démarrage (= 1/1000ème seconde)
Timer1.Interval = 1
'Définit l'intervalle du contrôle Timer une fois l'horloge lancée (= 1 seconde)
Timer1.Interval = 1000

End Sub

Private Sub Timer1_Timer()
Dim i As Integer

'On renseigne les 3 labels qui affichent l'heure décimale.
txtTime(1).Caption = Hour(Now)
txtTime(2).Caption = Minute(Now)
txtTime(3).Caption = Second(Now)

'Sur le formulaire chaque "bit" de l'affichage est constitué de 2 contrôles Image
'superposés : 1 sphère blanche sous 1 sphère rouge.
'En jouant avec la propriété Visible de la sphère rouge, on fait apparaître
'la sphère désirée. Les sphères blanches sont fixes et ne sont jamais sollicitées.
'Il y a 3 groupes de contrôles pour les sphères rouges : btS, btM et btH pour
'les secondes, minutes et heures.
'btS, btM et btH sont indexés de 0 à 5 afin de pouvoir arriver pour les secondes
'et les minutes à la valeur 59 : 00111011
'et pour les heures à la valeur 23 : 00010111
'NB : btH(5) est un contrôle Image vide ! Nécessaire pour la boucle de 0 à 5.

'On se sert des index de ces contrôles pour s'adresser à chaque sphère rouge à
'l'aide d'une boucle For...To...Next.
'Et on effectue une opération binaire AND entre les secondes (par exemple) et 2 à
'la puissance de l'index. Ceci indique si le bit représenté par l'index est à 1 ou à 0.
'Exemple, nous en sommes à 27 secondes et nous cherchons quelles sphères rouges
'il faut afficher. Du contrôle btS(0) au contrôle btS(5) on fait :
'     bit 0 = 27 AND 2^0 = 00011011 AND 00000001 = 00000001 > 0  donc Visible = True
'     bit 1 = 27 AND 2^1 = 00011011 AND 00000010 = 00000010 > 0  donc Visible = True
'     bit 2 = 27 AND 2^2 = 00011011 AND 00000100 = 00000000 = 0  donc Visible = False
'     bit 3 = 27 AND 2^3 = 00011011 AND 00001000 = 00001000 > 0  donc Visible = True
'     bit 4 = 27 AND 2^4 = 00011011 AND 00010000 = 00010000 > 0  donc Visible = True
'     bit 5 = 27 AND 2^5 = 00011011 AND 00100000 = 00000000 = 0  donc Visible = False

'C'est ainsi qu'avec la petite boucle ci-dessous on gère l'horloge numérique.

For i = 0 To 5
  btS(i).Visible = (Second(Now) And 2 ^ i)
  btM(i).Visible = (Minute(Now) And 2 ^ i)
  btH(i).Visible = (Hour(Now) And 2 ^ i)
Next i

End Sub

Conclusion :


En jouant avec les contrôles indexés, les puissances de 2 et l'opération binaire AND, une seule boucle FOR...TO...NEXT suffit à faire fonctionner cette horloge.
Je pense sincèrement qu'on ne peut pas faire plus court !
Tous les détails sont expliqués dans le code en commentaires.

Codes Sources

A voir également

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.