Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Chronomètre | |
|
+4silverman pascal10000 Jean Claude Marc 8 participants | Auteur | Message |
---|
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Chronomètre Dim 11 Oct 2015 - 19:15 | |
| Bonjour à tous, Je viens de réaliser un petit chronomètre : Un problème subsiste : il n'est pas très précis ! C'est un comble pour un "chronomètre" ! J'ai utilisé un TIMER qui, en fonction de l'activité de Windows, peut prendre du retard. - Code:
-
DIM Compteur%, Heures%, Minutes%, Secondes%, dixiemes%, Still%, Couleur%, a DIM HH$, MM$, SS$, CC$ DIM Affichage$
LABEL Bouton_Start, Bouton_Pause, Bouton_Stop, Bouton_Raz, Changement_Couleur, Comptage
WIDTH 0, 420 HEIGHT 0, 191 COLOR 0, 0,0,0 FONT_NAME 0, "arial" FONT_SIZE 0, 14
BUTTON 1 TOP 1, 100 LEFT 1, 2 WIDTH 1, 100 HEIGHT 1, 50 CAPTION 1, START BUTTON 2 TOP 2, 100 LEFT 2, 102 WIDTH 2, 100 HEIGHT 2, 50 CAPTION 2, PAUSE
BUTTON 3 TOP 3, 100 LEFT 3, 202 WIDTH 3, 100 HEIGHT 3, 50 CAPTION 3, STOP BUTTON 4 TOP 4, 100 LEFT 4, 302 WIDTH 4, 100 HEIGHT 4, 50 CAPTION 4, R.A.Z ALPHA 5 TOP 5, 14 LEFT 5, 48 WIDTH 5, 380 HEIGHT 5, 80 FONT_SIZE 5, 48 FONT_COLOR 5, 255,0,0 CAPTION 5, "00:00:00,0"
TIMER 6 TIMER_INTERVAL 6, 100 TIMER_OFF 6 ON_TIMER 6, Comptage
Couleur% = 1
ON_CLICK 1, Bouton_Start ON_CLICK 2, Bouton_Pause ON_CLICK 3, Bouton_Stop ON_CLICK 4, Bouton_Raz ON_CLICK 5, Changement_Couleur
END ' ------------------------------------------------------------------------------ Bouton_Start: TIMER_ON 6 STILL%=0 RETURN ' ------------------------------------------------------------------------------ Bouton_Pause: STILL%=1 RETURN ' ------------------------------------------------------------------------------ Bouton_Stop: TIMER_OFF 6 RETURN ' ------------------------------------------------------------------------------ Bouton_Raz: TIMER_OFF 6 Compteur% = 0 CAPTION 5, "00:00:00,0" RETURN ' ------------------------------------------------------------------------------ Changement_Couleur: Couleur% = Couleur% + 1 IF Couleur% = 7 THEN Couleur% = 1 If couleur% = 1 THEN FONT_COLOR 5, 255,0,0 If couleur% = 2 THEN FONT_COLOR 5, 0,255,0 If couleur% = 3 THEN FONT_COLOR 5, 0,0,255 If couleur% = 4 THEN FONT_COLOR 5, 0,255,255 If couleur% = 5 THEN FONT_COLOR 5, 255,0,255 If couleur% = 6 THEN FONT_COLOR 5, 255,255,0 RETURN ' ------------------------------------------------------------------------------ Comptage: Compteur%=Compteur%+1 IF Compteur% = 8619999 THEN Timer_OFF 6 IF Still%=0 dixiemes% = INT(FRAC(Compteur%/10)*10) CC$=STR$(dixiemes%) a=(compteur%-dixiemes%)/10 Heures%=INT(a/3600) IF Heures% < 10 THEN HH$="0"+STR$(Heures%): ELSE : HH$=STR$(Heures%) a=a-(heures%*3600) Minutes%=INT(a/60) IF Minutes% < 10 THEN MM$="0"+STR$(Minutes%): ELSE : MM$=STR$(Minutes%) a=a-(Minutes%*60) Secondes%=a IF Secondes% < 10 THEN SS$="0"+STR$(Secondes%): ELSE : SS$=STR$(Secondes%) CAPTION 5, HH$ + ":" + MM$ + ":" + SS$ + "," + CC$ END_IF RETURN Hormis TIME$, Je n'ai pas trouvé d'instruction en Panoramic qui pouvait accèder à l'horloge RTC du PC avec une précision de l'ordre du centième voire millième de seconde. Avez-vous des suggestions ? Vous pouvez cliquer sur l'afficheur pour changer sa couleur.
Dernière édition par Marc37 le Mer 14 Oct 2015 - 0:35, édité 1 fois | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Chronomètre Dim 11 Oct 2015 - 19:58 | |
| A part WAIT N où N est le nombre de millisecondes de délai, je ne vois rien d'autre. Mais c'est sur que demander d'attendre à chronomètre, ce n'est pas cohérent.
A+ | |
| | | pascal10000
Nombre de messages : 812 Localisation : Troyes Date d'inscription : 05/02/2011
| Sujet: Re: Chronomètre Dim 11 Oct 2015 - 20:11 | |
| à la ligne 99, 100 et 101 j'ai mis ça et c un peut plus régulier mais a savoir si les secondes sont précis il faut réglé timer_interval a 89 1 seconde precis 100 a 5 seconde d'écard
' dixiemes% = INT(FRAC(Compteur%/10)*10) :> ligne a suprimer dixiemes% =dixiemes% +1 if dixiemes%=10 then dixiemes%=0 | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Chronomètre Dim 11 Oct 2015 - 20:34 | |
| Salut, une mesure de temps en millisecondes : - Code:
-
dim result% dll_on "kernel32"
result%=dll_call0("GetTickCount") print "il y a ",result%," millisecondes écoulées dpuis l'allumage du PC"
dll_off
| |
| | | pascal10000
Nombre de messages : 812 Localisation : Troyes Date d'inscription : 05/02/2011
| Sujet: Re: Chronomètre Dim 11 Oct 2015 - 22:45 | |
| silverman c'est sympas ton p'tit truc mais vas convertir 11815359 en seconde !!!!!!!!!! | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Chronomètre Lun 12 Oct 2015 - 7:24 | |
| @Pascal1000, Comme il s'agit de millisecondes c'est on ne peut plus simple: 11815359Ms=11815,359 Secondes
Pour les minutes 11815/60 = 196,9166666666667 Pour les heures 196/60 = 3,266666666666667
A+ | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Chronomètre Lun 12 Oct 2015 - 13:23 | |
| Chers Amis, merci de m'avoir répondu. Suite à vos suggestions, je mènerai différents tests le weekend prochain. Je ne manquerai pas de vous informer de mon avancée. Bonne semaine à tous ! | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Chronomètre Lun 12 Oct 2015 - 17:52 | |
| Exemple de conversion en : jours,heures,minutes,secondes,millisecondes - Code:
-
dim x,result% dll_on "kernel32"
result%=dll_call0("GetTickCount") print "il y a ",result%," millisecondes écoulées dpuis l'allumage du PC soit :"
dll_off
x=result%
print x=x/(24*60*60*1000) print int(x)," jour(s)"
x=(frac(x)*24) print int(x)," heure(s)"
x=(frac(x)*60) print int(x)," minute(s)"
x=(frac(x)*60) print int(x)," seconde(s)"
x=(frac(x)*1000) print int(x)," milliseconde(s)"
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Chronomètre Lun 12 Oct 2015 - 20:01 | |
| Si ça peut s'avérer utile ... - Code:
-
rem ============================================================================ dim result%,j,h,m,s,ms,jour$,heur$,minut$,second$,msec$,t$,dat$,tim$ width 0,600 : height 0,250 alpha 10 : top 10,10 : left 10,10 : font_bold 10 : font_size 10,24 caption 0,"<CLICK> pour terminer ...." dll_on "kernel32"
repeat t$ = " Nous sommes le : " + date$ +chr$(13) t$ = t$ + " Il est : " + time$ + chr$(13) t$ = t$ + " Votre PC est allumé depuis :" + chr$(13)
result% = dll_call0("GetTickCount") j = result% / (24*60*60*1000) h = frac(j)*24 m = frac(h)*60 s = frac(m)*60 ms = frac(s)*1000
jour$ = str$(int(j)) : while len(jour$) < 2 : jour$ = "0" + jour$ : end_while heur$ = str$(int(h)) : while len(heur$) < 2 : heur$ = "0" + heur$ : end_while minut$ = str$(int(m)) : while len(minut$) < 2 : minut$ = "0" + minut$ : end_while second$ = str$(int(s)) : while len(second$) < 2 : second$ = "0" + second$ : end_while msec$ = str$(int(ms)): while len(msec$) < 3 : msec$ = "0" + msec$ : end_while
t$ = t$ + jour$ + " j : " + heur$ + " h : " + minut$ + " m : " + second$ + " s : " + msec$ + " ms" caption 10,t$ until scancode <> 0 dll_off terminate : end rem ============================================================================
| |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Chronomètre Mar 13 Oct 2015 - 0:10 | |
| Bonsoir à tous, Merci pour vos conseils et suggestions. J'ai donc adopté comme référence de temps, non plus le déclenchement d'un TIMER - qui s'est révélé imprécis -, mais, comme vous me l'avez suggéré, la base de temps Windows avec la fonction dll_call0("GetTickCount"). Cette base de temps Windows prenant référence sur l'horloge RTC pilotée par quartz du PC, la précision est excellente. Le TIMER ne sert plus qu'à rafraîchir l'affichage. Voici donc la version 2 de mon chronomètre. - Code:
-
DIM Compteur%, Heures%, Minutes%, Secondes%, dixiemes%, Still%, Couleur%, b%, Compteur_reference% DIM a DIM HH$, MM$, SS$, CC$ DIM Affichage$
LABEL Bouton_Start, Bouton_Pause, Bouton_Stop, Bouton_Raz, Changement_Couleur, Comptage
Affichage_Mask()
TIMER 6 TIMER_INTERVAL 6, 50 TIMER_OFF 6 ON_TIMER 6, Comptage
Couleur% = 1
dll_on "kernel32"
ON_CLICK 1, Bouton_Start ON_CLICK 2, Bouton_Pause ON_CLICK 3, Bouton_Stop ON_CLICK 4, Bouton_Raz ON_CLICK 5, Changement_Couleur
END ' ------------------------------------------------------------------------------ Bouton_Start: TIMER_ON 6 Compteur_Reference% = dll_call0("GetTickCount") b% = Compteur_Reference% STILL%=0 RETURN ' ------------------------------------------------------------------------------ Bouton_Pause: IF STILL%=1 THEN STILL%=0 : ELSE : STILL%=1 RETURN ' ------------------------------------------------------------------------------ Bouton_Stop: TIMER_OFF 6 RETURN ' ------------------------------------------------------------------------------ Bouton_Raz: TIMER_OFF 6 Compteur% = 0 CAPTION 5, "00:00:00,0" RETURN ' ------------------------------------------------------------------------------ Changement_Couleur: Couleur% = Couleur% + 1 IF Couleur% = 7 THEN Couleur% = 1 If couleur% = 1 THEN FONT_COLOR 5, 255,0,0 If couleur% = 2 THEN FONT_COLOR 5, 0,255,0 If couleur% = 3 THEN FONT_COLOR 5, 0,0,255 If couleur% = 4 THEN FONT_COLOR 5, 0,255,255 If couleur% = 5 THEN FONT_COLOR 5, 255,0,255 If couleur% = 6 THEN FONT_COLOR 5, 255,255,0 RETURN ' ------------------------------------------------------------------------------ Comptage: Compteur_Reference% = dll_call0("GetTickCount") Compteur% = (Compteur_reference% - b%)/100 IF Compteur% = 8619999 THEN Timer_OFF 6 IF Still%=0 dixiemes% = INT(FRAC(Compteur%/10)*10) CC$=STR$(dixiemes%) a=(compteur%-dixiemes%)/10 Heures%=INT(a/3600) IF Heures% < 10 THEN HH$="0"+STR$(Heures%): ELSE : HH$=STR$(Heures%) a=a-(heures%*3600) Minutes%=INT(a/60) IF Minutes% < 10 THEN MM$="0"+STR$(Minutes%): ELSE : MM$=STR$(Minutes%) a=a-(Minutes%*60) Secondes%=a IF Secondes% < 10 THEN SS$="0"+STR$(Secondes%): ELSE : SS$=STR$(Secondes%) CAPTION 5, HH$ + ":" + MM$ + ":" + SS$ + "," + CC$ END_IF RETURN '------------------------------------------------------------------------------- SUB Affichage_Mask()
WIDTH 0, 420 HEIGHT 0, 191 COLOR 0, 0,0,0 FONT_NAME 0, "arial" FONT_SIZE 0, 14
BUTTON 1 TOP 1, 100 LEFT 1, 2 WIDTH 1, 100 HEIGHT 1, 50 CAPTION 1, START
BUTTON 2 TOP 2, 100 LEFT 2, 102 WIDTH 2, 100 HEIGHT 2, 50 CAPTION 2, PAUSE
BUTTON 3 TOP 3, 100 LEFT 3, 202 WIDTH 3, 100 HEIGHT 3, 50 CAPTION 3, STOP
BUTTON 4 TOP 4, 100 LEFT 4, 302 WIDTH 4, 100 HEIGHT 4, 50 CAPTION 4, R.A.Z
ALPHA 5 TOP 5, 14 LEFT 5, 48 WIDTH 5, 380 HEIGHT 5, 80 FONT_SIZE 5, 48 FONT_COLOR 5, 255,0,0 CAPTION 5, "00:00:00,0"
END_SUB Prochaine étape : gagner en fluidité, peut être en substituant le TIMER par une boucle WHILE... A bientôt ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Chronomètre Mar 13 Oct 2015 - 1:44 | |
| Oh, malheureux... Ne fais jamais ça ! Une boucle while pour effectuer une attente, consomme en fait du temps d'unité centrale et ne fait rien d'autre. Autant dire que tu ralentis globalement tout ton système. L'utilisation d'un timer pour le rafraichissement est la bonne solution.
Et un éventuel scintillement ne vient pas du timer, mais du réaffichage lui-même. Envisage éventuellement une solution de double tampon: crée deux jeux d'objets complets pour tous les objets affichant des informations. Tu en affiches un, au début. Les objets du second jeu sont cachée par HIDE. Puis, pour l'affichage suivant, tu places toutes les valeurs dans les objets du deuxième jeu d'objets, tu le montres par une commande SHOW sur tous ces objets, et tu caches le premier jeu par un HIDE sur tous ses objets. Pour l'affichage suivant, tu fais l'inverse, et ainsi de suite. Prends bien soin de toujours faire la série des SHOW avant la série des HIDE. Tu n'auras plus de scintillement.
EDIT
La fonction GetTickCount est ce que tu peux avoir de plus précis dans un système Windows standard, à moins d'avoir une carte horloge dite "temps réel" avec une résolution plus fine, basée sur un quartz indépendant. Il faut se rappeler que Windows est un système "temps partagé" etnon un système "temps réel". Dans un système temps partagé, le temps d'unité centrale est attribué par le noyau du système, aux différentes tâches (processus, voire streams sous Windows), selon un système de priorités complexe. Et le fait qu'un timer termine son intervalle et déclenche son évènement ne signifie pas que la routine évènement soit exécutée immédiatement, bien au contraire. Cela signifie simplement que la demande d'exécution de la routine évènement est placée dans une file d'attente via le mécanisme des messages système, lui-même soumis aux règles de gestion par priorité. Et lorsque le noyau détermine que c'est au tour de cette demande particulière d'être exécutée, alors il va déclencher la routine, pas avant. Et ceci explique qu'une horloge gérée par un timer prend systématiquement du retard, jamais de l'avance. Par contre, si tu utilises le timer pour interroger la fonction GetTickCount, tu mets peut-être l'affichage de l'horloge à jour à des intervalles légèrement irréguliers, mais toujours avec la bonne valeur de l'horloge interne de Windows. Mais rappelons que cette horloge dépend de la qualité et de la fréquence du quartz de l'unité centrale et n'a pas non plus la précision d'une horloge atomique.
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Chronomètre Mar 13 Oct 2015 - 10:07 | |
| Il y a plus simple. Créer un picture sur le masque affiché. Créer un picture masqué sur lequel on pose l'alpha et faire le système de double tampon entre les images en affichant les valeurs sur l'image masqué puis en copiant cette image sur l'image affichée. Je pense que ça devrait le faire. (Ce sera plus discret, je pense que de "swapper" toute la fenêtre) | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Chronomètre Mar 13 Oct 2015 - 12:54 | |
| Bonjour à tous, Quelques précisions : Je n'ai pas de problème de scintillement. Je n'ai plus de problème de précision. Je voulais juste améliorer le défilement des dixièmes qui parfois, visuellement, traîne un peu ou accélère. Encore merci à tous pour vos remarques et conseils. @Klaus: Merci pour l'info d'une boucle WHILE ! | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Chronomètre Mer 14 Oct 2015 - 0:34 | |
| Bonjour à tous ! Voici la version (peut-être définitive ?) de mon chronomètre. - Code:
-
DIM Compteur%, Heures, Minutes, Secondes, Millisecondes, Still%, Couleur%, a, b%, Compteur_reference% DIM HH$, MM$, SS$, MS$ DIM Affichage$
LABEL Bouton_Start, Bouton_Pause, Bouton_Stop, Bouton_Raz, Changement_Couleur, Comptage
Affichage_Mask()
TIMER 6 TIMER_INTERVAL 6, 33 TIMER_OFF 6 ON_TIMER 6, Comptage
Couleur% = 1
dll_on "kernel32"
ON_CLICK 1, Bouton_Start ON_CLICK 2, Bouton_Pause ON_CLICK 3, Bouton_Stop ON_CLICK 4, Bouton_Raz ON_CLICK 5, Changement_Couleur
END ' ------------------------------------------------------------------------------ Bouton_Start: TIMER_ON 6 Compteur_Reference% = dll_call0("GetTickCount") b% = Compteur_Reference% - compteur% STILL%=0 RETURN ' ------------------------------------------------------------------------------ Bouton_Pause: IF STILL%=1 THEN STILL%=0 : ELSE : STILL%=1 RETURN ' ------------------------------------------------------------------------------ Bouton_Stop: TIMER_OFF 6 RETURN ' ------------------------------------------------------------------------------ Bouton_Raz: TIMER_OFF 6 Compteur% = 0 CAPTION 5, "00:00:00,0" RETURN ' ------------------------------------------------------------------------------ Changement_Couleur: Couleur% = Couleur% + 1 IF Couleur% = 7 THEN Couleur% = 1 SELECT Couleur% Case 1 : FONT_COLOR 5, 255,0,0 Case 2 : FONT_COLOR 5, 0,255,0 Case 3 : FONT_COLOR 5, 0,0,255 Case 4 : FONT_COLOR 5, 0,255,255 Case 5 : FONT_COLOR 5, 255,0,255 Case 6 : FONT_COLOR 5, 255,255,0 END_SELECT RETURN ' ------------------------------------------------------------------------------ Comptage: Compteur_Reference% = dll_call0("GetTickCount") Compteur% = (Compteur_reference% - b%) IF Compteur% = 8619999 THEN Timer_OFF 6 IF Still%=0 Heures = (Compteur% / (24*60*60*1000))*24 Minutes = frac(Heures)*60 Secondes = frac(Minutes)*60 Millisecondes = frac(Secondes)*1000 HH$ = str$(int(Heures)) : while len(HH$) < 2 : HH$ = "0" + HH$ : end_while MM$ = str$(int(Minutes)) : while len(MM$) < 2 : MM$ = "0" + MM$ : end_while SS$ = str$(int(Secondes)) : while len(SS$) < 2 : SS$ = "0" + SS$ : end_while MS$ = str$(int(Millisecondes)): while len(MS$) < 3 : MS$ = "0" + MS$ : end_while Affichage$ = HH$ + ":" + MM$ + ":" + SS$ + "," + left$(MS$,1) CAPTION 5, Affichage$ END_IF RETURN '------------------------------------------------------------------------------- SUB Affichage_Mask()
WIDTH 0, 420 HEIGHT 0, 191 COLOR 0, 0,0,0 FONT_NAME 0, "arial" FONT_SIZE 0, 14
BUTTON 1 TOP 1, 100 LEFT 1, 2 WIDTH 1, 100 HEIGHT 1, 50 CAPTION 1, START
BUTTON 2 TOP 2, 100 LEFT 2, 102 WIDTH 2, 100 HEIGHT 2, 50 CAPTION 2, PAUSE
BUTTON 3 TOP 3, 100 LEFT 3, 202 WIDTH 3, 100 HEIGHT 3, 50 CAPTION 3, STOP
BUTTON 4 TOP 4, 100 LEFT 4, 302 WIDTH 4, 100 HEIGHT 4, 50 CAPTION 4, R.A.Z
ALPHA 5 TOP 5, 14 LEFT 5, 48 WIDTH 5, 380 HEIGHT 5, 80 FONT_SIZE 5, 48 FONT_COLOR 5, 255,0,0 CAPTION 5, "00:00:00,0"
END_SUB Améliorations depuis la première version : - La précision de comptage devenue très bonne ; - Le défilement des dixièmes de secondes est devenu régulier ; - Rectification de la logique des boutons START et PAUSE. Merci à tous de votre aide.N’hésitez pas à me dire ce qu’il faudrait améliorer, que ce soit dans le fonctionnement ou dans l’écriture du programme. Je vais remplacer le titre du sujet "Chronomètre ..... imprécis" par "Chronomètre"
Dernière édition par Marc37 le Mer 14 Oct 2015 - 8:05, édité 1 fois | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Chronomètre Mer 14 Oct 2015 - 2:05 | |
| Salut Marc37. C’est presque parfait ! Pourquoi « presque » ? Change le s/p - Code:
-
Bouton_Pause: IF STILL%=1 THEN STILL%=0 : ELSE : STILL%=1 RETURN
Comme ceci - Code:
-
Bouton_Pause: IF STILL%=1 THEN STILL%=0 : ELSE : STILL%=1 if caption$(2) = "PAUSE" then caption 2,"CONTINUE" : else : caption 2,"PAUSE" RETURN
| |
| | | pascal10000
Nombre de messages : 812 Localisation : Troyes Date d'inscription : 05/02/2011
| Sujet: Re: Chronomètre Mer 14 Oct 2015 - 6:50 | |
| bonjour marc voila ce que je proposais et si ça peut t’amusé dans mon web j'ais une font lcdd.ttf ID: panoramic@pascal10000 MP:panoramic123 - Code:
-
DIM Compteur%, Heures%, Minutes%, Secondes%, dixiemes%, Still%, Couleur%, a DIM HH$, MM$, SS$, CC$ DIM Affichage$
LABEL Bouton_Start, Bouton_Pause, Bouton_Stop, Bouton_Raz, Changement_Couleur, Comptage
WIDTH 0, 420 HEIGHT 0, 191 COLOR 0, 0,0,0 FONT_NAME 0, "arial" FONT_SIZE 0, 14
BUTTON 1 TOP 1, 100 LEFT 1, 2 WIDTH 1, 100 HEIGHT 1, 50 CAPTION 1, START
BUTTON 2 TOP 2, 100 LEFT 2, 102 WIDTH 2, 100 HEIGHT 2, 50 CAPTION 2, PAUSE
BUTTON 3 TOP 3, 100 LEFT 3, 202 WIDTH 3, 100 HEIGHT 3, 50 CAPTION 3, STOP
BUTTON 4 TOP 4, 100 LEFT 4, 302 WIDTH 4, 100 HEIGHT 4, 50 CAPTION 4, R.A.Z
ALPHA 5 TOP 5, 14 LEFT 5, 48 WIDTH 5, 380 HEIGHT 5, 80 font_name 5,"LCDD" FONT_SIZE 5, 48 FONT_COLOR 5, 255,0,0 CAPTION 5, "00:00:00,0"
TIMER 6 TIMER_INTERVAL 6, 89 TIMER_OFF 6 ON_TIMER 6, Comptage
Couleur% = 1
ON_CLICK 1, Bouton_Start ON_CLICK 2, Bouton_Pause ON_CLICK 3, Bouton_Stop ON_CLICK 4, Bouton_Raz ON_CLICK 5, Changement_Couleur
END ' ------------------------------------------------------------------------------ Bouton_Start: TIMER_ON 6 STILL%=0 RETURN ' ------------------------------------------------------------------------------ Bouton_Pause: STILL%=1 RETURN ' ------------------------------------------------------------------------------ Bouton_Stop: TIMER_OFF 6 RETURN ' ------------------------------------------------------------------------------ Bouton_Raz: TIMER_OFF 6 Compteur% = 0 CAPTION 5, "00:00:00,0" RETURN ' ------------------------------------------------------------------------------ Changement_Couleur: Couleur% = Couleur% + 1 IF Couleur% = 7 THEN Couleur% = 1 If couleur% = 1 THEN FONT_COLOR 5, 255,0,0 If couleur% = 2 THEN FONT_COLOR 5, 0,255,0 If couleur% = 3 THEN FONT_COLOR 5, 0,0,255 If couleur% = 4 THEN FONT_COLOR 5, 0,255,255 If couleur% = 5 THEN FONT_COLOR 5, 255,0,255 If couleur% = 6 THEN FONT_COLOR 5, 255,255,0 RETURN ' ------------------------------------------------------------------------------ Comptage: Compteur%=Compteur%+1 IF Compteur% = 8619999 THEN Timer_OFF 6 IF Still%=0 dixiemes% =dixiemes% +1 if dixiemes%=10 then dixiemes%=0 CC$=STR$(dixiemes%) a=(compteur%-dixiemes%)/10 Heures%=INT(a/3600) IF Heures% < 10 THEN HH$="0"+STR$(Heures%): ELSE : HH$=STR$(Heures%) a=a-(heures%*3600) Minutes%=INT(a/60) IF Minutes% < 10 THEN MM$="0"+STR$(Minutes%): ELSE : MM$=STR$(Minutes%) a=a-(Minutes%*60) Secondes%=a IF Secondes% < 10 THEN SS$="0"+STR$(Secondes%): ELSE : SS$=STR$(Secondes%) CAPTION 5, HH$ + ":" + MM$ + ":" + SS$ + "," + CC$ END_IF RETURN | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Chronomètre Mer 14 Oct 2015 - 10:10 | |
| - Klaus a écrit:
- La fonction GetTickCount est ce que tu peux avoir de plus précis dans un système Windows standard, à moins d'avoir une carte horloge dite "temps réel" avec une résolution plus fine, basée sur un quartz indépendant.
Si,si, il y a encore plus précis. Fait une recherche sur 'high-resolution performance timer'; En panoramic pur c'est moins évident à coder car il ne connait que les entiers à 32bits et que dans le cas du 'high-resolution performance timer',faut manipuler des entiers 64bits. @Marc37 Il y a un pb dans chronomètre, si tu le démarre puis qu'au bout de qq secondes tu appuies sur pause, ça c'est ok. Maintenant, si tu appuies à nouveau sur pause, le chrono ne redémarre pas de la valeur sur laquelle il était arreté, mais de la valeur sur laquelle il était arrêté + le temps écoulé depuis l'appui sur pause. Du coup, le bouton pause n'en n'est plus vaiment un. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Chronomètre Mer 14 Oct 2015 - 13:38 | |
| - Citation :
- Si,si, il y a encore plus précis. Fait une recherche sur 'high-resolution performance timer
J'ai rendu ce timer accessible via KGF.dll. Ceci dit, il y a des contraintes dues aux limitations à 32 bits, et d'autres liées à la fiabilité de ce timer qui dépend largement du hardware et est soumis aux bugs à la fois du hardware et de Windows lui-même. Toutes ces contraintes le limitent à un usage de mesure d'intevalles inférieurs à 20 minutes, grosso modo. Avec la nouvelle version de KGF.dll, j'ai fait ceci, pour mesurer la durée de la commande "pause 2000": - Code:
-
dim res%, ticks%, tim1%, tim2%
dll_on "KGF.dll"
ticks% = dll_call1("GetHighPerformanceTimer",0) res% = dll_call1("GetHighPerformanceTimer",1) tim1% = dll_call1("GetHighPerformanceTimer",2) pause 200 tim2% = dll_call1("GetHighPerformanceTimer",2) message str$((tim2%-tim1%)*1000/ticks%) end
| |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Chronomètre Mer 14 Oct 2015 - 17:53 | |
| @Pascal1000 : Merci pour la police LCDD.TTF. Ne sois pas vexé, mais je vais garder la police ARIAL qui est déjà installée avec toutes les versions de Windows.
@Papydall : Merciiii !
@Silverman : La touche PAUSE ne sert pas à interrompre le comptage, mais à figer l’affichage. Si tu veux interrompre le comptage, prends la touche STOP, puis START pour reprendre.
@Klaus : Merciiii !
@ tous : Merci à tous d’avoir participé et testé ce chronomètre. La précision au delà du dixième n’est pas nécessaire pour ce chronomètre. Rien que le temps de réaction de l’être humain pour appuyer sur le bouton de la souris, ajouter au temps de réaction de la machine, plusieurs dixièmes de secondes ont eu le temps de s’échapper ! Voilà pourquoi, lors de l’étude préliminaire, je n’avais prévu d’afficher qu’un seul chiffre après les secondes, c’est à dire les dixièmes.
En informatique, ce n’est jamais fini… On peut toujours en ajouter ! Entre autres, ajouter la commande START/STOP à partir du clavier (touche ESPACE), mémoriser sur le disque dur la position de la fenêtre et la couleur de l’afficheur…
Dernière édition par Marc37 le Sam 11 Nov 2017 - 12:40, édité 1 fois | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Chronomètre Dim 18 Oct 2015 - 12:45 | |
| La prochaine version aura la variable NUMBER_TICKS qui donnera le nombre de millisecondes écoulées depuis l'allumage du PC. _________________ username : panoramic@jack-panoramic password : panoramic123 | |
| | | Contenu sponsorisé
| Sujet: Re: Chronomètre | |
| |
| | | | Chronomètre | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |