FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» GRID_LOAD
par Jean Claude Aujourd'hui à 21:04

» Rotation d'une image d'un angle quelconque
par Jean Claude Aujourd'hui à 20:57

» HVIEWER
par Yannick Aujourd'hui à 20:31

» StratégoV8 et V9
par Jean Claude Aujourd'hui à 20:13

» KGF_dll - nouvelles versions
par Klaus Hier à 21:28

» Déformation d'image en trapèze
par mindstorm Hier à 21:06

» Mah-Jong américain
par Jean Claude Lun 15 Jan 2018 - 19:37

» Problème avec Deepl
par Klaus Lun 15 Jan 2018 - 0:34

» Quelques nouvelles ...
par Jean Claude Ven 12 Jan 2018 - 22:40

» Renommer les instructions ITEM_... ?
par Jicehel Ven 12 Jan 2018 - 18:56

» Ludothèque Panoramic
par jjn4 Ven 12 Jan 2018 - 18:11

» sous-programmes et fonctions
par Jack Ven 12 Jan 2018 - 17:51

» Mah-Jong français
par Jean Claude Jeu 11 Jan 2018 - 22:15

» panoramic 0.9.28
par gigi75 Ven 5 Jan 2018 - 14:06

» Un jeu qui va vous énerver!
par Jean Claude Jeu 4 Jan 2018 - 22:05

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Janvier 2018
LunMarMerJeuVenSamDim
1234567
891011121314
15161718192021
22232425262728
293031    
CalendrierCalendrier

Partagez | 
 

 Chronomètre

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Marc



Nombre de messages : 582
Age : 56
Localisation : TOURS
Date d'inscription : 18/03/2014

MessageSujet: Chronomètre   Dim 11 Oct 2015 - 20: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 - 1:35, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5127
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Chronomètre   Dim 11 Oct 2015 - 20: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+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
pascal10000

avatar

Nombre de messages : 666
Localisation : Troyes
Date d'inscription : 05/02/2011

MessageSujet: Re: Chronomètre   Dim 11 Oct 2015 - 21: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

Nombre de messages : 483
Age : 45
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: Re: Chronomètre   Dim 11 Oct 2015 - 21: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
pascal10000

avatar

Nombre de messages : 666
Localisation : Troyes
Date d'inscription : 05/02/2011

MessageSujet: Re: Chronomètre   Dim 11 Oct 2015 - 23:45

silverman
c'est sympas ton p'tit truc mais vas
convertir 11815359 en seconde !!!!!!!!!!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5127
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Chronomètre   Lun 12 Oct 2015 - 8: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+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Marc



Nombre de messages : 582
Age : 56
Localisation : TOURS
Date d'inscription : 18/03/2014

MessageSujet: Re: Chronomètre   Lun 12 Oct 2015 - 14: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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

Nombre de messages : 483
Age : 45
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: Re: Chronomètre   Lun 12 Oct 2015 - 18: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)"
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5623
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Chronomètre   Lun 12 Oct 2015 - 21: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 ============================================================================
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Marc



Nombre de messages : 582
Age : 56
Localisation : TOURS
Date d'inscription : 18/03/2014

MessageSujet: Re: Chronomètre   Mar 13 Oct 2015 - 1: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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10413
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Chronomètre   Mar 13 Oct 2015 - 2: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jicehel

avatar

Nombre de messages : 5876
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Chronomètre   Mar 13 Oct 2015 - 11: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)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Marc



Nombre de messages : 582
Age : 56
Localisation : TOURS
Date d'inscription : 18/03/2014

MessageSujet: Re: Chronomètre   Mar 13 Oct 2015 - 13:54

Bonjour à tous,

Quelques précisions :
Je n'ai pas de problème de scintillement.  Very Happy
Je n'ai plus de problème de précision.  bounce
Je voulais juste améliorer le défilement des dixièmes qui parfois, visuellement, traîne un peu ou accélère.  Rolling Eyes

Encore merci à tous pour vos remarques et conseils.

@Klaus: Merci pour l'info d'une boucle WHILE !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Marc



Nombre de messages : 582
Age : 56
Localisation : TOURS
Date d'inscription : 18/03/2014

MessageSujet: Re: Chronomètre   Mer 14 Oct 2015 - 1: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 - 9:05, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5623
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Chronomètre   Mer 14 Oct 2015 - 3: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
pascal10000

avatar

Nombre de messages : 666
Localisation : Troyes
Date d'inscription : 05/02/2011

MessageSujet: Re: Chronomètre   Mer 14 Oct 2015 - 7: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

Nombre de messages : 483
Age : 45
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: Re: Chronomètre   Mer 14 Oct 2015 - 11: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10413
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Chronomètre   Mer 14 Oct 2015 - 14: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Marc



Nombre de messages : 582
Age : 56
Localisation : TOURS
Date d'inscription : 18/03/2014

MessageSujet: Re: Chronomètre   Mer 14 Oct 2015 - 18: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 - 14:40, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jack
Admin
avatar

Nombre de messages : 1779
Date d'inscription : 28/05/2007

MessageSujet: Re: Chronomètre   Dim 18 Oct 2015 - 13: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://panoramic.free-boards.net
Contenu sponsorisé




MessageSujet: Re: Chronomètre   

Revenir en haut Aller en bas
 
Chronomètre
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Un arbuste en 30 secondes chrono
» RPG maker VX Ace
» ETREX 20 : Chronomètre

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: