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 |
|
|
| Une horloge digitale | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Une horloge digitale Dim 21 Juil 2019 - 13:57 | |
| Suite au Morphing de l'ami papydall, dont je me suis largement inspiré, en plus utilitaire mais en bien moins joli... - Code:
-
DIM wp,hp,wd,x,y,w,h,n,t$,hh$,mm$,ss$,a$,h1,h2,m1,m2,s1,s2,i%,j% DIM ex,ey,sh1,sh2,sm1,sm2,ss1,ss2 LABEL Qt,Afh sh1=-1: sh2=-1: sm1=-1: sm2=-1: ss1=-1: ss2=-1 wp = 50: ' largeur d'une case 'chiffre', modulable hp = 9*wp/5: ' une case ex = wp/5: ey = hp/9: ' position du chiffre dans la case w = wp-2*ex: h = hp-2*ey: ' dimensions un chiffre wd = 2*ex: ' largeur du séparateur 2 points
BORDER_HIDE 0: WIDTH 0,6*wp+2*wd: HEIGHT 0,hp PICTURE 1: FULL_SPACE 1: ON_CLICK 1,Qt COLOR 1,0,0,0: 2D_TARGET_IS 1: COLOR 1,0,0,0: 2D_FILL_OFF 2D_PEN_COLOR 255,0,0: i% = wp/7: IF i%>20 THEN i%=20 2D_PEN_WIDTH i% IMAGE 2: 2D_IMAGE_COPY 2,0,0,wp,hp y = ey x = 2*wp+wd/2: Digit(1,10,x,y+h/4,wd,y+3*h/4): ' deux points (Heures/Minutes) x = 4*wp+wd+wd/2: Digit(1,10,x,y+h/4,wd,y+3*h/4): ' deux points (Minutes/Sec) WHILE 2>1 GOSUB Afh: PAUSE 500 END_WHILE END ' ============================================================================== Qt: TERMINATE ' ============================================================================== Afh: t$ = TIME$ hh$ = LEFT$(t$,2): mm$ = MID$(t$,4,2): ss$ = RIGHT$(t$,2) h1 = VAL(LEFT$(hh$,1)): h2 = VAL(RIGHT$(hh$,1)) m1 = VAL(LEFT$(mm$,1)): m2 = VAL(RIGHT$(mm$,1)) s1 = VAL(LEFT$(ss$,1)): s2 = VAL(RIGHT$(ss$,1)) y = ey x = wp/5: IF h1<>sh1 THEN Digit(1,h1,x,y,w,h) x = wp+wp/5: IF h2<>sh2 THEN Digit(1,h2,x,y,w,h) x = 2*wp+wd+wp/5: IF m1<>sm1 THEN Digit(1,m1,x,y,w,h) x = 3*wp+wd+wp/5: IF m2<>sm2 THEN Digit(1,m2,x,y,w,h) x = 4*wp+2*wd+wp/5: IF s1<>ss1 THEN Digit(1,s1,x,y,w,h) x = 5*wp+2*wd+wp/5: IF s2<>ss2 THEN Digit(1,s2,x,y,w,h) sh1=h1: sh2=h2: sm1=m1: sm2=m2: ss1=s1: ss2=s2 RETURN ' ============================================================================== SUB Digit(p,n,x,y,w,h) 2D_IMAGE_PASTE 2,x-wp/5,y-hp/9: ' raz de la zone SELECT n CASE 0: 2D_RECTANGLE x,y,x+w,y+h CASE 1: 2D_LINE x+w,y,x+w,y+h CASE 2: 2D_LINE x,y,x+w,y: 2D_POLY_TO x+w,y+h/2: 2D_POLY_TO x,y+h/2 2D_POLY_TO x,y+h: 2D_POLY_TO x+w,y+h CASE 3: 2D_LINE x,y,x+w,y: 2D_POLY_TO x+w,y+h/2: 2D_POLY_TO x,y+h/2 2D_POLY_TO x+w,y+h/2: 2D_POLY_TO x+w,y+h: 2D_POLY_TO x,y+h CASE 4: 2D_LINE x,y,x,y+h/2: 2D_POLY_TO x+w,y+h/2: 2D_POLY_TO x+w,y 2D_POLY_TO x+w,y+h CASE 5: 2D_LINE x+w,y,x,y: 2D_POLY_TO x,y+h/2: 2D_POLY_TO x+w,y+h/2 2D_POLY_TO x+w,y+h: 2D_POLY_TO x,y+h CASE 6: 2D_LINE x+w,y,x,y: 2D_POLY_TO x,y+h: 2D_POLY_TO x+w,y+h 2D_POLY_TO x+w,y+h/2: 2D_POLY_TO x,y+h/2 CASE 7: 2D_LINE x,y,x+w,y: 2D_POLY_TO x+w,y+h CASE 8: 2D_RECTANGLE x,y,x+w,y+h: 2D_LINE x,y+h/2,x+w,y+h/2 CASE 9: 2D_LINE x,y+h,x+w,y+h: 2D_POLY_TO x+w,y: 2D_POLY_TO x,y 2D_POLY_TO x,y+h/2: 2D_POLY_TO x+w,y+h/2 CASE 10: 2D_CIRCLE x,y,w/8: 2D_CIRCLE x,y+h/2,w/8: ' deux points END_SELECT END_SUB ' ============================================================================== On peut varier l'emplacement (position du Form 0, ici 0,0 coin supérieur gauche de l'écran), et les dimensions: la variable wp qui représente la largeur d'un chiffre, en pixels (ici 50), est le seul paramètre à modifier, le reste s'adapte. Et il suffit de cliquer sur la pendule pour la faire disparaître.
Dernière édition par JL35 le Dim 21 Juil 2019 - 18:55, édité 2 fois | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 21 Juil 2019 - 14:08 | |
| c'est joli. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Une horloge digitale Dim 21 Juil 2019 - 14:09 | |
| Salut Yannick, joli, je sais pas trop, utile peut-être ? | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Une horloge digitale Dim 21 Juil 2019 - 14:46 | |
| | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Une horloge digitale Dim 21 Juil 2019 - 15:58 | |
| Et moi, et moi, et moi aussi je veux jouer. Sans TIMER et avec DIGIT1 panoramic. - Code:
-
rem ============================================================================ rem Horloge Digitale rem ============================================================================ dim i width 0,400 : height 0,150 : caption 0,"Horloge digitale" picture 10 : full_space 10 : 2d_target_is 10 : color 10,200,100,50 for i = 20 to 25 : digit1 i : top i,10 : left i,20 + (i-20)*60 : next i while "Papydall" = "Papydall" Affiche() end_while terminate rem ============================================================================ SUB Affiche() dim_local h$,m$,s$,h1$,h2$,m1$,m2$,s1$,s2$ h$ = str$(time_hour) : if len(h$) < 2 then h$ = "0" + h$ m$ = str$(time_minute) : if len(m$) < 2 then m$ = "0" + m$ s$ = str$(time_second) : if len(s$) < 2 then s$ = "0" + s$ h1$ = left$(h$,1) : h2$ = right$(h$,1) m1$ = left$(m$,1) : m2$ = right$(m$,1) s1$ = left$(s$,1) : s2$ = right$(s$,1) caption 20,h1$ : caption 21,h2$ caption 22,m1$ : caption 23,m2$ caption 24,s1$ : caption 25,s2$ END_SUB rem ============================================================================
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Une horloge digitale Dim 21 Juil 2019 - 16:50 | |
| Trop forts les mecs, effectivement c'est plus simple que de dessiner soi-même les caractères !
Minibug, il me semble que la police Digital-7 est en standard chez moi ? je ne me souviens pas de l'avoir téléchargée...
Je regarde de plus près la solution papydall, mais déjà, sans Timer, c'est séduisant. Oui en fait sans Timer (comme pour moi), mais le programme boucle en permanence.. et du coup on ne peut pas l'arrêter, le clic sur la croix est inefficace (chez moi du moins), obligé de recourir à des moyens... brutaux. Ça me paraît bien mieux de faire une PAUSE de 1000, ça aère dans le temps. Par contre ce mot-clé DIGIT1 est une trouvaille pour moi, merci papydall. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Une horloge digitale Dim 21 Juil 2019 - 17:59 | |
| - JL35 a écrit:
- Minibug, il me semble que la police Digital-7 est en standard chez moi ? je ne me souviens pas de l'avoir téléchargée...
Moi aussi. - JL35 a écrit:
- Je regarde de plus près la solution papydall, mais déjà, sans Timer, c'est séduisant.
Oui en fait sans Timer (comme pour moi), mais le programme boucle en permanence.. et du coup on ne peut pas l'arrêter, le clic sur la croix est inefficace (chez moi du moins), obligé de recourir à des moyens... brutaux. . Programme modifié pour pouvoir en sortir en appuyant sur la touche Echape / <ESC> - Code:
-
rem ============================================================================ rem Horloge Digitale rem ============================================================================ dim i width 0,400 : height 0,100 : border_hide 0 picture 10 : full_space 10 : 2d_target_is 10 : color 10,200,100,50 for i = 20 to 25 : digit1 i : top i,10 : left i,20 + (i-20)*60 : next i repeat : Affiche() : until scancode = 27 : ' <ESC> pour arrêter terminate rem ============================================================================ SUB Affiche() dim_local h$,m$,s$,h1$,h2$,m1$,m2$,s1$,s2$ h$ = str$(time_hour) : if len(h$) < 2 then h$ = "0" + h$ m$ = str$(time_minute) : if len(m$) < 2 then m$ = "0" + m$ s$ = str$(time_second) : if len(s$) < 2 then s$ = "0" + s$ h1$ = left$(h$,1) : h2$ = right$(h$,1) m1$ = left$(m$,1) : m2$ = right$(m$,1) s1$ = left$(s$,1) : s2$ = right$(s$,1) caption 20,h1$ : caption 21,h2$ caption 22,m1$ : caption 23,m2$ caption 24,s1$ : caption 25,s2$ END_SUB rem ============================================================================
- JL35 a écrit:
- Par contre ce mot-clé DIGIT1 est une trouvaille pour moi, merci papydall.
Hé mon ami, tu dois te remettre à l’école de Panoramic : pas seulement DIGIT1, mais aussi TIME_HOUR, TIME_MINUTE, TIME_SECOND. De toutes les façons, merci JL35 : tu as réanimé le Forum. Et pour pinailler … Je préfère utiliser le mot horloge au lieu de pendule, car bien qu’une pendule soit une horloge, toutes les horloges ne sont pas forcement des pendules. Pour une pendule, le mouvement est mécanique, par contre on est ici en face d’un … mouvement électronique. Bon, je sors ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Une horloge digitale Dim 21 Juil 2019 - 19:04 | |
| Bon papydall, d'accord pour horloge au lieu de pendule, je dois bien reconnaître que tu as raison et j'ai changé le titre. (je n'ai pas osé ajouter un balancier sous les chiffres...) N'empêche que ta pendule ton horloge ne s'arrête pas, touche Esc ou pas ! Et que le programme mouline en permanence, sans temps morts pour autre chose... Je connais les TIME_HOUR, MINUTE, SECOND, mais je ne vois pas l'intérêt ici alors qu'on a les 3 infos d'un coup avec TIME$ bien calibré (MID$, avec un résultat sous forme de chaîne à 2 chiffres). Ma nouvelle version: (position sur l'écran modulable avec les valeurs x,y, dimensions avec w = largeur d'un chiffre, arrêt en cliquant sur un des deux deux-points) - Code:
-
rem ============================================================================ rem Horloge Digitale rem ============================================================================ DIM x,y,w,h,t$,h1$,h2$,m1$,m2$,s1$,s2$ LABEL Qt,Aff w = 40: h = 5*w/3: ' dimensions des chiffres x = 0: y = 0: ' position sur l'écran BORDER_HIDE 0: TOP 0,y: LEFT 0,x: WIDTH 0,7*w: HEIGHT 0,h: COLOR 0,0,0,0 DIGIT1 1: WIDTH 1,w: HEIGHT 1,h DIGIT1 2: LEFT 2,LEFT(1)+WIDTH(1): WIDTH 2,w: HEIGHT 2,h PICTURE 3: LEFT 3,LEFT(2)+WIDTH(2): WIDTH 3,w/2: HEIGHT 3,h DIGIT1 4: LEFT 4,LEFT(3)+WIDTH(3): WIDTH 4,w: HEIGHT 4,h DIGIT1 5: LEFT 5,LEFT(4)+WIDTH(4): WIDTH 5,w: HEIGHT 5,h PICTURE 6: LEFT 6,LEFT(5)+WIDTH(5): WIDTH 6,w/2: HEIGHT 6,h DIGIT1 7: LEFT 7,LEFT(6)+WIDTH(6): WIDTH 7,w: HEIGHT 7,h DIGIT1 8: LEFT 8,LEFT(7)+WIDTH(7): WIDTH 8,w: HEIGHT 8,h COLOR 1,255,0,0: COLOR 2,255,0,0: COLOR 4,255,0,0: COLOR 5,255,0,0 COLOR 7,255,0,0: COLOR 8,255,0,0: COLOR 3,0,0,0: COLOR 6,0,0,0 ON_CLICK 3,Qt: ON_CLICK 6,Qt 2D_TARGET_IS 3: 2D_FILL_COLOR 255,0,0: 2D_FILL_ON 2D_CIRCLE w/4,h/4,w/8: 2D_CIRCLE w/4,3*h/4,w/8 2D_TARGET_IS 6: 2D_FILL_COLOR 255,0,0: 2D_FILL_ON 2D_CIRCLE w/4,h/4,w/8: 2D_CIRCLE w/4,3*h/4,w/8 GOSUB Aff END ' ============================================================================ Qt: terminate ' ============================================================================ Aff: WHILE 2>1 t$ = TIME$ h1$ = LEFT$(t$,1): h2$ = MID$(t$,2,1) m1$ = MID$(t$,4,1): m2$ = MID$(t$,5,1) s1$ = MID$(t$,7,1): s2$ = MID$(t$,8,1) CAPTION 1,h1$: CAPTION 2,h2$: CAPTION 4,m1$: CAPTION 5,m2$ CAPTION 7,s1$: CAPTION 8,s2$ PAUSE 1000 END_WHILE RETURN ' ============================================================================ | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Une horloge digitale Dim 21 Juil 2019 - 19:36 | |
| - JL35 a écrit:
- N'empêche que ta pendule ton horloge ne s'arrête pas, touche Esc ou pas !
Comment ça ? Chez moi l’appui sur <ESC> arrête immédiatement l’horloge. Tu as un problème avec SCANCODE alors ? Remarque : 1/ Pour arrêter ton horloge, il faut cliquer sur ( ou entre ) les cercles faisant fonction des points de séparation (ce n’était pas évident avant d’avoir consulté le code). 2 / Je ne pense pas que PAUSE 1000 soit nécessaire : le CAPTION est suffisant pour modifier l'affichage, non ? | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Une horloge digitale Dim 21 Juil 2019 - 19:49 | |
| | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Une horloge digitale Dim 21 Juil 2019 - 19:51 | |
| Eh bien papydall, je confirme que l'appui sur Esc est inopérant chez moi pour arrêter ton programme... je sais pas pourquoi et c'est bizarre ... Pour arrêter le mien avec clic sur les deux-points, je l'avais précisé ci-dessus...
Quant au PAUSE, bien sûr le Caption est nécessaire pour modifier l'affichage, mais dans mon esprit, le PAUSE permet au programme de souffler et au système de prendre la main pour faire autre chose... mais peut-être que je me fais des illusions... Après tout le programme n'a besoin d'intervenir pour changer l'affichage que toutes les secondes, et non pas de le faire en permanence.
On s'est croisés Minibug, mais c'est vrai que ton programme est très bien et surtout très simple. Simplement je remplacerais peut-être le TIMER gourmand par un PAUSE... | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Une horloge digitale Dim 21 Juil 2019 - 20:02 | |
| Je viens de tester ton code JL35 ! J'ai juste supprimé la ligne 19 : ON_CLICK 3,Qt: ON_CLICK 6,Qtet j'ai rajouter : IF SCANCODE=27 THEN TERMINATE juste avant : PAUSE 1000. Comme cela tu peut quitter par la touche ESC sans difficulté. C'est vrai que c'est un peu un jeu de précision pour viser les points... | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Une horloge digitale Dim 21 Juil 2019 - 20:11 | |
| Et comme je suis bon prince ( ) je vous livre mon dernier code... Encore plus court avec seulement 10 lignes !!! - Code:
-
BORDER_HIDE 0 : WIDTH 0,330 : HEIGHT 0,100 COLOR 0,0,0,0 : FONT_COLOR 0,255,0,0 : FONT_NAME 0,"DIGITAL-7" ALPHA 1 : PARENT 1,0 : LEFT 1,20 : FONT_SIZE 1,70
REPEAT CAPTION 1,TIME$ PAUSE 1000 UNTIL SCANCODE=27
TERMINATE | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Une horloge digitale Dim 21 Juil 2019 - 20:13 | |
| Ben Minibug je crois bien que c'est toi le meilleur ! J'ai bricolé légèrement ton code pour automatiser les dimensions de la chose, il suffit de modifier la variable sz (taille des caractères) en tête. Et ça correspond tout à fait à ce que je cherchais à faire, en très simple: - Code:
-
DIM sz LABEL Qt BORDER_HIDE 0 sz = 140: ' Taille des chiffres ALPHA 1: LEFT 1,0: FONT_NAME 1,"Digital-7": FONT_COLOR 1,255,0,0 FONT_SIZE 1,sz: ON_CLICK 1,Qt WIDTH 0,TEXT_WIDTH("88:88:88",1): HEIGHT 0,TEXT_HEIGHT("88:88:88",1) COLOR 0,0,0,0 WHILE 2>1: CAPTION 1,TIME$: PAUSE 1000: END_WHILE END Qt: TERMINATE PS on s'est croisés Minibug, moi 12 lignes, mais je peux facilement faire varier les dimensions ! Et on clique sur l'image pour quitter. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Une horloge digitale Dim 21 Juil 2019 - 20:26 | |
| Je dit : 3 lignes !!! C'est mon dernier mot Jean Pierre ! Heu JL35 - Code:
-
ALPHA 1 : LEFT 1,0 : FONT_NAME 1,"Digital-7" : FONT_COLOR 1,255,0,0 : FONT_SIZE 1,70 : ' Changer la valeur en bout de ligne BORDER_HIDE 0 : WIDTH 0,TEXT_WIDTH(TIME$,1) : HEIGHT 0,TEXT_HEIGHT(TIME$,1) : COLOR 0,0,0,0 REPEAT : CAPTION 1,TIME$: PAUSE 1000: UNTIL SCANCODE=27 : TERMINATE Qui dit mieux | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Une horloge digitale Dim 21 Juil 2019 - 20:41 | |
| Ouais, bon, allez, t'as gagné ! le coquetier en osier et la cuillère du même métal. (on pourrait peut-être le faire en 1 ligne de 3 kilomètres). Mais on se retrouvera à la récré !
Ceci dit, je préfère la police 'DIGITAL-7 Mono' à la 'Digital-7' parce que les chiffres y ont tous la même largeur, ça fait plus 'numérique", et ça évite des sautillements. De plus, avec Digital-7, si tu fais TEXT_WIDTH(TIME$... à 11:11:11, la largeur obtenue sera trop courte pour afficher plus tard 22:22:22 ! | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Une horloge digitale Dim 21 Juil 2019 - 20:50 | |
| Tu as le mot de la fin concernant la police et tu as totalement raison. En même temps 3 lignes pour le débogage c'est cool non ? | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Une horloge digitale Dim 21 Juil 2019 - 21:31 | |
| Je reconnais bien volontiers qu'on peut difficilement faire plus court pour un programme exécutable ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Une horloge digitale Dim 21 Juil 2019 - 23:04 | |
| - Code:
-
width 0,400 : height 0,80 : border_hide 0 : color 0,0,0,0 alpha 10 : font_name 10,"arial" : font_size 10,22 : font_color 10,255,255,0 while scancode <> 27 caption 10, "Nous sommes le : " + date$ + chr$(13) + string$(20," ") +"Il est : " + time$ end_while terminate
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Une horloge digitale Dim 21 Juil 2019 - 23:49 | |
| Vous trouverez sur mon webdav Horloge.zip pour faire exécuter les fichiers flash (.swf) par panoramic. Attention !C'est interdit aux mineurs et aux + de 90 ans! | |
| | | Contenu sponsorisé
| Sujet: Re: Une horloge digitale | |
| |
| | | | Une horloge digitale | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |