begin process at 2012 02 17 07:34:54
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Optimisation du code

 > HORLOGE BINAIRE

HORLOGE BINAIRE


 Information sur la source

Note :
Aucune note
Catégorie :Optimisation du code Classé sous :horloge, binaire, and, index Niveau :Initié Date de création :01/04/2009 Date de mise à jour :02/04/2009 13:15:59 Vu / téléchargé :2 485 / 258

Auteur : Apolinaire

Ecrire un message privé
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Une petite horloge binaire pas si facile à lire que ça mais qui se distingue par un code source particulièrement compact.

Source

  • 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
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.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

02 avril 2009 13:15:59 :
- Affichage instantané de l'heure au démarrage - Suppression des tests "> 0" inutiles - Centrage écran de la fenêtre

 Sources de la même categorie

Source avec Zip FONCTIONS PRATIQUE POUR LISTVIEW par Galactus13
Source avec une capture Source .NET (Dotnet) HISTOGRAMME - SUITE - GRAPHIQUE DE BARRES VERTICALES POUR UN... par tchconst
Source .NET (Dotnet) HISTOGRAMME (BIS) BARRES VIA DATATABLE 100 % PERSONNALISÉ par tchconst
Source avec une capture Source .NET (Dotnet) AFFICHER UN HISTOGRAMME PERSONNALISÉ par tchconst
Source avec une capture Source .NET (Dotnet) PROFIL BINAIRE D'UN OBJET par tchconst

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture FAIRE REBONDIR PLUSIEURS BALLES par pierreh51
Source avec Zip Source avec une capture Source .NET (Dotnet) HORLOGE DIODE AVEC 3 ALARMES ET REMISE À L'HEURE par EhJoe
Source avec Zip Source avec une capture HORLOGE À AIGUILLES SIMPLEMENT DANS UN USERFORM EXCEL par bigbe
Source avec une capture Source .NET (Dotnet) PROFIL BINAIRE D'UN OBJET par tchconst
Source avec Zip Source avec une capture HORLOGE BINAIRE VOYANTE MAIS PAS EMBÊTANTE par zemetafyzik

Commentaires et avis

Commentaire de Renfield le 02/04/2009 10:14:47 administrateur CS

J'aime la simplicité de ton code

Commentaire de Renfield le 02/04/2009 10:25:17 administrateur CS

1 - Gaffe au startupPosition: ma barre de taches est a gauche, en vertical et ta form passe partiellement dessous

2 - au chargement, pas de Tick du Timer la première seconde ; l'heure s'affiche pas de suite. Mets 1 dans l'interval de ton timer et remet le à 1000 dans le Timer1_Timer

3 - le test > 0 est inutile. btH(i).Visible = (Hour(Now) And 2 ^ i)
suffit

Commentaire de Apolinaire le 02/04/2009 13:20:59

Merci de tes remarques. J'ai mis à jour en conséquence.

Commentaire de Renfield le 02/04/2009 13:28:15 administrateur CS

Timer1.Interval = 1
Timer1.Interval = 1000

tu n'as pas lourd de garantie qu'un tick s'effectue.


 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

drag and drop [ par TeXmeX34 ] Bonjour,je cherche à activer la gestion du drag and drop sous .net. En effet, depuis que la propriété DragMode n'est plus disponible po combobox [ par bigbossnino ] bonjourj ai 2 combobox qui sont en relation ca veut dire que le deuxieme est rempli a partir du premiermon probleme c'est que a chaque fois que je sel Pour les pro du winsock [ par bobo91 ] Bonjour, J'aimerais savoir comment faire pour recuperer la valeur bytessent d'un winsock indexé merci à ceux qui pourront repondre. Private Sub Wins aller à la ligne dans un fichier texte [ par snake57 ] Bonjour,Ben voila je voudrais pouvoir écrire trois ligne dans un fichier texte. Le problème est que mon code ne marche pas. Pouvez vous m'ai Reconnaissance caractère [ par observatoire ] Bonjour,Je réalise une interface utilisateur sur VBA Access, je souhaite reconnaître dans une textebox après avoir lu le texte, un cara pb de script [ par Miss1 ] salut j'ai reussi a mettre se code pour vérifier si dans l'index ya vé bien le nom des image mais la je veux faire l'inverse et yarrive pas. je veux v VB6 DirListBox [ par JeffC1977 ] Salut.....J'aimerais savoir comment on peut coder pour faire une condition quand, dans un répertoire, j'ai aucun fichier et de demander à mon DirListB probleme d'update visual basic - MS access [ par xdiethank ] Bonjours à tous, je programme en ce moment un logiciel de gestion de cave à vin. Mais je bloque là. Voici le code qui me pose probleme. Set req_ent = réutiliser un label suivant son nom [ par datesta ] bonjour, pour mon programme je crée à la volé des labels je leur donne des noms le probleme ce qu' apres je voudrais les réutiliser v Structure d'un fichier binaire? [ par pinje ] Bonjour a tous,J'aimerais lire un fichier binaire contenant les resultats d'un calcul, or je ne connais pas a l'avance sa structure... Est ce qu'il es


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,214 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales