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 petite pendulette digitale | |
| | |
Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Une petite pendulette digitale Lun 21 Mar 2011 - 23:22 | |
| Que se passe-t-il ? tout le monde dort ? Et je n'ai pas mis d'alarme à ma pendulette... Cliquer dessus pour l'arrêter. - Code:
-
' Horloge digitale DIM n, x, y, lc, hc, e, xp(8), i, d, a, m, j, l, sj, t$, w0, h0, ra, ga, ba, re, ge, be DIM tp, lf, wp, hp, js$(6), ms$(12), cad, al, ad, alh, alm, lb, sx, sy, sv, clk, hb, pw DIM cptAlarm: cptAlarm = 0 LABEL Init, Chg, Clock, Afdat, Afala, Digit, Fin, Jours, Tailtext, Alarm, Alok, Alan js$(0) = "dimanche": js$(1) = "lundi": js$(2) = "mardi": js$(3) = "mercredi" js$(4) = "jeudi": js$(5) = "vendredi": js$(6) = "samedi" ms$(1) = "janvier": ms$(2) = "février": ms$(3) = "mars": ms$(4) = "avril": ms$(5) = "mai" ms$(6) = "juin": ms$(7) = "juillet": ms$(8) = "août": ms$(9) = "septembre" ms$(10) = "octobre": ms$(11) = "novembre": ms$(12) = "décembre"
cad = 0: ' Form 0 sans bordure ' cad = 1: ' Form 0 avec bordure lc = 15: hc = 30: pw = 3 e = 10 xp(1) = 10: xp(2) = xp(1)+lc+e: xp(3) = xp(2)+lc+e xp(4) = xp(3)+e: xp(5) = xp(4) + lc + e: xp(6) = xp(5) + lc + e xp(7) = xp(6) + e: xp(8) = xp(7) + lc + e tp = 10: lf = 10: ' Emplacement sur l'écran, à ajuster selon les goûts IF cad = 0 w0 = xp(8)+lc+e+20: h0 = hc+30 wp = w0: hp = h0 lb = w0-24 ELSE w0 = xp(8)+lc+e+20+25: h0 = hc+55 wp = w0-18: hp = h0-39 lb = w0-44 END_IF TOP 0, tp: LEFT 0, lf: WIDTH 0, w0: HEIGHT 0, h0: TO_FOREGROUND 0 IF cad = 0 BORDER_HIDE 0 ELSE COLOR 0, 128,64,0 END_IF PICTURE 1: TOP 1, 0: LEFT 1, 0: WIDTH 1, wp: HEIGHT 1, hp 2D_TARGET_IS 1: 2D_FILL_COLOR 64,64,64: 2D_PEN_COLOR 255,255,255 2D_RECTANGLE 0,0,wp,hp: 2D_PEN_WIDTH pw PRINT_TARGET_IS 1: FONT_NAME 1, "Arial": FONT_SIZE 1, 10: FONT_COLOR 1, 255,255,0 ON_CLICK 1, Chg hb = 16 BUTTON 2: TOP 2, hp-hb+2: LEFT 2, lb: HEIGHT 2, hb: WIDTH 2, 22 FONT_SIZE 2, 6: CAPTION 2, "AL": ON_CLICK 2, Alarm
FORM 10: TOP 10, tp+2*hc: LEFT 10, lf+30: WIDTH 10, 140: HEIGHT 10, 80 COLOR 10, 192,255,255: BORDER_HIDE 10: HIDE 10 SPIN 11: PARENT 11, 10: TOP 11, 20: LEFT 11, 20: WIDTH 11, 45 SPIN 12: PARENT 12, 10: TOP 12, 20: LEFT 12, 92: WIDTH 12, 45 MIN 11, 0: MIN 12, 0: MAX 11, 23: MAX 12, 59 BUTTON 13: PARENT 13, 10: TOP 13, 52: LEFT 13, 2: WIDTH 13, 44: CAPTION 13, "Quit" BUTTON 14: PARENT 14, 10: TOP 14, 52: LEFT 14, 48: WIDTH 14, 44: CAPTION 14, "OK" BUTTON 15: PARENT 15, 10: TOP 15, 52: LEFT 15, 94: : WIDTH 15, 44: CAPTION 15, "Annul" ON_CLICK 13, Fin: ON_CLICK 14, Alok: ON_CLICK 15, Alan
ra = 164: ga = 255: ba = 164: ' couleur segments allumés re = 0: ge = 120: be = 0: ' couleur segments éteints GOSUB Init
al = 0: ' alarme désactivée clk = 0 TIMER 20: TIMER_INTERVAL 20, 1000: ON_TIMER 20, Clock END Fin: TERMINATE
Init: tp = TOP(0): lf = LEFT(0) IF cad = 0 w0 = xp(8)+lc+e+20: h0 = hc+30 wp = w0: hp = h0 lb = w0-24 BORDER_HIDE 0 ELSE w0 = xp(8)+lc+e+20+25: h0 = hc+55 wp = w0-18: hp = h0-39 lb = w0-44 BORDER_NORMAL 0 COLOR 0, 128,64,0 END_IF WIDTH 0, w0: HEIGHT 0, h0: WIDTH 1, wp: HEIGHT 1, hp 2D_TARGET_IS 1: 2D_FILL_COLOR 64,64,64 2D_PEN_COLOR 196,128,64 2D_RECTANGLE 0,0,wp,hp j = VAL(LEFT$(DATE$, 2)): sj = j GOSUB Afdat y = 8: IF cad = 0 THEN y = 20 LEFT 2, lb: TOP 2, y+hc-hb+5 n = -1 FOR i = 1 TO 8 IF i<>3 AND i<>6 x = xp(i): GOSUB Digit ELSE 2D_PEN_COLOR ra,ga,ba x = xp(i): 2D_LINE x,y+hc/2-10,x,y+hc/2-10+4: 2D_LINE x,y+hc/2+10,x,y+hc/2+10+4 END_IF NEXT i IF al = 1 THEN GOSUB Afala GOSUB Clock RETURN
Chg: cad = 1-cad GOSUB Init RETURN
Clock: t$ = DATE$: j = VAL(LEFT$(t$, 2)) IF j <> sj GOSUB Afdat sj = j END_IF IF al = 1 IF VAL(LEFT$(TIME$, 2)) = alh AND VAL(MID$(TIME$,4,2)) = alm ' alarme déclenchée ad = 1: i = VAL(RIGHT$(TIME$,2)) IF i <> sv BEEP: sv = i ra = 255: ga = 164 2D_PEN_COLOR 0,255,255:2D_FILL_COLOR 0,255,255 2D_FILL_COLOR re,ge,be: 2D_RECTANGLE 2,2,wp-2,hp-2 ELSE ra = 164: ga = 255 2D_PEN_COLOR 64,64,64: 2D_FILL_COLOR 64,64,64: 2D_RECTANGLE 2,2,wp-2,hp-2 END_IF GOSUB Afdat GOSUB Afala ELSE IF ad = 1 ad = 0: ra = 164: ga = 255 GOSUB Alan: ' si on ne veut pas conserver l'alarme pour dans 24 heures ! END_IF END_IF END_IF FOR i = 1 TO 8 t$ = MID$(TIME$, i, 1) IF t$ <> ":" n = VAL(t$) x = xp(i) GOSUB Digit ELSE 2D_PEN_COLOR ra,ga,ba x = xp(i): 2D_LINE x,y+hc/2-10,x,y+hc/2-10+4: 2D_LINE x,y+hc/2+10,x,y+hc/2+10+4 END_IF NEXT i RETURN
Afdat: t$ = DATE$: m = VAL(MID$(t$, 4, 2)): a = VAL(RIGHT$(t$, 2)) GOSUB Jours: t$ = js$(d) + " " + LEFT$(t$, 2) + " " + ms$(m) + " " + RIGHT$(t$, 4) IF cad = 0 GOSUB Tailtext: PRINT_LOCATE (w0-l)/2,1: PRINT t$ ELSE CAPTION 0, t$ END_IF RETURN
Afala: FONT_NAME 1, "Wingdings": FONT_COLOR 1, 255,0,0: FONT_SIZE 1, 14: FONT_BOLD 1 lb = w0-22: IF cad = 1 THEN lb = w0-42 PRINT_LOCATE lb, y: PRINT CHR$(37) FONT_NAME 1,"Arial": FONT_SIZE 1,10: FONT_COLOR 1, 255,255,0: FONT_BOLD_OFF 1 RETURN
Digit: ' affichage du chiffre n en x,y, dimensions lc, hc 2D_PEN_COLOR re,ge,be 2D_LINE x,y,x+lc,y: 2D_POLY_TO x+lc, y+hc: 2D_POLY_TO x,y+hc: 2D_POLY_TO x,y 2D_POLY_TO x, y+hc/2: 2D_POLY_TO x+lc, y+hc/2 2D_PEN_COLOR ra,ga,ba SELECT n CASE 0: 2D_LINE x,y,x+lc,y: 2D_POLY_TO x+lc,y+hc: 2D_POLY_TO x,y+hc 2D_POLY_TO x,y CASE 1: 2D_LINE x+lc,y,x+lc,y+hc CASE 2: 2D_LINE x,y,x+lc,y: 2D_POLY_TO x+lc,y+hc/2: 2D_POLY_TO x,y+hc/2 2D_POLY_TO x,y+hc: 2D_POLY_TO x+lc,y+hc CASE 3: 2D_LINE x,y,x+lc,y: 2D_POLY_TO x+lc,y+hc/2: 2D_POLY_TO x,y+hc/2 2D_POLY_TO x+lc,y+hc/2:2D_POLY_TO x+lc,y+hc: 2D_POLY_TO x,y+hc CASE 4: 2D_LINE x,y,x,y+hc/2: 2D_POLY_TO x+lc,y+hc/2: 2D_POLY_TO x+lc,y 2D_POLY_TO x+lc,y+hc CASE 5: 2D_LINE x+lc,y,x,y: 2D_POLY_TO x,y+hc/2: 2D_POLY_TO x+lc,y+hc/2 2D_POLY_TO x+lc,y+hc: 2D_POLY_TO x,y+hc CASE 6: 2D_LINE x+lc,y,x,y: 2D_POLY_TO x,y+hc: 2D_POLY_TO x+lc,y+hc 2D_POLY_TO x+lc,y+hc/2: 2D_POLY_TO x,y+hc/2 CASE 7: 2D_LINE x,y+hc/2,x,y: 2D_POLY_TO x+lc,y: 2D_POLY_TO x+lc,y+hc CASE 8: 2D_LINE x,y,x+lc,y: 2D_POLY_TO x+lc, y+hc: 2D_POLY_TO x,y+hc 2D_POLY_TO x,y: 2D_POLY_TO x, y+hc/2: 2D_POLY_TO x+lc, y+hc/2 CASE 9: 2D_LINE x,y+hc,x+lc,y+hc: 2D_POLY_TO x+lc,y: 2D_POLY_TO x,y 2D_POLY_TO x,y+hc/2: 2D_POLY_TO x+lc,y+hc/2 END_SELECT RETURN
Jours: ' jour de la semaine (d = 0 à 6, dimanche à samedi) en fonction de ' jour j, mois m et année a d = a IF m<3 THEN d = d-1 d = INT(23*m/9) + j + 4 + a + INT(d/4) - INT(d/100) + INT(d/400) IF m >=3 THEN d = d-2 d = d - 7*INT(d/7) RETURN
Tailtext: ' Calcul de la largeur l de t$, en pixels PICTURE 300: TOP 300, -150: WIDTH 300, 900: COLOR 300, 1, 1, 1 PRINT_TARGET_IS 300: FONT_NAME 300, "Arial": FONT_SIZE 300, 10 FONT_COLOR 300,0,0,0: PRINT t$ FOR l = 0 TO 799 IF COLOR_PIXEL_RED(300,l,0)=1 THEN EXIT_FOR NEXT l PRINT_TARGET_IS 1: DELETE 300 RETURN
Alarm: tp = TOP(0): lf = LEFT(0) IF cad = 0 TOP 10, tp+2*hc: LEFT 10, lf + 30 ELSE TOP 10, tp+2*hc+20: LEFT 10, lf + 50 END_IF SHOW 10 PRINT_TARGET_IS 10: FONT_BOLD 10: PRINT " ALARME A:" PRINT_LOCATE 0, 22: PRINT " H: M:" PRINT_TARGET_IS 1: FONT_NAME 1, "Arial": FONT_SIZE 1, 10: FONT_COLOR 1, 255,255,0 RETURN
Alok: alh = POSITION(11): alm = POSITION(12) HIDE 10 GOSUB Afala al = 1 RETURN
Alan: HIDE 10 ' annulation de l'alarme en cours... GOSUB Init FONT_NAME 1, "Wingdings": FONT_COLOR 1, 255,0,0: FONT_SIZE 1, 14: FONT_BOLD 1 lb = w0-22: IF cad = 1 THEN lb = w0-42 PRINT_LOCATE lb, y: PRINT " " FONT_NAME 1, "Arial": FONT_SIZE 1, 10: FONT_COLOR 1, 255,255,0 al = 0 RETURN
Dernière édition par JL35 le Mar 29 Mar 2011 - 15:56, édité 12 fois | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Une petite pendulette digitale Mar 22 Mar 2011 - 7:54 | |
| bien sympa ta pendulette. Je l'ai adaptée en ajoutant un top et left à form 0, car en haut à gauche de mon écran c'est réservé à Panoramic. Bravo, A+ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Une petite pendulette digitale Mar 22 Mar 2011 - 11:30 | |
| Salut Jean Claude, tu as raison, on peut la mettre où on veut. L'idéal aurait été de pouvoir la déplacer à la souris, ça doit être faisable.- J'ai ajouté un léger liséré blanc autour, ça tranche mieux sur l'écran (j'ai eu un doute. dit-on liseré ou liséré ? eh bien d'après le Larousse on peut dire les deux...). Et j'ai centré la date dans la fenêtre. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 22 Mar 2011 - 13:04 | |
| | |
| | | Invité Invité
| Sujet: Re: Une petite pendulette digitale Mar 22 Mar 2011 - 13:49 | |
| je ne comprends pas. J'avais posté une réponse, et je ne la vois plus. J'ai horreur de me répété et je garde pour moi ce que j'avais mis. Perte de temps. Bonsoir |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Une petite pendulette digitale Mar 22 Mar 2011 - 15:34 | |
| Désolé cosmos, je ne comprends pas ce qui est arrivé à ton message... J'ai encore fait une petite modif, on peut afficher la pendulette avec ou sans encadrement (variable cad = 0 ou 1). Avec encadrement ça permet de la balader n'importe où dans l'écran, pour ne pas gêner: Avec encadrement, cad = 1 : Sans encadrement, cad = 0 : | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Une petite pendulette digitale Mer 23 Mar 2011 - 1:00 | |
| Je viens de rajouter une fonction réveil-matin: alarme à une heure donnée: Cliquer sur le petit bouton 'AL', une boîte de dialogue s'ouvre pour demander l'heure et la minute de réveil. La cloche rouge indique qu'une alarme est en cours. On peut la consulter, la modifier ou l'annuler, par le même bouton 'AL' Le son n'est pas très puissant (fonction BEEP), il doit être possible de faire quelque chose d'un peu plus... tonitruant. | |
| | | Invité Invité
| Sujet: Re: Une petite pendulette digitale Mer 23 Mar 2011 - 9:34 | |
| Bonjour, Une simple remarque en passant, il y a plein de petit programme en Panoramic intéressant à faire, mais le volume compilé est trop gros à mon sens. Si pour chaque petit programme, il faut faire un programme compilé, pour les vieux PC comme le mien, je ne suis pas d'accord. Jack dit que nous ne sommes pas prêt pour avoir des instructions comme virtual, mais on le serra jamais, vu qu'il y a toujours un nouveau qui s'inscrit. Je stoppe là les commentaires, et je vous laisse avec les votres.
Pour ton programme, tu pourrais par exemple, avec un clic sur la forme, offrir la possibilité de mettre en "border_small", pour déplacer la forme, qui se remettrait en border_hide une fois le bouton relâché. Pour ma part, je ne vais pas faire de compilation vu le volume généré. Ce qui serait intéressant pour ce type de programme, c'est de les avoir en #include avec des variables propres et des formes propres qui auraient un nom défini pour chacun d'eux, ce qui permettrait ensuite de mettre le numéro qui conviendrait pour chacun. De cette façon, on pourrait avoir pleins de petits programmes sympas, qu'on assemblerait dans un programme général, et on aurait une seule compilation Je sais, on pourrait faire ceci, faire cela, mais voila c'est ainsi que marche le monde. |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Une petite pendulette digitale Mer 23 Mar 2011 - 14:23 | |
| Bonnes idées cosmos, pour le border en particulier, avec ta permission je vais regarder ça.
Et je suis d'accord avec toi pour le volume des programmes compilés, volume énorme quelle que soit la longueur du source... c'est bien embêtant. | |
| | | Invité Invité
| Sujet: Re: Une petite pendulette digitale Mer 23 Mar 2011 - 15:44 | |
| Si tu veux, j'ai fais l'essai avec ça. Je ne donne que la partie transformée, vu que je vois qu'il n'y a pas la date, c'est pas ta dernière version Avec les label: lire et positionne modifier : on_click 1,lire - Code:
-
list 3:left 3,120:width 3,50:height 3,30:item_add 3,"deplace":item_add 3,"fin":hide 3:on_click 3,positionne
TIMER 2: ON_TIMER 2, Clock END ' ============================================================================ lire: border_small 0 repeat:until scancode=0 show 3:height 0,h0+30:width 0,w0+10 return positionne: if item_index(3)=1 repeat until mouse_left_up(1)=1 or scancode=27 border_hide 0 :hide 3:HEIGHT 0, h0:width 0,w0 else goto fin end_if return
Il faudra peut-être adapter selon les changements de la dernière version que je n'ai pas regardé. A toi de voir si tu veux de mettre une version finale. |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Une petite pendulette digitale Mer 23 Mar 2011 - 16:56 | |
| Super ta petite pendulette ! Je me suis permis de modifier la procédure Clock pour avoir un effet visuel en cas d'alarme : - Code:
-
DIM cptAlarm:cptAlarm=0 ... Clock: ... ... FOR i = 1 TO 8 t$ = MID$(TIME$, i, 1) IF t$ <> ":" n = VAL(t$) x = xp(i) GOSUB Digit ELSE 2D_PEN_COLOR ra,ga,ba x = xp(i): 2D_LINE x,y+hc/2-10,x,y+hc/2-10+4: 2D_LINE x,y+hc/2+10,x,y+hc/2+10+4 END_IF NEXT i IF al = 1 IF VAL(LEFT$(TIME$, 2)) = alh AND VAL(MID$(TIME$,4,2)) = alm AND (cptAlarm=0) ra=255:ga=164:ba=164 cptAlarm = 10 else IF cptAlarm <> 0 cptAlarm=cptAlarm-1 if ga=255 ga=164:ra=255 else ga=255:ra=164 end_if BEEP if cptAlarm = 0 ra=164:ga=255:ba=164 GOSUB Alan end_if end_if END_IF END_IF RETURN | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Une petite pendulette digitale Mer 23 Mar 2011 - 17:29 | |
| Merci Nardo, je retiens ton idée d'effet visuel, pas telle quelle (j'ai un peu trop modifié entretemps). Je le fais durer 1 minute, de même que l'alarme sonore (1 bip toutes les secondes), jusqu'à la minute suivante, ou qu'on arrête volontairement ('Annul'). De plus je ne la désactive pas automatiquement, elle se redéclenchera 24 heures plus tard (sauf annulation, ou... extinction du pc !).
Pour arrêter la pendule, c'est maintenant une option du bouton 'AL': bouton 'Quit' (et non plus un clic sur le picture).
J'ai essayé le TO_FOREGROUND 0, pour avoir toujours la pendule en 1er plan, mais ça n'a pas l'air de marcher...
Malgré les suggestions de cosmos, je n'arrive pas à déplacement proprement la pendule sur le bureau (quand elle en mode sans cadre), j'abandonne pour le moment. Et ça m'embête d'utiliser une ressource externe (dll).
| |
| | | Invité Invité
| Sujet: Re: Une petite pendulette digitale Mer 23 Mar 2011 - 18:58 | |
| Dans le code que j'ai mis, je la déplace. çà fonctionne ainsi: en cliquant sur l'image, le on_click teste que le bouton est relevé. Je mets le border_small pour pouvoir déplacer la fenêtre, et je montre un list pour faire le choix entre la fin de déplacement ou l'arrêt. Je vais reprendre ta dernière version pour voir
J'ai vu. Personnellement j'aurai procédé autrement. j'aurai fait un container en dessous des digits avec les boutons qui serait à HIDE, ce qui permet de déplacer l'ensemble.
En cliquant pour aller à alarm, j'aurai mis en plus border_small 0, j'aurai augmenté la hauteur de la forme 0 pour voir le container. Ce qui me permet de déplacer la forme, vu qu'il y a border_small. Une fois l'obtion validée, je mets border_hide 0, je cache le container, et je remet la hauteur pour ne voir que les digits.
Il est temps maintenant que je reprenne mon propre programme. J'ai pas testé la version Nardo. Peut-être à un autre moment. |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Une petite pendulette digitale Mer 23 Mar 2011 - 23:57 | |
| Finalement, j'ai adopté un compromis (suite aux idées de cosmos):
On peut passer du mode sans bordure au mode avec bordure, il suffit de cliquer dans la fenêtre, en bascule.
Pour déplacer la fenêtre sur le bureau, il suffit de passer en mode avec bordure (clic dans la fenêtre), de déplacer la fenêtre à la souris de la manière classique (cliquer/déplacer dans la bordure de titre), puis éventuellement de repasser en mode sans bordure (clic dans la fenêtre).
Ce n'est pas très contraignant pour l'utilisateur, et c'est simple à réaliser. | |
| | | Invité Invité
| Sujet: Re: Une petite pendulette digitale Jeu 24 Mar 2011 - 9:03 | |
| Bonjour JL35 Je vois que tu m'as mis à l'heure. Il y a une chose que je ne comprend pas. L'affichage de la date chez moi ne marche pas, alors que cela a l'air de fonctionner ailleurs. Peut-être des divergence sur des cartes graphiques. Je dis cela, car je me souviens que Klaus, dans les testes, ne trouvait pas les mêmes valeurs en lisant les pixels, valeurs deifférentes de ce qui devrait être. J'ai modifié cette partie là, et ici, je dis qu'il n'est pas nécessaire de tester les trois couleurs sur un texte pour savoir la largeur que prend celui-ci dans un picture. Une seule couleur suffit. La lecture d'un pixel en Panoramic est très longue en temps, même si ici c'est pas important, mais dans d'autre programme, cela l'est. Il suffit de mettre le fond d'écriture ainsi que la couleur de la fonte au même niveau, et de mettre la couleur du fond autrement. Voici comment j'ai modifié: - Code:
-
Tailtext: ' Calcul de la largeur l de t$, en pixels PICTURE 300: TOP 300, -150: WIDTH 300, 900: COLOR 300, 255, 255, 255 PRINT_TARGET_IS 300: FONT_NAME 300, "Arial": FONT_SIZE 300, 10: 2d_target_is 300:2d_fill_color 0,0,0 FONT_COLOR 300,0,0,0:print_locate 0,0: PRINT t$ FOR l = 0 TO 799 IF COLOR_PIXEL_RED(300,l,1)<>0 THEN EXIT_FOR NEXT l PRINT_TARGET_IS 1:2d_target_is 1: DELETE 300 RETURN Et là ça marche chez moi, je vois la date. |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Une petite pendulette digitale Jeu 24 Mar 2011 - 9:24 | |
| Tu as raison bien sûr cosmos, dans cette application, pour le calcul de la taille du texte c'est une perte de temps inutile de tester les 3 couleurs, une seule suffit, et je modifie le programme en conséquence.
Je faisais ça parce que je m'étais aperçu que, quand on écrit un texte noir sur blanc, les caractères sont bordés de pixels de couleur différente, sans doute pour l'esthétique des caractères, et ça ne se voit pas à l'oeil nu. Mais ici ça n'a aucune importance. | |
| | | Invité Invité
| Sujet: Re: Une petite pendulette digitale Jeu 24 Mar 2011 - 14:33 | |
| Très bien. Mais ne crois pas que tu sois obligé de me suivre sur tout ce que je dis. Les pixels bardés de couleurs différentes, je n'y avais pas pensé. En faite, je me demandais pourquoi la date était invisible, et j'avais constaté que L en sorti faisait 800, et que le calcul en conséquence du positionnement était alors -320 pour print_locate, donc je ne voyais rien. Peut-être sur ce forum quelqu'un pourrait donner des éclaircissements. Est ce qu'une carte graphique peut faire des restrictions sur les couleurs et limiter le nombre visible de celles-ci. Pourquoi chez moi, je ne voyais pas la date?
Par contre sur les bordures en couleur des fontes pour améliorer le rendu, je pense qu'il faille éviter ceci ici, et mettre la couleur de la fonte avec celui du font de celle-ci. Pourquoi, parce que tu ne lis qu'une seule ligne horizontalement, et la ligne du haut, peut ne pas avoir de pixel, alors qu'il y en a plus bas. Sur la bordure de couleurs différentes, ce n'est valable que si on regarde l'ensemble des pixels sur la hauteur, et là ça devient long. En mettant la même couleur sur le fond du texte que la fonte, quelque soit la largeur du caractère, toute la hauteur a la même couleur, et se détache du fond du picture.
Autre chose, et là ça ne concerne pas que toi, c'est une chose que je constate constamment dans les codes. Pourquoi ne mettez-vous pas la boucle de fin, à la fin. Un TERMINATE dans les lignes de codes, fait sursauter. Si le TERMINATE est à la dernière ligne, cela ferme sans heurt. Vous (je ne sais plus qui?) l'avais fait remarquer, vers octobre/novembre 2009. |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Une petite pendulette digitale Jeu 24 Mar 2011 - 16:48 | |
| Tout d'abord je te rassure cosmos, je ne me sens pas obligé de suivre tout ce que tu dis, mais si ça me semble judicieux, je prends, évidemment ! Juste concernant le TERMINATE: je ne vois pas ce qui te choque ici, il n'est pas du tout dans les lignes de code, mais dans le sous-programme Fin, après le End, appelé par un clic, lequel sous-programme ne comporte pas de Return puisque tout s'arrête au Terminate. Ca me paraît parfaitement logique, non ? qu'appelles-tu une 'boucle de fin' ? Pour ce qui est du calcul de la longueur du texte en pixels (sous-programme Tailtext), il suffit bien de n'analyser qu'une seule ligne de pixels pour avoir la longueur exacte. Le texte s'écrit en noir (0,0,0) sur fond (1,1,1), mais en fait le fond des caractères est blanc. Pour le voir il suffit de rendre l'opération visible: comme ceci: - Code:
-
DIM t$, l LABEL Tailtext WIDTH 0, 1000: HEIGHT 0, 100 t$ = "Au clair de la lune" GOSUB Tailtext END
Tailtext: ' Calcul de la largeur l de t$, en pixels PICTURE 300: TOP 300, 10: WIDTH 300, 900: COLOR 300, 1, 1, 1 PRINT_TARGET_IS 300: FONT_NAME 300, "Arial": FONT_SIZE 300, 10 FONT_COLOR 300,0,0,0: PRINT t$ FOR l = 0 TO 799 IF COLOR_PIXEL_RED(300,l,0)=1 THEN EXIT_FOR NEXT l PRINT_TARGET_IS 0: ' DELETE 300 RETURN Pour les pixels de couleur dans un print noir sur blanc, voilà ce que j'obtiens, en grossissant: Je me suis demandé si ces pixels de couleur n'étaient pas rajoutés par exemple par la logique interne du moniteur, quelque chose comme ça, mais non, ils sont bien réels, en mémoire, on peut les mettre en évidence: - Code:
-
DIM t$, l, r, g, b, x, y LABEL Tailtext WIDTH 0, 300: HEIGHT 0, 550 PICTURE 10: TOP 10, 80: LEFT 10, 20: WIDTH 10, 200: HEIGHT 10, 400 PICTURE 300: TOP 300, 0: WIDTH 300, 80: HEIGHT 300, 50: COLOR 300, 1, 1, 1 t$ = "Au clair de la lune" GOSUB Tailtext END
Tailtext: PRINT_TARGET_IS 300: FONT_NAME 300, "Arial": FONT_SIZE 300, 10 FONT_COLOR 300,0,0,0: PRINT t$ 2D_TARGET_IS 10 FOR y = 0 TO 19 FOR x = 0 TO 9 r = color_pixel_red(300,x,y) g = color_pixel_green(300,x,y) b = color_pixel_blue(300,x,y) 2D_FILL_COLOR r,g,b 2D_RECTANGLE x*20, y*20, x*20+19, y*20+19 NEXT x NEXT y PRINT_TARGET_IS 0 RETURN Le caractère apparaît noir, et pourtant il n'y a pas beaucoup de noir pur là-dedans. C'est amusant d'essayer d'autres teintes que le noir, pour le print, on s'aperçoit qu'il y a plein d'autres couleurs, l'ensemble donnant le résultat voulu, visuellement. | |
| | | Invité Invité
| Sujet: Re: Une petite pendulette digitale Jeu 24 Mar 2011 - 18:14 | |
| JL35, si tu ne mets pas le son, ce que je mets concernant TERMINATE, ne sert à rien. Si tu mets le son, avec TERMINATE à l'intérieur des codes (ce qui entre nous est correct dans la structure), à la fermeture du programme, on a un son qui fait sursauter. Si tu mets la label fin: à la fin avec TERMINATE, Windows ne provoque pas de son. C'est tout.
Quand aux lettres, tu me montres ce que je dis. Les six premières lignes du haut se terminent par un blanc. Moi je trouve plus simple d'afficher le caractère de la même couleur que le fond du texte, cela me parait plus simple pour voir la différence avec la couleur du picture. Maintenant apparemment la date vous le voyez sur votre ordi, alors que moi, je ne le voyait pas. Elle était hors cadre, vu que le programme sur mon ordi, n'a pas pu déterminé la différence entre le texte et le fond de l'image. Donc je suppose que c'est une question de carte graphique, mais je n'en sais rien. En apportant les modification que j'ai faite, le programme a vu une différence, et maintenant ça marche. Je ne dis pas que cela est une erreur de ta part. Il est évident que si tu vois ce que ton programme fait, l'erreur ne vient pas de toi, mais surement de la conception du PC, vu que chez moi, cela ne marche pas. Je pense qu'ici au lieu de faire une différence entre un 0 et un 1 pour une couleur, il faut faire des différences plus importante, vu qu'on a 256 possibilités de choix sur une couleur. C'est pour cela que je me dis que certainement mon moniteur dois limiter la sortie des couleurs, et ne pas me montrer les millions de possibilité. Ça c'est pas de ma faute non plus. Je fais avec ce que j'ai.
Mais ne te fâches pas. Ton programme fonctionne. Mais pour voir les différences, il faudrait avoir un tas d'ordi. Ni toi, ni moi ni pouvons rien. Salutation |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Une petite pendulette digitale Jeu 24 Mar 2011 - 18:37 | |
| Attends cosmos, je ne suis certainement pas fâché, pas mon genre, bien au contraire j'apprécie beaucoup les avis des autres, quels qu'ils soient, c'est toujours enrichissant.
Pour le son sur Terminate, je n'ai rien remarqué puisque le son est coupé systématiquement sur mon pc (ça m'agace un peu tous ces bips...), sauf ponctuellement si j'en ai besoin, vidéo ou musique.
Pour les couleurs, effectivement avec ma méthode (0 ou 1) il faut pouvoir gérer les 256*256*256 couleurs, mais théoriquement tous les pc le font... mais rien n'empêche de faire un choix plus tranché. S'il y a des particularités, rien n'empêche d'adapter le programme à sa machine, ou à ses propres goûts, il est assez simple pour ça. | |
| | | Invité Invité
| Sujet: Re: Une petite pendulette digitale Ven 25 Mar 2011 - 8:58 | |
| Je me demande si pour le tableur, où lorsque je voulais centrer ou mettre le texte à droite de la cellule, ce ne serait pas le même problème. Je ne vais rentrer dans le programme en question pour vérifier. Tu es mieux placé que moi, pour savoir, si la méthode est identique. |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Une petite pendulette digitale Ven 25 Mar 2011 - 9:10 | |
| Bonjour, L'histoire des couleurs sur la bordure des caractères ne proviendrai pas du lissage des polices à l'écran ? Dans ce cas, peut être faire une détermination à partir d'un caractère qui ne possède pas de trait en biais (genre '+') Sinon un petit bug : Si tu rentres une alarme et que tu bascules le formulaire avec bordure pour le déplacer, lorsque tu reviens en bordure "none", la taille de la fonte pour l'affichage du jour n'est plus correcte... Je pense qu'il faut rajouter à la fin de Alok: - Code:
-
FONT_SIZE 1,10: FONT_COLOR 1, 255,255,0:FONT_BOLD_OFF 1 | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: +++ Sam 26 Mar 2011 - 19:26 | |
| Joli petite pendulette ! Bravo ! Il ne lui reste plus qu'à faire horloge parlante, et ce sera parfait ! | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 26 Mar 2011 - 19:38 | |
| | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Une petite pendulette digitale Sam 26 Mar 2011 - 20:30 | |
| @Nardo Bien vu pour le bug, c'est corrigé ! Pour les pixels de couleur en bordure des caractères noirs, c'est ce que j'ai pensé au départ, lissage des caractères pour faire plus joli à l'écran. Mais cet ajout de pixels ne se fait pas que sur l'écran, il existe aussi dans la mémoire écran, celle que l'on lit quand on fait COLOR_PIXEL_RED(n,X,Y) etc, pour le montrer c'était le but du petit programme ci_dessus qui décortique un caractère en lisant les couleurs de chaque pixel, donc on est bien obligés d'en tenir compte, elles existent réellement. Et si on met '+' au lieu de 'A' c'est pareil, plein de pixels de couleur. @jjn4 pour l'horloge parlante c'est pas demain la veille ! | |
| | | Contenu sponsorisé
| Sujet: Re: Une petite pendulette digitale | |
| |
| | | | Une petite pendulette digitale | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |