FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Chronomètre Emptypar Pedro Sam 23 Nov 2024 - 15:50

» Un autre pense-bête...
Chronomètre Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Chronomètre Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Chronomètre Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Chronomètre Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Chronomètre Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Chronomètre Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Chronomètre Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Chronomètre Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Chronomètre Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Chronomètre Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Chronomètre Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Chronomètre Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Chronomètre Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Chronomètre Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
-17%
Le deal à ne pas rater :
(Black Friday) Apple watch Apple SE GPS + Cellular 44mm (plusieurs ...
249 € 299 €
Voir le deal

 

 Chronomètre

Aller en bas 
+4
silverman
pascal10000
Jean Claude
Marc
8 participants
AuteurMessage
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Chronomètre Empty
MessageSujet: Chronomètre   Chronomètre EmptyDim 11 Oct 2015 - 19:15

Bonjour à tous,

Je viens de réaliser un petit chronomètre :

Chronomètre Chrono10

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
Revenir en haut Aller en bas
Jean Claude

Jean Claude


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

Chronomètre Empty
MessageSujet: Re: Chronomètre   Chronomètre EmptyDim 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+
Revenir en haut Aller en bas
pascal10000

pascal10000


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

Chronomètre Empty
MessageSujet: Re: Chronomètre   Chronomètre EmptyDim 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
Revenir en haut Aller en bas
silverman

silverman


Nombre de messages : 970
Age : 52
Localisation : Picardie
Date d'inscription : 18/03/2015

Chronomètre Empty
MessageSujet: Re: Chronomètre   Chronomètre EmptyDim 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
Revenir en haut Aller en bas
pascal10000

pascal10000


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

Chronomètre Empty
MessageSujet: Re: Chronomètre   Chronomètre EmptyDim 11 Oct 2015 - 22:45

silverman
c'est sympas ton p'tit truc mais vas
convertir 11815359 en seconde !!!!!!!!!!
Revenir en haut Aller en bas
Jean Claude

Jean Claude


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

Chronomètre Empty
MessageSujet: Re: Chronomètre   Chronomètre EmptyLun 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+
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Chronomètre Empty
MessageSujet: Re: Chronomètre   Chronomètre EmptyLun 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 !
Revenir en haut Aller en bas
silverman

silverman


Nombre de messages : 970
Age : 52
Localisation : Picardie
Date d'inscription : 18/03/2015

Chronomètre Empty
MessageSujet: Re: Chronomètre   Chronomètre EmptyLun 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)"
Revenir en haut Aller en bas
papydall

papydall


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

Chronomètre Empty
MessageSujet: Re: Chronomètre   Chronomètre EmptyLun 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 ============================================================================
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Chronomètre Empty
MessageSujet: Re: Chronomètre   Chronomètre EmptyMar 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 !
Revenir en haut Aller en bas
Klaus

Klaus


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

Chronomètre Empty
MessageSujet: Re: Chronomètre   Chronomètre EmptyMar 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.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Chronomètre Empty
MessageSujet: Re: Chronomètre   Chronomètre EmptyMar 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)
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Chronomètre Empty
MessageSujet: Re: Chronomètre   Chronomètre EmptyMar 13 Oct 2015 - 12: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
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Chronomètre Empty
MessageSujet: Re: Chronomètre   Chronomètre EmptyMer 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
Revenir en haut Aller en bas
papydall

papydall


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

Chronomètre Empty
MessageSujet: Re: Chronomètre   Chronomètre EmptyMer 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
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
pascal10000

pascal10000


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

Chronomètre Empty
MessageSujet: Re: Chronomètre   Chronomètre EmptyMer 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
Chronomètre Captur17


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
silverman

silverman


Nombre de messages : 970
Age : 52
Localisation : Picardie
Date d'inscription : 18/03/2015

Chronomètre Empty
MessageSujet: Re: Chronomètre   Chronomètre EmptyMer 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.
Revenir en haut Aller en bas
Klaus

Klaus


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

Chronomètre Empty
MessageSujet: Re: Chronomètre   Chronomètre EmptyMer 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
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Chronomètre Empty
MessageSujet: Re: Chronomètre   Chronomètre EmptyMer 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
Revenir en haut Aller en bas
Jack
Admin
Jack


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

Chronomètre Empty
MessageSujet: Re: Chronomètre   Chronomètre EmptyDim 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.

_________________
Chronomètre Webdav username : panoramic@jack-panoramic password : panoramic123
Revenir en haut Aller en bas
https://panoramic.1fr1.net
Contenu sponsorisé





Chronomètre Empty
MessageSujet: Re: Chronomètre   Chronomètre Empty

Revenir en haut Aller en bas
 
Chronomètre
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Comme un timer. Mais un chronomètre
» Chronomètre utilisant la variable NUMBER_TICK

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: