Creer une horloge à aiguille

Soyez le premier à donner votre avis sur cette source.

Snippet vu 23 168 fois - Téléchargée 60 fois

Contenu du snippet

Capturer le temps:
connaitre l'heure de l'ordi au format 12:01:36
variable = Time
Connaitre l'heure uniquement:
Hour(Now)
connaitre les minutes uniquement:
Minute(Now)
Connaitre les seconde uniquement:
Second(Now)

connaittre la date:
Variable = Date
Jours de la semaine en lettre:
Format$(Date, "dddd")
jours du mois en chiffre:
Format$(Date, "d")
Mois en lettre:
Format$(Date, "mmmm")
anné en chiffre:
Format$(Date, "yyyy")

Changer les parametres systeme:
changer l'heure de windows:
Time = HH:MM:SS
changer la date de windows:
Date = JJ/MM/YYYY

Maths:
si les maths vous donne des boutons, recuperez juste les codes et les valeurs,
sinon, je vais vous expliquer le principe de rotation des aiguilles en VB...
Je vais vous expliquer pour une aiguille seulement, pour les autres, c'est le meme
principe mais avec des valeurs differentes.

exemple: l'aiguille des secondes:
Elle sera formé d'un control Line dont un point sera fixe(le centre de l'horloge).
L'autre point doit decrire un cercle autour du premier(qui est fixe), Mission Impossible?
Sans les maths, oui!
Explication par l'exemple:
l'action du cosinus:
ouvrez un nouveau projet, tracez une ligne et un Timer reglé sur 100.

private sub Timer1_Timer()
Line1.X1 = 1000
Line1.Y1 = 1000
Line1.X2 = Cos(Second(now)) * 1000
end sub

Cos() d'un nombre = un autre nombre entre 0 et 1!
on multiplie donc par 1000 pour pouvoir observer l'effet!
La propriété Y2 du control Line1 est volontairement oublié.
Lancez le projet et regardez.
Le point X2 de Line1 se ballade de gauche à droite, de droite à gauche,
bref, fait des allez-retours!
C'est une particularité interessante!

Remplacez maintenant le cos par un sin et vous verrez la meme chose, mais avec du decalage!

Voila encore une chose interessante car un point qui decrit un cercle est en fait
un point qui se ballade de gauche à droite et en meme temps (à la meme vitesse) de haut en bas!
(essayez de vous representer ça dans votre tete si c'est flou!)

on pourrait donc faire un code de ce genre:

private sub Timer1_Timer()
Line1.X1 = 1000
Line1.Y1 = 1000
Line1.X2 = Cos(Second(now)) * 1000
Line1.Y2 = Cos(Second(Now)) * 1000
end sub

Testez le projet...
He oui, le point (X2;Y2) decrit avec (X1;Y1) une diagonnal!
Pour Faire un cercle, Il faut que X2 et Y2 ne soient pas egales!
Nous allons donc utiliser la fonction Sinus qui elle est decalé par rapport au Cosinus.

private sub Timer1_Timer()
Line1.X1 = 1000
Line1.Y1 = 1000
Line1.X2 = Cos(Second(now)) * 1000
Line1.Y2 = Sin(Second(Now)) * 1000
end sub

Miracle!
(X2;Y2) decrit un cercle autour de (X1:Y1)!
Nos avons donc reussit mais pas totalement...
he oui, observez bien, il y a un "trou"!
Pour mieux observer ce trou, on va creer la ligne dynamiquement:

private sub Timer1_Timer()
Me.line (1000,1000) - (Cos(Second(now) * 1000), Sin(Second(now) * 1000))
end sub

Grace à cette methode, les lignes restent en place...Vous voyez l'espace non remplit?
Il faut donc modifier le calcul de coordonné pour avoir vraiment les secondes!
Il suffit de multiplier les secondes par 0.1047 pour rectifier les coordonnées!

private sub Timer1_Timer()
Line1.X1 = 1000
Line1.Y1 = 1000
Line1.X2 = Cos(0.1047 * Second(now)) * 1000
Line1.Y2 = Sin(0.1047 * Second(Now)) * 1000
end sub

C'est beau mais il y a encore un probleme!!!
Toutes les valeurs sont decalés de 45°!
he bien là, c'est pas compliqué:
on ajoute 45 au calcul! (C'est tout con pmais faut le savoir!)

private sub Timer1_Timer()
Line1.X1 = 1000
Line1.Y1 = 1000
Line1.X2 = Cos(0.1047 * (45 + Second(now))) * 1000
Line1.Y2 = Sin(0.1047 * (45 + Second(Now))) * 1000
end sub

Voila!
Vous avez votre horloge!
C'est pas cool ça??
Now, vous pouvez participer gaiement au concours!!!

Quelques valeurs pour rectifier les coordonnées:
Pour les secondes: 0.1047 (base de 60)
Pour les minutes: 0.1047 (base de 60 comme pour les secondes!)
Pour les heures: 0.5236 (base de 24)

Source / Exemple :


'################################################
'##
'## Voici les codes des exemples pour ceux qui 
'## aiment pas les maths!
'##
'################################################

Hour(Now)
Minute(Now)
Second(Now)

Variable = Date
Format$(Date, "dddd")
Format$(Date, "d")
Format$(Date, "mmmm")
Format$(Date, "yyyy")

Time = HH:MM:SS
Date = JJ/MM/YYYY

private sub Timer1_Timer()
Line1.X1 = 1000
Line1.Y1 = 1000
Line1.X2 = Cos(Second(now)) * 1000
end sub

private sub Timer1_Timer()
Line1.X1 = 1000
Line1.Y1 = 1000
Line1.X2 = Cos(Second(now)) * 1000
Line1.Y2 = Cos(Second(Now)) * 1000
end sub

private sub Timer1_Timer()
Line1.X1 = 1000
Line1.Y1 = 1000
Line1.X2 = Cos(Second(now)) * 1000
Line1.Y2 = Sin(Second(Now)) * 1000
end sub

private sub Timer1_Timer()
Me.line (1000,1000) - (Cos(Second(now) * 1000), Sin(Second(now) * 1000))
end sub

private sub Timer1_Timer()
Line1.X1 = 1000
Line1.Y1 = 1000
Line1.X2 = Cos(0.1047 * Second(now)) * 1000
Line1.Y2 = Sin(0.1047 * Second(Now)) * 1000
end sub

private sub Timer1_Timer()
Line1.X1 = 1000
Line1.Y1 = 1000
Line1.X2 = Cos(0.1047 * (45 + Second(now))) * 1000
Line1.Y2 = Sin(0.1047 * (45 + Second(Now))) * 1000
end sub

Conclusion :


Merci qui?

A voir également

Ajouter un commentaire

Commentaires

Messages postés
5
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
2 décembre 2003

Puisque vb utilise les radians par défaut, on pourrait utiliser ces lignes de code pour ajouter de la précision:

Line1.X2 = Cos((-90 + (Second(Now) / 60) * 360) / 180 * 3.14159265359) * 1000 + Line1.X1
Line1.Y2 = Sin((-90 + (Second(Now) / 60) * 360) / 180 * 3.14159265359) * 1000 + Line1.Y1
Messages postés
23
Date d'inscription
mercredi 19 décembre 2001
Statut
Membre
Dernière intervention
21 août 2008

C'est vraiment cool. Je ne l'ai pas essayer mais tu expliques vraiment bien et tu prends le temps de le dire. Felicitation encore une fois.

Francki
sa c est du tutorial, lhorloge marche pas chez moi mai tout sa c cool, sa compense ;)
Prière de me contacter, s.v.p.
j'ai besoin d'autres infos.
Merci (du Québec)
Super tutorial! wow pt1 t un vrai pro mec :)
Afficher les 9 commentaires

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.