JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Minuteur Lun 25 Jan 2021 - 15:17 | |
| Affichage en mode digital, affiché arbitrairement en haut à droite de l'écran. Déclenchement soit à une heure donnée, soit au bout d'une durée donnée: - Code:
-
Minuteur(1,"00:01:16"): ' durée 1m16s Terminate
SUB Minuteur(Type,t$) ' Affichage d'un minuteur, Type = 0 heure échéance, ou =1 durée ' Format t$ = "HH:MM:SS" IF LABEL("Qt") = 0 THEN LABEL Qt DIM_LOCAL fm,f,w,h,hh,mm,ss,i,j,a$,b$,c$ DIM_LOCAL tt,tr hh = VAL(LEFT$(t$,2)): mm = VAL(MID$(t$,4,2)): ss = VAL(RIGHT$(t$,2)) w = 20: h = 35: ' dimensions d'un Digit1, modulable fm = 900 FORM fm: BORDER_HIDE fm: HEIGHT fm,h: WIDTH fm,8*w: LEFT fm,SCREEN_X-WIDTH(fm) COLOR fm,0,0,0: ON_CLICK fm,Qt FOR i = 1 TO 8 j = fm+i: DIGIT1 j: PARENT j,fm: LEFT j,(i-1)*w: WIDTH J,w: HEIGHT j,h NEXT i DELETE fm+3: DELETE fm+6 IF Type = 0 WHILE TIME$ <> t$ a$ = TIME$ FOR i = 1 TO 8 IF i<>3 AND i<>6 THEN CAPTION fm+i,VAL(MID$(a$,i,1)) NEXT i PAUSE 200 END_WHILE ELSE a$=RIGHT$("0"+STR$(hh),2): b$=RIGHT$("0"+STR$(mm),2): c$=RIGHT$("0"+STR$(ss),2) tt = 3600*VAL(a$)+60*VAL(b$)+VAL(c$): tr = tt a$=a$+":"+b$+":"+c$ FOR i = 1 TO 8 IF i<>3 AND i<>6 THEN CAPTION fm+i,VAL(MID$(a$,i,1)) NEXT i b$ = TIME$ WHILE tr > 0 a$ = TIME$ IF a$ <> b$ tr = tr-1 hh = INT(tr/3600): mm = INT((tr-hh*3600)/60): ss = tr-hh*3600-mm*60 a$=RIGHT$("0"+STR$(hh),2): CAPTION fm+1,LEFT$(a$,1): CAPTION fm+2,RIGHT$(a$,1) a$=RIGHT$("0"+STR$(mm),2): CAPTION fm+4,LEFT$(a$,1): CAPTION fm+5,RIGHT$(a$,1) a$=RIGHT$("0"+STR$(ss),2): CAPTION fm+7,LEFT$(a$,1): CAPTION fm+8,RIGHT$(a$,1) END_IF b$ = TIME$ PAUSE 200 END_WHILE END_IF WHILE f = 0: COLOR fm,255,0,0: PAUSE 300: COLOR fm,0,0,0: PAUSE 300: END_WHILE DELETE fm: EXIT_SUB Qt: f = 1 RETURN END_SUB On peut évidemment moduler pas mal de chose, peut-être donner à la sub les dimensions du minuteur, sa position sur l'écran, la couleur des chiffres, etc. Pareil pour l'action finale, là j'ai mis un clignotement avec arrêt sur clic (dans les zones entre chiffres, mais ça peut logiquement se faire dans le programme appelant. | |
|
jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: Minuteur Lun 25 Jan 2021 - 19:22 | |
| Ouahhh ! Superbe pour faire cuire des oeufs ! | |
|
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Minuteur Lun 25 Jan 2021 - 19:46 | |
| Merci JL35 ! C’est efficace ! En mode 0, on n’a l’impression de se faire "gruger" d’une seconde parce que l’affichage ne se met pas à jour dès que d’alarme survient. J’ai deux suggestions pour éviter ce "désagrément" : 1) déplacer la pause en tête de boucle while : - Code:
-
... IF Type = 0 WHILE TIME$ <> t$ PAUSE 200 a$ = TIME$ FOR i = 1 TO 8 IF i<>3 AND i<>6 THEN CAPTION fm+i,VAL(MID$(a$,i,1)) NEXT i END_WHILE ELSE ... 2) tester la condition après l’affichage en employant repeat until : - Code:
-
... IF Type = 0 repeat PAUSE 200 a$ = TIME$ FOR i = 1 TO 8 IF i<>3 AND i<>6 THEN CAPTION fm+i,VAL(MID$(a$,i,1)) NEXT i until TIME$ = t$ ELSE ... | |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Minuteur Lun 25 Jan 2021 - 19:57 | |
| Oui, bon, tu as évidemment raison dans l'absolu Marc, si on veut pinailler à la seconde près... C'est peut-être nécessaire dans certains cas. A la fin du temps écoulé on peut déclencher ce qu'on veut, une alarme sonore par exemple. Pour ne pas rater tes oeufs jjn4 !
| |
|