Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
Sujet: Une règle à l'écran Jeu 11 Sep 2014 - 17:19
Pas révolutionnaire, mais ça peut servir à mesurer des objets sur l'écran, en pixels et mm. Je l'ai mis sous forme de sub, mais en fait c'est un programme complet, puisqu'il utilise et dimensionne le Form 0, pour pouvoir déplacer la règle sur l'écran. Ça affiche donc au choix une règle horizontale ou verticale
Au lancement, les graduations sont en absolu par rapport au bord physique de l'écran (gauche ou haut). Il y a un paramètre à ajuster dans la sub: la largeur de l'écran en mm
Code:
Regle(0): ' règle horizontale ' Regle(1): ' règle verticale END
SUB Regle(hv) ' affichage règle horizontale (hv=0) ou verticale (hv=1), pixels et mm DIM_LOCAL we, he, r, i, k, l, lm, a$ TOP 0,0: BORDER_SMALL 0 PICTURE 1: FULL_SPACE 1: PRINT_TARGET_IS 1: 2D_TARGET_IS 1 COLOR 1,255,255,128: 2D_FILL_COLOR 255,255,128 we = 517: ' largeur écran en mm <=========================== A AJUSTER ========= he = we*SCREEN_Y/SCREEN_X: ' hauteur écran en mm r = SCREEN_X/we: ' pixels/mm IF hv = 0 WIDTH 0,SCREEN_X: HEIGHT 0,80: FULL_SPACE 1: LEFT 1,-8: WIDTH 1,SCREEN_X-8 lm = 20: l = 7 2D_LINE 0,lm,SCREEN_X,lm FOR i = 0 TO SCREEN_X STEP 10: ' pixels 2D_LINE i,lm,i,lm-6 IF i/50 = INT(i/50) 2D_LINE i,lm,i,lm-12: a$ = STR$(i): k = TEXT_WIDTH(a$,1) PRINT_LOCATE i-k/2,-1: PRINT a$ END_IF NEXT i FOR i = 1 TO we: ' mm 2D_LINE i*r,lm,i*r,lm+l IF i/10 = INT(i/10) 2D_LINE i*r,lm,i*r,lm+2*l: a$ = STR$(i): k = TEXT_WIDTH(a$,1) PRINT_LOCATE i*r-k/2,lm+2*l: PRINT STR$(i) END_IF NEXT i FONT_COLOR 1,148,0,0 PRINT_LOCATE 10,1: PRINT "pixels": PRINT_LOCATE 10,lm+10: PRINT "mm" ELSE WIDTH 0,80: HEIGHT 0,SCREEN_Y: TOP 1,-26: HEIGHT 1,SCREEN_Y-16 lm = 30: l = 7 2D_LINE lm,0,lm,SCREEN_Y FOR i = 0 TO SCREEN_Y STEP 10: ' pixels 2D_LINE lm,i,lm-6,i IF i/50 = INT(i/50) 2D_LINE lm,i,lm-12,i: a$ = STR$(i): k = TEXT_WIDTH(a$,1) PRINT_LOCATE lm-30,i-7: PRINT a$ END_IF NEXT i FOR i = 1 TO he: ' mm 2D_LINE lm,i*r,lm+l,i*r IF i/10 = INT(i/10) 2D_LINE lm,i*r,lm+2*l,i*r: a$ = STR$(i): k = TEXT_WIDTH(a$,1) PRINT_LOCATE lm+2*l,i*r-6: PRINT STR$(i) END_IF NEXT i FONT_COLOR 1,148,0,0 PRINT_LOCATE 0,58: PRINT "pixels": PRINT_LOCATE lm+15,46: PRINT "mm" END_IF END_SUB
Philippe Dreux aime ce message
mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
Sujet: Re: Une règle à l'écran Jeu 11 Sep 2014 - 18:58
bonjour a tous JL35 peut être pas révolutionnaire mais elle tourne bien ton idée. merci c'est pratique
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
Sujet: Re: Une règle à l'écran Jeu 11 Sep 2014 - 20:29
Salut JL35,
Pas mal, mais pour mesurer, le bord du form est gênant. J'ai essayé avec BORDER_HIDE 0 , mais du coup on ne peut plus déplacer la règle et fermer le programme.
L'idéal serait une règle sans bord, déplaçable avec la souris, que l'on puisse fermer avec la touche Echap, et avec 4 petits boutons pour choisir H ou V et Pixels ou Cm. Et là, l'utilité est évidente.
Je sais, tu vas dire "Y s'emm... pas le Jean Claude", mais je pense que tu vas le prendre comme un challenge.
A+
PS: j'ajoute qu'il n'est pas indispensable quelle fasse la largeur (ou hauteur) complète de l'écran.
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
Sujet: Re: Une règle à l'écran Jeu 11 Sep 2014 - 20:59
Salut Jean Claude (et merci mindstorm), Tu penses bien que c'était ma première idée, le border_hide, mais là on ne peut plus déplacer ni fermer, comme tu l'as constaté toi-même. Tu remarqueras aussi que j'ai tenu compte de la bordure du Form et que les graduations commencent bien juste au bord de l'écran, même si les premières sont masquées, ce qui n'est pas très gênant puisqu'elles sont prises en compte. Les petites améliorations que tu suggères, je pense que chacun peut les faire en fonction de l'utilisation qu'il en a, et de l'écran dont il dispose... Et c'est tout un programme (c'est bien vrai, "Y s'emm... pas le Jean Claude" ).
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
Sujet: Re: Une règle à l'écran Jeu 11 Sep 2014 - 21:18
Bon, ben je vois que t'as pas l'intention de relever le challenge !
Me reste plus, qu'à faire le boulot moi-même, çà doit être faisable....
Mais çà va pas être du rapide, car je suis sur autre chose et depuis que je suis à la retraite, j'ai plein de chantiers, dans ma maison, à commencer ou à terminer.
A+
PS: Pour info, sous W8, la hauteur de la règle est trop courte, car le bandeau est de même taille pour BORDER_SMALL et BORDER_NORMAL.
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
Sujet: Re: Une règle à l'écran Jeu 11 Sep 2014 - 23:06
Bon allez Jean-Claude, arrête de pleurer, on la connait la chanson des retraités qui n'ont plus une minute à eux. Et pour te faire gagner du temps, voici la dernière version presque selon tes désirs: - la longueur de la règle, horizontale ou verticale, est à la demande, et on peut la déplacer où on veut (dans les limites de l'écran hein, ne compte pas t'en servir sur tes cahiers ou pour poser ton papier peint). Pour déplacer, c'est classique: clic gauche dessus, on déplace, puis on relâche. - pour quitter: clic droit sur la règle, tout simplement
Toujours sous forme de sub, qui n'en est pas vraiment une, mais un programme complet:
Code:
Regle(1,0,297): ' Exemple: règle horizontale, graduée en mm, longueur 297 mm END ' ============================================================================== SUB Regle(pm,hv,lg) ' affichage règle déplaçable graduée en pixels (pm=0) ou en millimètres (pm=1) ' horizontale (hv=0) ou verticale (hv=1) ' lg = longueur (h) ou hauteur (v) de la règle, en pixels ou mm suivant l'option pm DIM_LOCAL we,he,r,i,k,l,lm,a$,p,t0,l0,w0,h0,x,y,x1,y1 t0 = 0: TOP 0,t0: BORDER_HIDE 0 p = 1 PICTURE p: FULL_SPACE p: PRINT_TARGET_IS p: 2D_TARGET_IS p COLOR p,255,255,128: 2D_FILL_COLOR 255,255,128 we = 517: ' largeur écran en mm <=========================== A AJUSTER ========= he = we*SCREEN_Y/SCREEN_X: ' hauteur écran en mm r = SCREEN_X/we: ' pixels/mm IF hv = 0 w0 = SCREEN_X: h0 = 24 IF pm = 1 THEN lg = lg*r: ' dimension donnée en millimètres w0 = lg: IF w0>SCREEN_X THEN w0=SCREEN_X WIDTH 0,w0: HEIGHT 0,h0: FULL_SPACE p lm = 5 2D_LINE 0,0,w0,0 IF pm = 0 FOR i = 0 TO w0 STEP 10: ' règle graduée en pixels 2D_LINE i,0,i,lm IF i/50 = INT(i/50) 2D_LINE i,0,i,lm+5: a$ = STR$(i): k = TEXT_WIDTH(a$,p) PRINT_LOCATE i-k/2,lm+4: PRINT a$ END_IF NEXT i FONT_COLOR p,148,0,0: PRINT_LOCATE 10,lm+4: PRINT "pixels" ELSE FOR i = 0 TO we: ' règle graduée en millimètres 2D_LINE i*r,0,i*r,lm IF i/5 = INT(i/5) 2D_LINE i*r,0,i*r,lm+5: a$ = STR$(i): k = TEXT_WIDTH(a$,p) IF i/10 = INT(i/10) THEN PRINT_LOCATE i*r-k/2,lm+4: PRINT STR$(i) END_IF NEXT i FONT_COLOR p,148,0,0: PRINT_LOCATE 10,lm+4: PRINT "mm" END_IF ELSE w0 = 35: h0 = SCREEN_Y IF pm = 1 THEN lg = lg*r: ' dimension donnée en millimètres h0 = lg: IF h0>SCREEN_Y THEN h0=SCREEN_Y WIDTH 0,w0: HEIGHT 0,h0: FULL_SPACE p lm = 5 2D_LINE 0,0,0,h0 IF pm = 0 FOR i = 0 TO h0 STEP 10: ' pixels 2D_LINE 0,i,lm,i IF i/50 = INT(i/50) 2D_LINE 0,i,lm+5,i: a$ = STR$(i): k = TEXT_WIDTH(a$,p) PRINT_LOCATE lm+5,i-7: PRINT a$ END_IF NEXT i FONT_COLOR 1,148,0,0: PRINT_LOCATE 8,15: PRINT "pixels" ELSE FOR i = 0 TO he: ' mm 2D_LINE 0,i*r,lm,i*r IF i/5 = INT(i/5) 2D_LINE 0,i*r,lm+5,i*r: a$ = STR$(i): k = TEXT_WIDTH(a$,p) IF i/10=INT(i/10) THEN PRINT_LOCATE lm+5,i*r-6: PRINT STR$(i) END_IF NEXT i FONT_COLOR 1,148,0,0: PRINT_LOCATE 12,12: PRINT "mm" END_IF END_IF REPEAT WHILE MOUSE_LEFT_DOWN(p)=0 IF MOUSE_RIGHT_DOWN(p)=1 THEN TERMINATE END_WHILE x1 = l0+MOUSE_X_POSITION(p): y1 = t0+MOUSE_Y_POSITION(p): ' coordonnées absolues WHILE MOUSE_LEFT_UP(p)=0 x = l0+MOUSE_X_POSITION(p): y = t0+MOUSE_Y_POSITION(p) IF x<>x1 OR y<>y1 l0 = l0+x-x1: IF l0<0 THEN l0 = 0 IF l0>SCREEN_X-w0 THEN l0 = SCREEN_X-w0 t0 = t0+y-y1: IF t0<0 THEN t0 = 0 IF t0>SCREEN_Y-h0 THEN t0 = SCREEN_Y-h0 LEFT 0,l0: TOP 0,t0 x1=x: y1=y END_IF PAUSE 100 END_WHILE UNTIL 1=2 END_SUB
Et ça devrait faire disparaître le problème sous W8 (plus de bandeau)...
PS et comme on n'arrête pas le progrès, mon cher Jean-Claude, j'ai ajouté un paramètre d'appel: pixels ou millimètres, au choix, il faut maintenant donner le type (pixels ou mm), l'orientation (h ou v), et la longueur (h) ou hauteur (v). Noter que la longueur donnée est en pixels pour l'option graduations pixels, et en millimètres dans le cas contraire.
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
Sujet: Re: Une règle à l'écran Ven 12 Sep 2014 - 10:07
Merci JL35 de ta réactivité,
Voici une application de ta SUB.
Il te faudra, peut-être, adapter les dimensions des objets pour W7, car je l'ai conçu pour W8. Dis-moi si çà fonctionne chez toi.
Code:
objets() : start() END ' ================================================================= JL35 et JC83 SUB objets() ' les tailles et positions des objets sont configurés pour Windows 8.1 dim no%,form2%,HzVt%,Hz%,Vt%,PxMm%,Px%,M%,LR%,Ful%,Hlf%,Mini%,Vpm%,Vhv%,Vlr% : label fin,Change TOP 0,0: BORDER_HIDE 0 no%=2 no%=no%+1 : form2%=no% : form no% : border_small no% : width no%,160 : height no%,165 top no%,100 : left no%,100 : color no%,255,255,200 : caption no%,"Règle ": on_close no%,fin no%=no%+1 : HzVt%=no% : container_option no% : parent no%,form2% : width no%,85 : height no%,35 top no%,5 : left no%,30 : font_bold no% no%=no%+1 : Hz%=no% : option no% : parent no%,HzVt% : width no%,25 : mark_on no% top no%,10 : left no%,5 : font_bold no% : caption no%,"H" : on_click no%,Change no%=no%+1 : Vt%=no% : option no% : parent no%,HzVt% : width no%,25 top no%,10 : left no%,45 : font_bold no% : caption no%,"V" : on_click no%,Change no%=no%+1 : PxMm%=no% : container_option no% : parent no%,form2% : width no%,85 : height no%,35 top no%,45 : left no%,30 : font_bold no% no%=no%+1 : Px%=no% : option no% : parent no%,PxMm% : width no%,30 : mark_on no% top no%,10 : left no%,5 : font_bold no% : caption no%,"Px" : on_click no%,Change no%=no%+1 : M%=no% : option no% : parent no%,PxMm% : width no%,35 top no%,10 : left no%,45 : font_bold no% : caption no%,"Mm" : on_click no%,Change no%=no%+1 : LR%=no% : container_option no% : parent no%,form2% : width no%,132 : height no%,35 top no%,85 : left no%,7 : font_bold no% no%=no%+1 : Ful%=no% : option no% : parent no%,LR% : width no%,37 top no%,10 : left no%,5 : font_bold no% : caption no%,"1/1" : on_click no%,Change no%=no%+1 : Hlf%=no% : option no% : parent no%,LR% : width no%,37 : mark_on no% top no%,10 : left no%,47 : font_bold no% : caption no%,"1/2" : on_click no%,Change no%=no%+1 : Mini%=no% : option no% : parent no%,LR% : width no%,37 top no%,10 : left no%,90 : font_bold no% : caption no%,"1/4" : on_click no%,Change DIM we,he,r,i,k,l,lm,a$,p,t0,l0,w0,h0,x,y,x1,y1 :' pour la SUB Regle(pm,hv,lg) END_SUB ' ------------------------------------------------------------------------ Choix SUB start() if checked(Hz%)=1 then Vhv%=0 if checked(Vt%)=1 then Vhv%=1 if checked(Px%)=1 then Vpm%=0 if checked(M%)=1 then Vpm%=1 if Vpm%=0 if checked(Ful%)=1 and Vhv%=0 then Vlr%=screen_x if checked(Hlf%)=1 and Vhv%=0 then Vlr%=screen_x/2 if checked(Mini%)=1 and Vhv%=0 then Vlr%=screen_x/4 if checked(Ful%)=1 and Vhv%=1 then Vlr%=screen_y if checked(Hlf%)=1 and Vhv%=1 then Vlr%=screen_y/2 if checked(Mini%)=1 and Vhv%=1 then Vlr%=screen_y/4 end_if if Vpm%=1 if checked(Ful%)=1 and Vhv%=0 then Vlr%=screen_x if checked(Hlf%)=1 and Vhv%=0 then Vlr%=screen_x/7 if checked(Mini%)=1 and Vhv%=0 then Vlr%=screen_x/14 if checked(Ful%)=1 and Vhv%=1 then Vlr%=screen_y if checked(Hlf%)=1 and Vhv%=1 then Vlr%=screen_y/7 if checked(Mini%)=1 and Vhv%=1 then Vlr%=screen_y/14 end_if Regle(Vpm%,Vhv%,Vlr%) END_SUB
Change: start() return ' ========================================================================= JL35 SUB Regle(pm,hv,lg) ' affichage règle déplaçable graduée en pixels (pm=0) ou en millimètres (pm=1) ' horizontale (hv=0) ou verticale (hv=1) ' lg = longueur (h) ou hauteur (v) de la règle, en pixels ou mm suivant l'option pm t0 = 0 : p = 1 if object_exists(p)=0 then PICTURE p FULL_SPACE p: PRINT_TARGET_IS p: 2D_TARGET_IS p COLOR p,255,255,128: 2D_FILL_COLOR 255,255,128 we = 409: ' largeur écran en mm <=========================== A AJUSTER ========= he = we*SCREEN_Y/SCREEN_X: ' hauteur écran en mm r = SCREEN_X/we: ' pixels/mm IF hv = 0 w0 = SCREEN_X: h0 = 24 IF pm = 1 THEN lg = lg*r: ' dimension donnée en millimètres w0 = lg: IF w0>SCREEN_X THEN w0=SCREEN_X WIDTH 0,w0: HEIGHT 0,h0: FULL_SPACE p lm = 5 2D_LINE 0,0,w0,0 IF pm = 0 FOR i = 0 TO w0 STEP 10: ' règle graduée en pixels 2D_LINE i,0,i,lm IF i/50 = INT(i/50) 2D_LINE i,0,i,lm+5: a$ = STR$(i): k = TEXT_WIDTH(a$,p) PRINT_LOCATE i-k/2,lm+4: PRINT a$ END_IF NEXT i FONT_COLOR p,148,0,0: PRINT_LOCATE 10,lm+4: PRINT "pixels" ELSE FOR i = 0 TO we: ' règle graduée en millimètres 2D_LINE i*r,0,i*r,lm IF i/5 = INT(i/5) 2D_LINE i*r,0,i*r,lm+5: a$ = STR$(i): k = TEXT_WIDTH(a$,p) IF i/10 = INT(i/10) THEN PRINT_LOCATE i*r-k/2,lm+4: PRINT STR$(i) END_IF NEXT i FONT_COLOR p,148,0,0: PRINT_LOCATE 10,lm+4: PRINT "mm" END_IF ELSE w0 = 35: h0 = SCREEN_Y IF pm = 1 THEN lg = lg*r: ' dimension donnée en millimètres h0 = lg: IF h0>SCREEN_Y THEN h0=SCREEN_Y WIDTH 0,w0: HEIGHT 0,h0: FULL_SPACE p lm = 5 2D_LINE 0,0,0,h0 IF pm = 0 FOR i = 0 TO h0 STEP 10: ' pixels 2D_LINE 0,i,lm,i IF i/50 = INT(i/50) 2D_LINE 0,i,lm+5,i: a$ = STR$(i): k = TEXT_WIDTH(a$,p) PRINT_LOCATE lm+5,i-7: PRINT a$ END_IF NEXT i FONT_COLOR 1,148,0,0: PRINT_LOCATE 8,15: PRINT "pixels" ELSE FOR i = 0 TO he: ' mm 2D_LINE 0,i*r,lm,i*r IF i/5 = INT(i/5) 2D_LINE 0,i*r,lm+5,i*r: a$ = STR$(i): k = TEXT_WIDTH(a$,p) IF i/10=INT(i/10) THEN PRINT_LOCATE lm+5,i*r-6: PRINT STR$(i) END_IF NEXT i FONT_COLOR 1,148,0,0: PRINT_LOCATE 12,12: PRINT "mm" END_IF END_IF REPEAT WHILE MOUSE_LEFT_DOWN(p)=0 IF MOUSE_RIGHT_DOWN(p)=1 THEN TERMINATE END_WHILE x1 = l0+MOUSE_X_POSITION(p): y1 = t0+MOUSE_Y_POSITION(p): ' coordonnées absolues WHILE MOUSE_LEFT_UP(p)=0 x = l0+MOUSE_X_POSITION(p): y = t0+MOUSE_Y_POSITION(p) IF x<>x1 OR y<>y1 l0 = l0+x-x1: IF l0<0 THEN l0 = 0 IF l0>SCREEN_X-w0 THEN l0 = SCREEN_X-w0 t0 = t0+y-y1: IF t0<0 THEN t0 = 0 IF t0>SCREEN_Y-h0 THEN t0 = SCREEN_Y-h0 LEFT 0,l0: TOP 0,t0 x1=x: y1=y END_IF PAUSE 100 END_WHILE UNTIL 1=2 END_SUB ' ----- fin: terminate return
A+
PS: j'ai été contraint de déplacer tes variables locales en globales, sinon çà ne marche pas et je ne comprends pas pourquoi
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
Sujet: Re: Une règle à l'écran Ven 12 Sep 2014 - 10:25
Voilà ce que çà donne, c'est super pratique pour convertir instantanément mm en Px et vis et versa.
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
Sujet: Re: Une règle à l'écran Ven 12 Sep 2014 - 10:39
Salut Jean-Claude
Et moi de mon côté j'étais en train de faire un petit bijou (n'ayons pas peur des mots):
Code:
Regle(1000) END ' ============================================================================== SUB Regle(lg) ' affichage règle déplaçable graduée en pixels ou en millimètres (commutable) ' horizontale, commutable en verticale ' lg = longueur (h) de la règle, en pixels (si 0 ou absent: tout l'écran) LABEL Struct, Modh, Modv, Pm2pm, Rotate, Afpixh, Afmmh, Afpixv, Afmmv DIM_LOCAL we,he,r,i,k,pm,hv,lm,a$,p,b,c,t0,l0,w0,h0,x,y,x1,y1 hv = 0: pm = 0: ' affichage pixels, au départ IF lg <= 0 THEN lg = SCREEN_X t0 = 0: TOP 0,t0: BORDER_HIDE 0 p = 1 PICTURE p: FULL_SPACE p: PRINT_TARGET_IS p: 2D_TARGET_IS p COLOR p,255,255,128: 2D_FILL_COLOR 255,255,128 b = p+1: c = b+1 BUTTON b: WIDTH b,14: HEIGHT b,17: TOP b,7: LEFT b,6: CAPTION b,"m" ON_CLICK b,Pm2pm BUTTON c: WIDTH c,14: HEIGHT c,17: TOP c,7: LEFT c,LEFT(b)+WIDTH(b): CAPTION c,"R" ON_CLICK c,Rotate we = 517: ' largeur écran en mm <=========================== A AJUSTER ========= he = we*SCREEN_Y/SCREEN_X: ' hauteur écran en mm r = SCREEN_X/we: ' pixels/mm pour cet écran GOSUB Struct REPEAT WHILE MOUSE_LEFT_DOWN(p)=0 IF SCANCODE = 27 OR MOUSE_RIGHT_DOWN(p)=1 THEN TERMINATE: ' Esc ou clic droit END_WHILE x1 = l0+MOUSE_X_POSITION(p): y1 = t0+MOUSE_Y_POSITION(p): ' coordonnées absolues WHILE MOUSE_LEFT_UP(p)=0 x = l0+MOUSE_X_POSITION(p): y = t0+MOUSE_Y_POSITION(p) IF x<>x1 OR y<>y1: ' déplacement de la règle l0 = l0+x-x1: IF l0<0 THEN l0 = 0 IF l0>SCREEN_X-w0 THEN l0 = SCREEN_X-w0 t0 = t0+y-y1: IF t0<0 THEN t0 = 0 IF t0>SCREEN_Y-h0 THEN t0 = SCREEN_Y-h0 LEFT 0,l0: TOP 0,t0 x1=x: y1=y END_IF PAUSE 100 END_WHILE UNTIL 1=2 Struct: IF hv = 0 GOSUB Modh IF pm = 0 GOSUB Afpixh ELSE GOSUB Afmmh END_IF ELSE GOSUB Modv IF pm = 0 GOSUB Afpixv ELSE GOSUB Afmmv END_IF END_IF RETURN Modh: w0 = SCREEN_X: h0 = 24 IF pm = 1 THEN lg = lg*r: ' dimension donnée en millimètres w0 = lg: IF w0>SCREEN_X THEN w0=SCREEN_X WIDTH 0,w0: HEIGHT 0,h0: FULL_SPACE p lm = 5 2D_LINE 0,0,w0,0 RETURN Modv: w0 = 35: h0 = SCREEN_Y IF pm = 1 THEN lg = lg*r: ' dimension donnée en millimètres h0 = lg: IF h0>SCREEN_Y THEN h0=SCREEN_Y WIDTH 0,w0: HEIGHT 0,h0: FULL_SPACE p lm = 5 2D_LINE 0,0,0,h0 RETURN Pm2pm: CLS: COLOR p,255,255,128: FONT_COLOR p,0,0,0 If pm = 0 pm = 1 IF hv = 0 GOSUB Afmmh ELSE GOSUB Afmmv END_IF ELSE pm = 0 IF hv = 0 GOSUB Afpixh ELSE GOSUB Afpixv END_IF END_IF RETURN Rotate: CLS: COLOR p,255,255,128: FONT_COLOR p,0,0,0 IF hv = 0 hv = 1 ELSE hv = 0 END_IF GOSUB Struct RETURN Afpixh: FOR i = 0 TO w0 STEP 10: ' règle graduée en pixels 2D_LINE i,0,i,lm IF i/50 = INT(i/50) 2D_LINE i,0,i,lm+5: a$ = STR$(i): k = TEXT_WIDTH(a$,p) PRINT_LOCATE i-k/2,lm+4: PRINT a$ END_IF NEXT i FONT_COLOR p,148,0,0: PRINT_LOCATE 62,lm+4: PRINT "pixels" CAPTION b,"m" ' TOP b,20: LEFT b,20 RETURN Afmmh: FOR i = 0 TO we: ' règle graduée en millimètres 2D_LINE i*r,0,i*r,lm IF i/5 = INT(i/5) 2D_LINE i*r,0,i*r,lm+5: a$ = STR$(i): k = TEXT_WIDTH(a$,p) IF i/10 = INT(i/10) THEN PRINT_LOCATE i*r-k/2,lm+4: PRINT STR$(i) END_IF NEXT i FONT_COLOR p,148,0,0: PRINT_LOCATE 47,lm+4: PRINT "mm" CAPTION b,"p" RETURN Afpixv: FOR i = 0 TO h0 STEP 10: ' pixels 2D_LINE 0,i,lm,i IF i/50 = INT(i/50) 2D_LINE 0,i,lm+5,i: a$ = STR$(i): k = TEXT_WIDTH(a$,p) PRINT_LOCATE lm+5,i-7: PRINT a$ END_IF NEXT i FONT_COLOR 1,148,0,0: PRINT_LOCATE 8,15: PRINT "pixels" CAPTION b,"m" RETURN Afmmv: FOR i = 0 TO he: ' mm 2D_LINE 0,i*r,lm,i*r IF i/5 = INT(i/5) 2D_LINE 0,i*r,lm+5,i*r: a$ = STR$(i): k = TEXT_WIDTH(a$,p) IF i/10=INT(i/10) THEN PRINT_LOCATE lm+5,i*r-6: PRINT STR$(i) END_IF NEXT i FONT_COLOR 1,148,0,0: PRINT_LOCATE 12,12: PRINT "mm" CAPTION b,"p" RETURN END_SUB
- plus de paramètres, sauf la longueur en pixels si on veut (si = 0, la règle fait tout l'écran) - la règle s'affiche d'office en haut à gauche de l'écran, en pixels. - il y a deux tout petits boutons en haut à gauche (mettre ses lunettes et bien regarder...) 1_ bouton 'm' ou 'p', commutation d'échelle pixels/millimètres 2_ bouton 'R', rotation de la règle de 90 degrés: - et la règle est déplaçable où on veut dans tout l'écran - on quitte par la touche 'Esc' du clavier (ou bien clic droit, mais ça affiche une fenêtre windows qu'il faut annuler)
Comme je disais, j'ai fait ça sous forme de Sub, avec variables locales, mais en fait c'est un programme complet et indépendant, à mettre en exécutable, et on peut supprimer sub et end/sub et mettre le dim_local en dim simple, en aménageant un peu.
PS je viens d'essayer ton programme, finalement tu fais un peu la même chose que moi, sauf que tu ouvres une fenêtre supplémentaire, sinon ça marche bien chez moi également, sous w7.
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
Sujet: Re: Une règle à l'écran Ven 12 Sep 2014 - 11:18
Super ces programmes, procédures, j'adopte
Bien vu.
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
Sujet: Re: Une règle à l'écran Ven 12 Sep 2014 - 12:53
JL35 a écrit:
Et moi de mon côté j'étais en train de faire un petit bijou (n'ayons pas peur des mots)
Je viens de tester, ben ton petit bijou il a 2 inconvénients: - 1) Dès que l'on utilise une fois la rotation à 90°, la règle se met en plein écran. Donc pour la déplacer sur le coin d'un objet, c 'est impossible. - 2) la fermeture par le clic droit ouvre un menu déroulant, (comme si on avait cliqué-droit sur le bureau). Mais là c'est pas trop gênant.
Alors que ma version n'a pas ces inconvénients, car moi j'ai pondu la perle...
Bon je vais pas faire le beau, car sans ta SUB je n'aurait rien pu faire.....
PS: je viens de RE:tester, la dimension de la règle se bloque que si on passe de mm en Px.
Invité Invité
Sujet: Re: Une règle à l'écran Ven 12 Sep 2014 - 13:16
Jean-Claude! Tu as oublié de mettre ton mot de passe! C'est pas bien.
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
Sujet: Re: Une règle à l'écran Ven 12 Sep 2014 - 13:18
Jean-Claude, 1) Si je fais pivoter la règle de 90 degrés je ne la vois pas changer de longueur ??? si elle fait 500 pixels, c'est dans n'importe quel sens que tu la tournes ??? 2) Pour la fermeture, j'ai bien dit touche Esc de préférence au clic droit qui fait apparaître cette fenêtre, de plus il est facile de supprimer cette action sur le clic droit (juste un test à enlever).
Avec nos perles on va bientôt pouvoir faire un beau collier
Dernières nouvelles: version ultime (pour moi, mais je me dis toujours ça...):
Code:
Regle(800) END ' ============================================================================== SUB Regle(lg) ' affichage règle déplaçable graduée en pixels ou en millimètres (commutable) ' horizontale, commutable en verticale ' lg = longueur (h) de la règle, en pixels (si 0: tout l'écran) ' USAGE: ' - Commutation pixels/millimètres: bouton 'p' ou 'm' ' - Déplacement de la règle: clic gauche, déplacer, relâcher ' - Rotation de 90 degrés de la règle: bouton 'R' ' - Allongement ou raccourcissement de la règle: touches PgUp et PgDn du clavier ' - Quitter: touche Escape LABEL Struct, Modh, Modv, Pm2pm, Rotate, Afpixh, Afmmh, Afpixv, Afmmv DIM_LOCAL we,he,r,i,k,pm,hv,lm,a$,p,b,c,t0,l0,w0,h0,x,y,x1,y1,pas hv = 0: pm = 0: ' affichage en pixels, implicite IF lg <= 0 THEN lg = SCREEN_X t0 = 0: TOP 0,t0: BORDER_HIDE 0 p = 1: PICTURE p: FULL_SPACE p: PRINT_TARGET_IS p: 2D_TARGET_IS p COLOR p,255,255,128: 2D_FILL_COLOR 255,255,128 b=p+1: BUTTON b: WIDTH b,14: HEIGHT b,17: TOP b,7: LEFT b,5: CAPTION b,"m" ON_CLICK b,Pm2pm: ' bascule pixels/mm c=b+1: BUTTON c: WIDTH c,14: HEIGHT c,17: TOP c,7: LEFT c,LEFT(b)+WIDTH(b)-1 CAPTION c,"R": ON_CLICK c,Rotate: ' rotation 90° de la règle we = 517: ' largeur de l'écran en mm <<<<<<<<<<<<<<<<<<<<<<<<<<<< A AJUSTER <<<< he = we*SCREEN_Y/SCREEN_X: ' hauteur écran en mm r = SCREEN_X/we: ' pixels/mm pour cet écran lm = 5 GOSUB Struct REPEAT WHILE MOUSE_LEFT_DOWN(p)=0 IF SCANCODE = 27 THEN TERMINATE: ' Esc IF SCANCODE = 33 OR SCANCODE = 34 pas = 100 IF SCANCODE = 33: ' PgUp: augmenter la longueur de 100 pixels lg = lg + pas: IF lg > SCREEN_X THEN lg = SCREEN_X ELSE: ' PgDn: diminuer la longueur de 100 pixels lg = lg - pas: IF lg < 300 THEN lg = 300 END_IF WAIT 200: GOSUB Struct END_IF END_WHILE x1 = l0+MOUSE_X_POSITION(p): y1 = t0+MOUSE_Y_POSITION(p): ' coordonnées absolues WHILE MOUSE_LEFT_UP(p)=0 x = l0+MOUSE_X_POSITION(p): y = t0+MOUSE_Y_POSITION(p) IF x<>x1 OR y<>y1: ' déplacement de la règle l0 = l0+x-x1: IF l0<0 THEN l0 = 0 IF l0>SCREEN_X-w0 THEN l0 = SCREEN_X-w0 t0 = t0+y-y1: IF t0<0 THEN t0 = 0 IF t0>SCREEN_Y-h0 THEN t0 = SCREEN_Y-h0 LEFT 0,l0: TOP 0,t0 x1=x: y1=y END_IF PAUSE 100 END_WHILE UNTIL 1=2 Struct: FONT_COLOR p,0,0,0 IF hv = 0 GOSUB Modh IF pm = 0 GOSUB Afpixh ELSE GOSUB Afmmh END_IF ELSE GOSUB Modv IF pm = 0 GOSUB Afpixv ELSE GOSUB Afmmv END_IF END_IF RETURN Modh: w0 = SCREEN_X: h0 = 24 w0 = lg: IF w0>SCREEN_X THEN w0=SCREEN_X WIDTH 0,w0: HEIGHT 0,h0: FULL_SPACE p 2D_LINE 0,0,w0,0 RETURN Modv: w0 = 35: h0 = SCREEN_Y h0 = lg: IF h0>SCREEN_Y THEN h0=SCREEN_Y WIDTH 0,w0: HEIGHT 0,h0: FULL_SPACE p 2D_LINE 0,0,0,h0 RETURN Pm2pm: CLS: COLOR p,255,255,128: FONT_COLOR p,0,0,0 If pm = 0 pm = 1 IF hv = 0 GOSUB Afmmh ELSE GOSUB Afmmv END_IF ELSE pm = 0 IF hv = 0 GOSUB Afpixh ELSE GOSUB Afpixv END_IF END_IF RETURN Rotate: CLS: COLOR p,255,255,128: FONT_COLOR p,0,0,0 IF hv = 0 hv = 1 ELSE hv = 0 END_IF GOSUB Struct RETURN Afpixh: FOR i = 0 TO w0 STEP 10: ' règle graduée en pixels 2D_LINE i,0,i,lm IF i/50 = INT(i/50) 2D_LINE i,0,i,lm+5: a$ = STR$(i): k = TEXT_WIDTH(a$,p) PRINT_LOCATE i-k/2,lm+4: PRINT a$ END_IF NEXT i FONT_COLOR p,148,0,0: PRINT_LOCATE 62,lm+4: PRINT "pixels" CAPTION b,"m" ' TOP b,20: LEFT b,20 RETURN Afmmh: FOR i = 0 TO we: ' règle graduée en millimètres 2D_LINE i*r,0,i*r,lm IF i/5 = INT(i/5) 2D_LINE i*r,0,i*r,lm+5: a$ = STR$(i): k = TEXT_WIDTH(a$,p) IF i/10 = INT(i/10) THEN PRINT_LOCATE i*r-k/2,lm+4: PRINT STR$(i) END_IF NEXT i FONT_COLOR p,148,0,0: PRINT_LOCATE 47,lm+4: PRINT "mm" CAPTION b,"p" RETURN Afpixv: FOR i = 0 TO h0 STEP 10: ' pixels 2D_LINE 0,i,lm,i IF i/50 = INT(i/50) 2D_LINE 0,i,lm+5,i: a$ = STR$(i): k = TEXT_WIDTH(a$,p) PRINT_LOCATE lm+5,i-7: PRINT a$ END_IF NEXT i FONT_COLOR 1,148,0,0: PRINT_LOCATE 8,60: PRINT "pixels" CAPTION b,"m" RETURN Afmmv: FOR i = 0 TO he: ' mm 2D_LINE 0,i*r,lm,i*r IF i/5 = INT(i/5) 2D_LINE 0,i*r,lm+5,i*r: a$ = STR$(i): k = TEXT_WIDTH(a$,p) IF i/10=INT(i/10) THEN PRINT_LOCATE lm+5,i*r-6: PRINT STR$(i) END_IF NEXT i FONT_COLOR 1,148,0,0: PRINT_LOCATE 14,44: PRINT "mm" CAPTION b,"p" RETURN END_SUB
Principales fonctions: - Commutation pixels/millimètres: bouton 'p' ou 'm' de la règle. - Déplacement de la règle: clic gauche sur la règle, déplacer, relâcher. - Rotation de 90 degrés de la règle: bouton 'R'. - Allongement ou raccourcissement de la règle: touches PgUp (+) et PgDn (-) du clavier (par 100 pixels). - Quitter: touche Escape exclusivement.
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
Sujet: Re: Une règle à l'écran Ven 12 Sep 2014 - 18:39
@Cosmos, Je n'ai pas oublié de mettre mon mot de passe, mais j'ai oublié le mot de passe....
@JL35, J'adopte ta dernière version, çà fonctionne à merveille. Le seul inconvénient que j'y trouve, (Faut bien que je justifie ma version) c'est qu'il faudra se rappeler, le jour où ..., les touches page_up et page_down. Perso, je ne vois rien à ajouter ou à modifier.
Bravo, on n'est plus dans la perle, mais dans le diamant.
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
Sujet: Re: Une règle à l'écran Ven 12 Sep 2014 - 19:33
Effectivement, cet outil est très pratique et très bien réfléchi !
La longueur réglable de la règle lui apporte un confort appréciable. Direction ma caisse a outils virtuel...
Merci a vous.
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
Sujet: Re: Une règle à l'écran Ven 12 Sep 2014 - 20:01
C'est clair ! c'est un bon outil.
Heureusement que j'étais là pour bouger l'ancêtre ,
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
Sujet: Re: Une règle à l'écran Ven 12 Sep 2014 - 20:40
Bon, ça va les gamins... Avec tes neurones encore comme neufs tu vas bien t'en rappeler de ces fameuses touches ! et si moi j'oublie, je te demanderai.
Et merci Minibug pour ton appréciation, ça fait quand même plaisir
mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
Sujet: Re: Une règle à l'écran Sam 13 Sep 2014 - 21:51
bonsoir a tous pour l'aspect graphique JL35 est loin devant mais mais mais la règle ajustable est plus pratique pour mon vieux XP en 11 pouce bravo jean claude de penser aux ancêtres. une petite remarque est il possible d'inverser le sens de la règle et de prendre la mesure de droite a gauche et de bas en haut ?
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
Sujet: Re: Une règle à l'écran Dim 14 Sep 2014 - 11:07
Remarque quand même que la mienne, avec son aspect graphique incomparable ( ) est tout aussi ajustable en longueur avec les fameuses touches PgUp et PgDn (celles que Jean-Claude a peur d'oublier): dernière version ci-dessus. Quant à inverser le sens de la règle, tout est possible bien sûr, et ça peut faire l'objet d'un bon exercice pour ceux qui en ont l'usage... mais franchement je n'en vois pas trop l'intérêt !
Ça m'étonne même que personne n'ait demandé à l'avoir à 45°, puis ensuite à n'importe quel autre angle à la demande...
11 pouces, c'est quand même pas beaucoup pour faire des trucs graphiques !
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
Sujet: Re: Une règle à l'écran Dim 14 Sep 2014 - 11:26
Qui aurait cru que ma version, convient mieux à XP ? Ce n'était pas prévu, mais bon, tant mieux.
Pour prendre les mesures, Mindstorm, tu peux placer la règle à droite ou à gauche de l'objet à mesurer, pour avoir les graduations au bord de l'objet. Et idem, pour le haut et le bas.
Même avis que JL35, à quoi ça peut servir d'avoir les graduations qui partent du bas ?
A+
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
Sujet: Re: Une règle à l'écran Dim 14 Sep 2014 - 19:05
Salut a tous !
à JL35 :
Citation :
Ça m'étonne même que personne n'ait demandé à l'avoir à 45°, puis ensuite à n'importe quel autre angle à la demande...
J'y ai pensé mais j'ai pas osé le demander !
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
Sujet: Re: Une règle à l'écran Dim 14 Sep 2014 - 21:35
Super idée JL35, on positionne la règle pour que le 0 soit là ou l'on veut et on clique sur l'autre bout pour tourner la règle en direction de ce que l'on veut mesurer en déplaçant la règle en arc de cercle.
Maintenant que tu nous as soumis cette splendide idée, sera tu en mesure de relever ce beau challenge sans utilise KGF puisque je crois que KGF permettrait d'y arriver sans trop de galères ...
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
Sujet: Re: Une règle à l'écran Dim 14 Sep 2014 - 22:06
J'en étais sûr !
Je ne sais pas trop si comme Minibug tu plaisantes Jicehel, mais au cas où, c'est non, niet, ferme et définitif ! c'est sûr que si on en avait un usage constant (mesurer un truc à l'écran) ça vaudrait le coup d'y réfléchir, mais comme ce n'est certainement pas le cas, aucun intérêt.
D'ailleurs elle se déplace déjà en arc de cercle de 90° autour du point 0 choisi, quel besoin de mesurer un objet dans toutes les directions diagonales ?
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
Sujet: Re: Une règle à l'écran Lun 15 Sep 2014 - 0:13
mdr, je suis d'accord et puis grâce à pitagore, on peut avoir la longueur d'un trait non horizontal ni vertical
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 règle à l'écran Lun 15 Sep 2014 - 1:19
Jicehel a écrit:
mdr, je suis d'accord et puis grâce à pitagore, on peut avoir la longueur d'un trait non horizontal ni vertical
Si Pythagore lirait ce message il préférerait retourner dans sa tombe ! Repose en paix cher Monsieur ! Il s’agirait d’un autre pitagore