CALENDRIER VB6 ET HORLOGE ANALOGIQUE

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 16 nov. 2009 à 23:25
 zargui - 18 janv. 2014 à 01:40
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/50859-calendrier-vb6-et-horloge-analogique

bien
Bonne ideé merci bonne contuniation
enzo68290 Messages postés 109 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 16 juin 2011
30 juin 2010 à 10:24
Renfield, j'ai trouvé un bug, dans ta version et la mienne, essaye d'ouvrir le projet entre le 1 et le 9 d'un mois, tu constatera ^^.

j'ai corriger le code, aussi j'enverrais une version corriger de ton code.
enzo68290 Messages postés 109 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 16 juin 2011
20 déc. 2009 à 22:34
si tu n'ouvre pas le .vbp sa ne peu pas marcher, il n'y à rien à rajouté normalement, tout est fonctionnel, je n'ai pas encore pris le temps de regarder le gdi pour mettre des aiguilles en image à la place de ligne vb qui tourne. je vais essayé ces vacances (si je trouve le temps)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 déc. 2009 à 08:18
c'est le fichier .vbp qu'il te faut ouvrir, sous Visual Basic 6
cs_SDan Messages postés 288 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 13 juin 2008
19 déc. 2009 à 21:00
Salut le projet a l'air très intéressant, malheureusemenbt je n'arrive pas à le faire fonctionner. En fait j'ouvre la form1 et ensuite j'essaie mais c alors que ça ne marche pas. Quels sont les contrôles à rajouter.
enzo68290 Messages postés 109 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 16 juin 2011
25 nov. 2009 à 15:19
renfield, je veux bien que je suis un petit bricoleur dans le code ^^, mais si déja je bosse et je demande de l'aide, c'est pour quelque chose de propre ^^, donc pas 360 images pour chaque position possible, une seul en PNG transparente que je ferais tourner. je vais aussi faire la modif à l'aucaz pour que la montre puisse accepté des cadrant de type png.

je te demanderais juste de l'aide pour le GDI, histoire de l'allumé correctement, et l'éteindre quand on quitte le calendrier, je pense ne pas savoir faire ça, si je ne trouve pas je te dirais.

pareil concernant le milieu de l'aiguille, disons que mon ancien code était plus facile à comprendre, mais plus farfelu j'en doute pas, malgré tout commenté et je l'avais facilement compris.

mais je t'en veux pas de pas l'avoir commenter, il est génialement plus léger et réduit.

je te tiens au courant sur mes avancements divers.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
25 nov. 2009 à 04:40
a toi de choisir le point origine du placement.
j'espère que tu a bien juste une image d'aiguille, que tu fais tourner, et pas n images dans toutes les positions ^^

regarde dans mon code exemple avec l'alien.

on utilise bien:
lpOrg.x + vnWidth * -0.5

pour forcer un positionnement de celui-ci en utilisant le centre de l'image.

au pire, utilises un png carré, de la taille de l'horloge complète.
ainsi, en superposant les deux images, ton aiguille sera bien placée.
tu as juste a afficher l'image tournée.

gaffe enfin à ce que dans mon code exemple, j'allume et eteind GDI+ a chaque fois.
tu devrais en fait l'allumer au lancement de ta form et l'eteindre au QueryUnload.
enzo68290 Messages postés 109 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 16 juin 2011
24 nov. 2009 à 23:02
ouai ok, disont qu'il me faut les position x et y de ce point, sa me complique un peu plus la tâche.

je cherche à obtenir ce point, parce que c'est un point clef pour le positionnement de l'image qui servira d'aiguille,

en gros si je veux posé l'aiguille, c'est par son milieu qui est aussi celui de l'aiguille déjà en place.

ensuite il me suffit de changer l'angle de façon à ce qu'elle soit calé sur le centre, et l'extrémité de cette aiguille.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 nov. 2009 à 22:11
je piges pas trop pourquoi tu cherches a obtenir le milieu du segment...

50, 44 et 28 sont la longueur des aiguilles. logiquement, en divisant par deux, tu obtiens en calcul la position de ce milieu
enzo68290 Messages postés 109 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 16 juin 2011
24 nov. 2009 à 21:08
dis voir renfield, tu à recoder la partie montre, ça à l'air super optimisé.

étant sur le coup du GDI +, je t'explique comment je fais procéder par rapport au lien que tu m'a donner, n'hésite pas à commenter d'ailleurs

en fait, avec chacune des aiguilles, on à un point centrale, et un point qui tourne au tour, pour placer l'aiguille, il me faudra le point entre les deux, ou je poserais l'aiguille à sa moitié, ainsi qu'un angle pour qu'elle parte du centre vers l'extérieur.

mon soucis n'est pas langue, avec la trigonométrie je devrais m'en sortir

étant donnée que ton code n'est pas commenter coté montre, j'ai du mal à obtenir le point au milieu d'une des aiguilles, pourrait tu m'aider ?
enzo68290 Messages postés 109 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 16 juin 2011
22 nov. 2009 à 23:55
jsuis sur le coup coté gdi +, jvous tiendrais informé des modifications futures
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 nov. 2009 à 23:16
enzo68290 Messages postés 109 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 16 juin 2011
19 nov. 2009 à 18:02
merci j'ai regarder, c'est tip top. sinon renfield, des connaissances en gdi+ ? ou je vais posté sur le forum ?
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
18 nov. 2009 à 04:50
cs_ERICBL Messages postés 12 Date d'inscription lundi 20 janvier 2003 Statut Membre Dernière intervention 22 janvier 2009
18 nov. 2009 à 02:39
j'ai testé super bien
enzo68290 Messages postés 109 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 16 juin 2011
18 nov. 2009 à 00:19
j'ai testé avec le .refresh, effectivement sa marche pas spécialement, effet bizarre de clignotement.

renfield, qu'est ce que GDI + ? j'en est déja vaguement entendu parlé.

autre chose renfield, si je met mdselect en publique, je peu la récupéré d'une autre form ?

je m'explique, imaginons que j'ai un logiciel X qui à besoin de chercher une date, j'appel ma form PowerCalendar,

je sélectionne une date dessus, si j'ai mdselect en publique je peu récupéré ça valeur ?

US, je pense que c'est pas super important pour l'heure, pour un calage exacte avec celle du pc, à savoir que celle de windows est normalement décalée de à peu près 700 ms.

Du moins si tu trouve une solution, je suis preneur, sinon sa me dérange pas.

autrement, j'ai mis à jour le code
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
17 nov. 2009 à 23:31
Bonsoir Renfield et Enzo,

Renfield, le .Refresh ici tel que le code est bâtie efface les aiguilles, contrairement à .Cls... et sans ce "Clear" on a la trotteuse qui se cumule, et les minutes + heure qui clignotent... Donc voilà, je me suis pas posé plus de question ensuite...

JE réfléchi pour faire démarrer le timer1 sans décalage (notable) avec l'horloge du PC... Pas si évident, même si j'ai trouvé une solution (moyenne) provisoire...

Amicalement,
Us.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 nov. 2009 à 23:13
pour le lissage faudait jouer en GDI+

pour l'intervalle à 1000, c'est fait, dans le _Timer

pourquoi faire .cls _Paint ? .refresh fait tout cela...
enzo68290 Messages postés 109 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 16 juin 2011
17 nov. 2009 à 23:12
en ce qui concerne ce qu'a fait renfield, j'ai fait la modification sur le timer, je mettrais à jour par la suite le code.

j'ai aussi mis un dossier montres, ou on stock les bmp des différents skins de montre, et changer le path de la fonction loadskin, ainsi que rajouté quelques montres pour le fun.

j'ai également rajouté dans le formload une boucle while qui cherche le controle caption ou est la date du jour, et le sélectionne (dans mon code précédent s'étais déja le cas), renfield à oublier de le remettre ou n'y à pas pensé, de ce fait je l'ai remis

pour ce qui est des aiguilles, je ne sais pas, mais j'y travaille, c'est la prochaine étape ! je pense qu'il serait intéressant de créer un ocx skinable ou il serait possible de modifier les aiguilles, et le fond de l'horloge, ainsi que de permettre de changer la taille de l'ocx en adaptant le fond et les aiguilles en fonction.
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
17 nov. 2009 à 22:52
Bonsoir,

Il manque à la version de Rendfiel ces petites modifs sur le timer1 :

- Le définir à interval : 1000

- Le code suivant :

Private Sub Timer1_Timer()
Picture1.Cls
Call Picture1_Paint
temps.Caption = Time
End Sub

Ensuite, bon, évidemment, le code revu et corrigé par Rendfiel, hummmm (petit veinard !), difficile d'en trouver une faille...

Pour maintenant rajouter une suggestion d'amélioration : Comment faire des belles aiguilles bien lisses ?

Amicalement,
Us.
enzo68290 Messages postés 109 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 16 juin 2011
17 nov. 2009 à 20:12
j'ai regarder ce que tu as à fais renfield, et j'en reste bouche B, c'est géniale, mon code était tout simplement compliquer à coté.
ya juste plein de chose que je ne comprend pas étant débutant, j'aimerais bien que tu puisse m'expliquer ce que je n'ai pas compris, histoire d'évoluer un petit peu, j'en ferais la liste un autre jour, y'a pas tant que ça.

et puis, j'ai pas compris avec la montre ce que tu as fais, du moins sur le fond t'a voulu optimisé la chose, j'ai vu que les aiguilles inverse la couleur de la montre (idée géniale que je n'aurais jamais su développer), mais chez moi la montre ne fonctionne pas.

chez toi ça marche ?
enzo68290 Messages postés 109 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 16 juin 2011
17 nov. 2009 à 19:53
je vais prendre toutes vos remarques au sérieux dès que possible, concernant le groupe de contrôles, j'en avait jamais fais avant

merci pour la petite fonction pour savoir combien de jour compte un mois, je ne l'avais pas trouvé à l'instant T.

je vais regarder attentivement ce que tu as fait de mon calendrier renfield, en tout cas merci pour l'effort c'est sympa :)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 nov. 2009 à 16:09
NB. J'ai renommé les controles Lbl en place pour en faire un groupe de controles.
J'aurais très buien pu n'en mettre qu'un et chargé les 30 et quelques autres dynamiquement.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 nov. 2009 à 16:06
Bon, c'est pas dans mes habitudes "d'abuser" de mon status d'admin.
J'ai ajouté dans le zip une version un peu revue du code.

lancez le .frm direct, il n'a pas de .prj, mais ca importe peu.

Pour un rendu quasi similaire, on se retrouve avec bien moins de code.

je commente peu, si vous avez besoin de détails, n'hésitez pas
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 nov. 2009 à 15:35
bon, j'ouvre le zip ce coup-ci...

l'horloge est belle, les aiguilles invisibles ou presque (horloge bleue, aiguilles blanches et la trotteuse jaune :S)

datetest = num & "/" & moisaffiche & "/" & annéeaffiche
NON !!!!!!
utilises DateSerial:
datetest = DateSerial(annéeaffiche, moisaffiche, num)

Et pour savoir combien un mois compte de jours :
num = day(dateserial(ANNEE,MOIS +1,0))

us_30 a raison : un groupe de controles aurait simplifié la chose grandement...

exemple de code possible, pour le dessin de l'horloge :

Private Sub Picture1_Paint()
Dim nSecond As Single
Dim nMinute As Single
Dim nHour As Single
Dim nX(1) As Single
Dim nY(1) As Single
nSecond = (Second(Now) * -6 + 90) * PI / 180
nMinute = (Minute(Now) * -6 + 90) * PI / 180
nHour = (Hour(Now) * -30 + 90) * PI / 180

nX(0) = Picture1.ScaleWidth * 0.5
nY(0) = Picture1.ScaleHeight * 0.5

'# Aiguille des secondes
Picture1.DrawWidth = 1
nX(1) = Cos(nSecond) * 50
nY(1) = Tan(nSecond) * nX(1)
Picture1.Line (nX(0), nY(0))-(nX(0) + nX(1), nY(0) - nY(1)), &HFFFF&

'# Aiguille des minutes
Picture1.DrawWidth = 3
nX(1) = Cos(nMinute) * 44
nY(1) = Tan(nMinute) * nX(1)
Picture1.Line (nX(0), nY(0))-(nX(0) + nX(1), nY(0) - nY(1)), &HFFFFFF

'# Aiguille des Heures
Picture1.DrawWidth = 3
nX(1) = Cos(nHour) * 28
nY(1) = Tan(nHour) * nX(1)
Picture1.Line (nX(0), nY(0))-(nX(0) + nX(1), nY(0) - nY(1)), &HFFFFFF
End Sub
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 nov. 2009 à 14:59
idem pour jourdico, moisdico...

utilises les fonctions de VB ! ca permettra en plus de s'adapter un peu plus a la langue ciblée.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 nov. 2009 à 14:50
bon, j'ouvre le zip ce coup-ci...

l'horloge est belle, les aiguilles invisibles ou presque (horloge bleue, aiguilles blanches et la trotteuse jaune :S)

datetest = num & "/" & moisaffiche & "/" & annéeaffiche
NON !!!!!!
utilises DateSerial:
datetest = DateSerial(annéeaffiche, moisaffiche, num)

Et pour savoir combien un mois compte de jours :
num = day(dateserial(ANNEE,MOIS +1,0))

us_30 a raison : un groupe de controles aurait simplifié la chose grandement...
cs_ERICBL Messages postés 12 Date d'inscription lundi 20 janvier 2003 Statut Membre Dernière intervention 22 janvier 2009
17 nov. 2009 à 14:41
il y a pas que 8
cs_ERICBL Messages postés 12 Date d'inscription lundi 20 janvier 2003 Statut Membre Dernière intervention 22 janvier 2009
17 nov. 2009 à 14:31
Bien juste un truc je clique sur le 8 jour message erreur
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
17 nov. 2009 à 11:59
Bonjour,

Le rendu est plutôt réussi.

En terme de programmation, il me semble que tu aurais simplifié ton code en utilisant une collection (Array) pour les Labels... Cela s'apparente alors à une instruction DIM dans le principe... ce qui te permet d'appliquer une propriété commune avec une boucle...

Amicalement,
Us.
enzo68290 Messages postés 109 Date d'inscription samedi 18 août 2007 Statut Membre Dernière intervention 16 juin 2011
17 nov. 2009 à 11:27
ok ok, non j'utilise simplement une fonction de vb intégré pour le numéro de semaine, tant pis pour la petite irrégularité à ce moment la, je verrais pour corriger ça par la suite quand j'aurais le temps.

en ce qui concerne l'horloge, pour les aiguilles j'ai pas trouvé d'ocx correcte en montre analogique, alors j'ai pris une image sur la quel je trace les aiguilles grâce une source citée plus haut, j'utilise en fait simplement des lignes dont l'angle change, d'ou l'effet pixelisation maximale. Pour l'exactitude de l'heure, c'est normal, puisque sa dépend d'un timer, qui se déclenche pas forcément quand la seconde passe à la seconde suivante, il se peut que à 22h33 et 12 seconde et demi le timer se lance, d'où l'inexactitude qui peut être entre 0 et presque 1 seconde

si quelqu'un veut m'aider à faire un OCX montre analogique je veux bien, n'en ayant jamais fais je suis preneur.

je suis d'accord pour les jours grisé comme sur le calendrier de vista, mais sa m'aurais rajouté pas mal de temps supplémentaire alors qu'il suffit d'aller au mois précédent pour les contempler si vraiment c'est urgent, à rajouté par la suite aussi.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
16 nov. 2009 à 23:25
Joli... on regrette le coté aliasé (pixels) des aiguilles

Le nom des jours et mois contiennent des majuscules sur ta version

dommage de ne pas avoir le n° correspondant aux jours du mois précedent et suivant (en grisé)

Est-ce normal que l'heure affichée par windows et ton horloge ne soient pas la même (bon, a une seconde pres)

1/1/2010 est la semaine 53 de 2009, si tu te bases sur

http://www.codyx.org/snippet_recuperer-numero-semaine_61.aspx#1666

En france, on considère en effet que la semaine 1 est la semaine contenant le premier jeudi (ainsi que d'autres criteres)
Rejoignez-nous