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 grille d'un nouveau (?) genre | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Une grille d'un nouveau (?) genre Mer 24 Fév 2016 - 22:06 | |
| Ca fait un peu gadget, mais c'est le même principe que les grilles qu'on créait en Basic avec les caractères spéciaux, faute de fonctions graphiques. Celle-ci utilise la police 'Terminal' qui contient les caractères graphiques d'autrefois. Bien sûr on est loin des possibilités de la fonction Grid de Panoramic ! La grille est dessinée par des Print sur un Picture, on obtient des cases que l'on peut garnir avec du texte, mais également avec des images. C'est sous forme d'une Sub, à qui on donne les paramètres suivants: - coordonnées d'implantation (coin haut/gauche) - nombre de colonnes et rangées - dimensions des cases (valeurs arbitraires, à tester) - type d'encadrement des cases: trait simple ou double - Code:
-
DIM xd%,yd%,x%,y%,nc%,nr%,lc%,hr%,wg%,hg%,wc%,hc%,i% nc% = 6: nr% = 9: ' nb de colonnes, rangées lc% = 7: hr% = 3: ' dimension cellules, en caractères
HEIGHT 0,700: WIDTH 0,640 PICTURE 1: FULL_SPACE 1 x% = 30: y% = 40: ' coin supérieur gauche de la grille dans le Picture Grille(1,xd%,yd%,nc%,nr%,lc%,hr%,1): ' grille type 1 (traits doubles) wc% = wg%/nc%: hc% = hg%/nr%: ' -> dimensions d'une case, en pixels PRINT_TARGET_IS 1: FONT_NAME 1,"Arial": FONT_SIZE 1,10 ' Exemple: écriture dans la case colonne 4, rangée 3 x% = xd%+(4-1)*wc%: y% = yd%+(3-1)*hc%: ' coordonnées de la case PRINT_LOCATE x%,y%: PRINT "Cellule: "+STR$(wc%)+"x"+STR$(hc%)
END ' ============================================================================== SUB Grille(obj%,x%,y%,nc%,nr%,lc%,hr%,type%) ' Dessin d'une grille en x%,y% sur l'objet obj%, nc% colonnes de lc% caractères, ' nr% rangées de hr% lignes, type% = 0: traits simples, = 1 traits doubles ' Renvoie dans wg% et hg% les dimensions (largeur, hauteur) de la grille DIM_LOCAL pt%,chg$,chd$,cbg$,cbd$,tth$,ttb$,ttg$,ttd$,crx$,hor$,ver$ DIM_LOCAL c%,r%,i%,j%,wc%,hc%,a$,b$,c$ IF VARIABLE("wg%")=0 THEN DIM wg% IF VARIABLE("hg%")=0 THEN DIM hg% SELECT type% CASE 0: chg$=CHR$(218): chd$=CHR$(191): cbg$=CHR$(192): cbd$=CHR$(217) tth$=CHR$(194): ttb$=CHR$(193): ttg$=CHR$(195): ttd$=CHR$(180) crx$=CHR$(197): hor$=CHR$(196): ver$=CHR$(179) CASE 1: chg$=CHR$(201): chd$=CHR$(187): cbg$=CHR$(200): cbd$=CHR$(188) tth$=CHR$(203): ttb$=CHR$(202): ttg$=CHR$(204): ttd$=CHR$(185) crx$=CHR$(206): hor$=CHR$(205): ver$=CHR$(186) END_SELECT pt% = NUMBER_PRINT_TARGET PRINT_TARGET_IS obj%: FONT_NAME obj%,"Terminal": FONT_SIZE obj%,12 hc% = TEXT_HEIGHT("Ay",obj%): wc% = TEXT_WIDTH("A",obj%) y% = y%-1*hc%/2+1: x% = x%-1*wc%/2+1: a$ = chg$ FOR c% = 1 TO nc% a$ = a$+STRING$(lc%,hor$)+tth$ NEXT c% a$ = LEFT$(a$,LEN(a$)-1)+chd$: PRINT_LOCATE x%,y%: PRINT a$: y% = y%+hc% FOR r% = 1 TO nr% FOR i% = 1 TO hr% a$ = ver$ FOR j% = 1 TO nc% a$ = a$+STRING$(lc%," ")+ver$ NEXT j% PRINT_LOCATE x%,y%: y% = y%+hc%: PRINT a$ NEXT i% a$ = ttg$: b$ = ttd$: c$ = crx$ IF r% = nr% THEN a$ = cbg$: b$ = cbd$: c$ = ttb$ FOR j% = 1 TO nc% a$ = a$+STRING$(lc%,hor$)+c$ NEXT j% a$ = LEFT$(a$,LEN(a$)-1)+b$ PRINT_LOCATE x%,y%: PRINT a$: y% = y%+hc% NEXT r% PRINT_TARGET_IS pt% wg% = wc%*(1+(lc%+1)*nc%): ' largeur totale de la grille en pixels hg% = hc%*(1+(hr%+1)*nr%): ' hauteur totale de la grille en pixels END_SUB ' ============================================================================== | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Une grille d'un nouveau (?) genre Jeu 25 Fév 2016 - 8:29 | |
| Hou ! ça me rappelle des trucs.
@JL35 Je vois, dans ton code, une chose surprenante: - les variables x%,y%,nc%,nr%,lc%,hr% sont déclarées en ligne 1 par DIM donc ce sont des variables globales. - la SUB reprend ces mêmes variables comme "nom de paramètre" en ligne 17 => SUB Grille(obj%,x%,y%,nc%,nr%,lc%,hr%,type%) - et les mêmes pour l'appel en ligne 8 => Grille(1,x%,y%,nc%,nr%,lc%,hr%,1)
Je ne pense pas que la méthode soit bonne, ou alors j'ai raté quelque chose....
A+
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Une grille d'un nouveau (?) genre Jeu 25 Fév 2016 - 11:30 | |
| En principe que tu garde ou non les mêmes noms ne doit pas avoir d'incidence sur les valeurs, mais j'avoue que c'est moins simple à lire car dans la procédure, on peut se demander si l'on souhaite parler de la variable globale ou de la valeur locale passée en paramètre (celle qui est réellement utilisée) | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Une grille d'un nouveau (?) genre Jeu 25 Fév 2016 - 14:20 | |
| @Jean Claude, Je ne vois pas du tout ce qui te choque là-dedans (concernant les variables). Celles que tu cites sont des variables globales, déclarées dans le programme principales, passées en paramètres à la sub, je ne vois pas très bien comment on peut faire autrement ? C'est le fait qu'elles ont le même nom dans la déclaration de la sub ? moi ça ne me choque pas... et apparemment ce n'est pas gênant. Ce qui est passé en paramètre est bien une variable globale, et non locale. Ce qui peut choquer, c'est le fait que dans la sub elle-même je réutilise certaines de ces variables en local, par exemple x% et y%, pour des calculs internes à la sub, mais en sachant que à l'intérieur de la sub elles sont considérées comme variables locales et retrouvent leur valeur initiale dans le programme appelant. La variable globale devient locale à l'intérieur de la sub, et redevient globale en sortie, avec sa valeur d'origine, ce qui se passe en local est ignoré et perdu. Oui, enfin, c'est peut-être un peu scabreux tout ça, mais enfin ça marche comme ça, j'avoue que je ne m'étais pas posé la question. En fait, si je fais: - Code:
-
DIM k% k% = 15: Voir1(k%): MESSAGE STR$(k%) k% = 15: Voir2(k%): MESSAGE STR$(k%) TERMINATE
SUB Voir1(k%) k% = 150: ' <- traité comme variable locale END_SUB
SUB Voir2(u%) k% = 150: ' <- traité comme variable globale END_SUB Dans la 1ère sub, k% en paramètre devient une variable locale, et sa valeur initiale est restaurée en sortie. Dans la 2ème, k% est une variable globale, donc peut être modifié. Mais je reconnais que c'est un peu subtil, et que ce n'est peut-être pas un bon exemple de programmation. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Une grille d'un nouveau (?) genre Jeu 25 Fév 2016 - 18:50 | |
| Rassure-toi JL35, je ne suis pas choqué, seulement surpris. Tu as écrit: - Citation :
- La variable globale devient locale à l'intérieur de la sub, et redevient globale en sortie, avec sa valeur d'origine, ce qui se passe en local est ignoré et perdu.
Hé bien j'apprend quelque chose, j'ai toujours pensé qu'une variable globale utilisée dans une SUB restait globale. En fait une variable globale ne devient local que dans le cas où elle est utilisée dans l’énoncé de la SUB. Regarde le code suivant et fait les 2 essais demandés en commentaire. - Code:
-
dim i% i%=50 imprime(i%) print print i% : ' comparer le résultat dans les 2 cas
end ' 1er cas sub imprime(i%) ' lancer le programme ' noter le résultat
' deuxième cas: sub imprime(j%) ' pour le cas 2: remettre la ligne 11 en service ' lancer le programme ' noter le résultat
sub imprime(i%) :' cas 2: remplacer i% par j% dim_local n% for n%=1 to 10 ' j%=j%+1 : print j%;" "; i%=i%+1 :' cette ligne doit rester tel quel pour voir le comportement de i% dans les 2 cas print i% next n% end_sub
Je pense que c'est source d'erreur d'utiliser une variable globale dans l’énoncé d'une SUB. Même si cela marche, je ne suis pas pour. A+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Une grille d'un nouveau (?) genre Jeu 25 Fév 2016 - 19:06 | |
| Petite info technique: une variable définie par DIM_LOCAL, de même qu'une variable formelle d'une sub (un paramètre) est créé dans la table de symboles Panoramic avec un nom modifié. En fait, le nom interne est nom_de_la_sub suivi d'un ! suivi du nom_de_la_variable. Donc, dans le code suivant: - Code:
-
dim x%,y$ ... sub Test(x%) dim_local y$ ... end_sub
tu as en permanence les variables X% et Y%. Et dès que tu es dans la sub Test, tu as également les variables TEST!X% et TEST!Y$. Et dans uns sub, Panoramic procède de la manière suivante, pour la variable x%, par exemple: 1. on cherche TEST!X%. Si trouvé, on l'utilise. 2. si non trouvé, on cherche X%. Si trouvé, on l'utilise. 3. si non trouvé, alors erreur. Comme ça, les choses sont plus claires ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Une grille d'un nouveau (?) genre Jeu 25 Fév 2016 - 20:25 | |
| Merci Klaus pour cet éclairage lumineux. Comme toujours. @Jean Claude Je me suis mal exprimé mais ce que tu dis c'est ce que je montrais dans mon petit exemple: traitement différent dans la sub d'une variable globale utilisée en paramètre de la sub ou non. Je reviens à la pseudo-grille, on peut afficher une planche de photos: - Code:
-
DIM xd%,yd%,x%,y%,nc%,nr%,lc%,hr%,wg%,hg%,wc%,hc%,i%,j%,n%,a$,k% DIM rep$ rep$ = "C:\PHOTOS\SAMSUNG": ' <============ A ADAPTER ! ==================== nc% = 7: nr% = 7: ' nb de colonnes, rangées lc% = 12: hr% = 7: ' dimension cellules, en caractères
HEIGHT 0,940: WIDTH 0,1120: BORDER_SMALL 0 MEMO 10: HIDE 10 IMAGE 11 PICTURE 1: FULL_SPACE 1 xd% = 0: yd% = 0: ' coin supérieur gauche de la grille dans le Picture Grille(1,xd%,yd%,nc%,nr%,lc%,hr%,0): ' grille type 1 (traits doubles) wc% = wg%/nc%: hc% = hg%/nr%: ' -> dimensions d'une case, en pixels CAPTION 0,"Total grille: "+STR$(wg%)+" x "+STR$(hg%)+", cases de "+STR$(wc%)+" x "+STR$(hc%) EXECUTE_WAIT "cmd.exe /c DIR /B "+rep$+"*.jpg | clip": CLIPBOARD_PASTE 10 2D_TARGET_IS 1: PRINT_TARGET_IS 1: FONT_NAME 1,"Consolas": FONT_SIZE 1,7: FONT_COLOR 1,0,0,0 n% = 0 FOR j% = 1 TO nr%: ' rangées FOR i% = 1 TO nc%: ' colonnes x% = xd%+(i%-1)*wc%-2*i%+4: y% = yd%+(j%-1)*hc%-2*j%+4: ' coordonnées de la case n% = n%+1: IF n% > COUNT(10) THEN EXIT_FOR a$ = ITEM_READ$(10,n%) k%=wc%-4 RedimImg(rep$+a$,k%,k%*3/4,"") CLIPBOARD_PASTE 11: 2D_IMAGE_PASTE 11,x%,y%: ' affichage image -> case PRINT_LOCATE x%,y%+k%*3/4: PRINT a$ NEXT i% NEXT j% END ' ============================================================================== SUB Grille(obj%,x%,y%,nc%,nr%,lc%,hr%,type%) ' Dessin d'une grille en x%,y% sur l'objet obj%, nc% colonnes de lc% caractères, ' nr% rangées de hr% lignes, type% = 0: traits simples, = 1 traits doubles ' Renvoie dans wg% et hg% les dimensions (largeur, hauteur) de la grille DIM_LOCAL pt%,chg$,chd$,cbg$,cbd$,tth$,ttb$,ttg$,ttd$,crx$,hor$,ver$ DIM_LOCAL c%,r%,i%,j%,wc%,hc%,a$,b$,c$ IF VARIABLE("wg%")=0 THEN DIM wg% IF VARIABLE("hg%")=0 THEN DIM hg% SELECT type% CASE 0: chg$=CHR$(218): chd$=CHR$(191): cbg$=CHR$(192): cbd$=CHR$(217) tth$=CHR$(194): ttb$=CHR$(193): ttg$=CHR$(195): ttd$=CHR$(180) crx$=CHR$(197): hor$=CHR$(196): ver$=CHR$(179) CASE 1: chg$=CHR$(201): chd$=CHR$(187): cbg$=CHR$(200): cbd$=CHR$(188) tth$=CHR$(203): ttb$=CHR$(202): ttg$=CHR$(204): ttd$=CHR$(185) crx$=CHR$(206): hor$=CHR$(205): ver$=CHR$(186) END_SELECT pt% = NUMBER_PRINT_TARGET PRINT_TARGET_IS obj%: FONT_NAME obj%,"Terminal": FONT_SIZE obj%,12: font_color obj%,255,255,0 hc% = TEXT_HEIGHT("Ay",obj%): wc% = TEXT_WIDTH("A",obj%) y% = y%-1*hc%/2+1: x% = x%-1*wc%/2+1: a$ = chg$ FOR c% = 1 TO nc% a$ = a$+STRING$(lc%,hor$)+tth$ NEXT c% a$ = LEFT$(a$,LEN(a$)-1)+chd$: PRINT_LOCATE x%,y%: PRINT a$: y% = y%+hc% FOR r% = 1 TO nr% FOR i% = 1 TO hr% a$ = ver$ FOR j% = 1 TO nc% a$ = a$+STRING$(lc%," ")+ver$ NEXT j% PRINT_LOCATE x%,y%: y% = y%+hc%: PRINT a$ NEXT i% a$ = ttg$: b$ = ttd$: c$ = crx$ IF r% = nr% THEN a$ = cbg$: b$ = cbd$: c$ = ttb$ FOR j% = 1 TO nc% a$ = a$+STRING$(lc%,hor$)+c$ NEXT j% a$ = LEFT$(a$,LEN(a$)-1)+b$ PRINT_LOCATE x%,y%: PRINT a$: y% = y%+hc% NEXT r% PRINT_TARGET_IS pt% wg% = wc%*(1+(lc%+1)*nc%): ' largeur totale de la grille en pixels hg% = hc%*(1+(hr%+1)*nr%): ' hauteur totale de la grille en pixels END_SUB ' ============================================================================== SUB RedimImg(f$,w%,h%,fr$) ' Redimensionnement image f$ (JPG,BMP) en w% x h%, résultat dans fr$ (BMP) ou ' clipboard si fr$ = "" ' L'image résultante doit pouvoir tenir en entier dans l'écran DIM_LOCAL n2d%,p%,w0%,h0%,r%: n2d% = NUMBER_2D_TARGET w0% = WIDTH(0): h0% = HEIGHT(0): r% = 0 IF w0%<(w%+20) THEN WIDTH 0,w%+20: r% = 1 IF h0%<(h%+40) THEN HEIGHT 0,h%+40: r% = 1 p% = 900: PICTURE p%: WIDTH p%,w%: HEIGHT p%,h%: STRETCH_ON p%: FILE_LOAD p%,f$ IMAGE p%+1 2D_TARGET_IS 0: 2D_IMAGE_COPY p%+1,0,0,w%,h%: 2D_TARGET_IS n2d%: DELETE p% CLIPBOARD_COPY p%+1: IF fr$<>"" THEN FILE_SAVE p%+1,fr$ DELETE p%+1 IF r% = 1 THEN WIDTH 0,w0%: HEIGHT 0,h0% END_SUB ' ============================================================================== Bon, d'accord, on peut faire aussi bien en traçant les lignes dans le picture et en important les images de la même façon. Remarquer quand même la petite sub de réduction d'images. | |
| | | 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 grille d'un nouveau (?) genre Jeu 25 Fév 2016 - 20:43 | |
|
Dernière édition par papydall le Jeu 25 Fév 2016 - 20:51, édité 1 fois | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Une grille d'un nouveau (?) genre Jeu 25 Fév 2016 - 20:44 | |
| - JL35 a écrit:
- traitement différent dans la sub d'une variable globale utilisée en paramètre de la sub ou non.
On est bien d'accord, c'est pour cela que je préfère éviter d'utiliser une variable globale comme paramètre (Pas celui envoyé) dans une SUB (je dis une parce que je pense procédure). Mon but est d'éliminer des risques de confusion dans les gros codes. Je viens de faire un test de ton dernier programme et ça donne ça: Bon c'est pas très fidèle à la réalité, mais ça marche. A+
Dernière édition par Jean Claude le Jeu 25 Fév 2016 - 21:01, édité 1 fois | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Une grille d'un nouveau (?) genre Jeu 25 Fév 2016 - 20:57 | |
| Merci Papydall pour ce rapel, rappel, Je le découvre, et cela confirme que l'utilisation d'une variable globale peut être utilisé en paramètre d'une SUB. Néanmoins, je préfère "ne pas mélanger les torchons avec les serviettes". Mais c'est bon de réviser les bases... A+ PS: je viens de voir que tu as corrigé ta FÔTE | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Une grille d'un nouveau (?) genre Jeu 25 Fév 2016 - 21:14 | |
| Jean Claude, effectivement il faut ajuster les proportions à l'image elle-même. Mon exemple demande à être un peu affûté. En effet, pour mes images (photos) la proportion largeur/hauteur est toujours de 4/3, ce qu'on voit dans les paramètres de la sub de réduction: RedimImg(rep$+a$,k%,k%*3/4,"") Dans l'absolu, il faudrait d'abord récupérer les dimensions de l'image (il y a des subs qui font ça très bien), garder la même largeur de case (k%) et fixer la hauteur en fonction des proportions de l'image, pour ne pas avoir de déformation. Allez, comme je suis bon prince, voici la nouvelle formule (le calcul des dimensions ralentit un peu le mouvement, mais on n'est pas pressé): - Code:
-
DIM xd%,yd%,x%,y%,w%,h%,nc%,nr%,lc%,hr%,wg%,hg%,wc%,hc%,i%,j%,n%,a$,k% DIM rep$,wi%,hi% rep$ = "C:\PHOTOS\SAMSUNG": ' <============== A AJUSTER ! ===================== nc% = 7: nr% = 7: ' nb de colonnes, rangées lc% = 12: hr% = 7: ' dimension cellules, en caractères
HEIGHT 0,940: WIDTH 0,1120: BORDER_SMALL 0 MEMO 10: HIDE 10 IMAGE 11 PICTURE 1: FULL_SPACE 1 xd% = 0: yd% = 0: ' coin supérieur gauche de la grille dans le Picture Grille(1,xd%,yd%,nc%,nr%,lc%,hr%,0): ' grille type 1 (traits doubles) wc% = wg%/nc%: hc% = hg%/nr%: ' -> dimensions d'une case, en pixels CAPTION 0,"Total grille: "+STR$(wg%)+" x "+STR$(hg%)+", cases de "+STR$(wc%)+" x "+STR$(hc%) EXECUTE_WAIT "cmd.exe /c DIR /B "+rep$+"*.jpg | clip": CLIPBOARD_PASTE 10 2D_TARGET_IS 1: PRINT_TARGET_IS 1: FONT_NAME 1,"Consolas": FONT_SIZE 1,7: FONT_COLOR 1,0,0,0 n% = 0 FOR j% = 1 TO nr%: ' rangées FOR i% = 1 TO nc%: ' colonnes x% = xd%+(i%-1)*wc%-2*i%+4: y% = yd%+(j%-1)*hc%-2*j%+4: ' coordonnées de la case n% = n%+1: IF n% > COUNT(10) THEN EXIT_FOR a$ = ITEM_READ$(10,n%) DimJpgBmp(rep$+a$): ' -> dimensions image: wi% x hi% w% = wc%-4: h% = hc%-10 IF wi%>hi% h% = w%*hi%/wi% ELSE w% = h%*wi%/hi% END_IF RedimImg(rep$+a$,w%,h%,"") CLIPBOARD_PASTE 11: 2D_IMAGE_PASTE 11,x%,y%: ' affichage image -> case PRINT_LOCATE x%,y%+h%: PRINT a$ NEXT i% NEXT j% END ' ============================================================================== SUB Grille(obj%,x%,y%,nc%,nr%,lc%,hr%,type%) ' Dessin d'une grille en x%,y% sur l'objet obj%, nc% colonnes de lc% caractères, ' nr% rangées de hr% lignes, type% = 0: traits simples, = 1 traits doubles ' Renvoie dans wg% et hg% les dimensions (largeur, hauteur) de la grille DIM_LOCAL pt%,chg$,chd$,cbg$,cbd$,tth$,ttb$,ttg$,ttd$,crx$,hor$,ver$ DIM_LOCAL c%,r%,i%,j%,wc%,hc%,a$,b$,c$ IF VARIABLE("wg%")=0 THEN DIM wg% IF VARIABLE("hg%")=0 THEN DIM hg% SELECT type% CASE 0: chg$=CHR$(218): chd$=CHR$(191): cbg$=CHR$(192): cbd$=CHR$(217) tth$=CHR$(194): ttb$=CHR$(193): ttg$=CHR$(195): ttd$=CHR$(180) crx$=CHR$(197): hor$=CHR$(196): ver$=CHR$(179) CASE 1: chg$=CHR$(201): chd$=CHR$(187): cbg$=CHR$(200): cbd$=CHR$(188) tth$=CHR$(203): ttb$=CHR$(202): ttg$=CHR$(204): ttd$=CHR$(185) crx$=CHR$(206): hor$=CHR$(205): ver$=CHR$(186) END_SELECT pt% = NUMBER_PRINT_TARGET PRINT_TARGET_IS obj%: FONT_NAME obj%,"Terminal": FONT_SIZE obj%,12: font_color obj%,255,255,0 hc% = TEXT_HEIGHT("Ay",obj%): wc% = TEXT_WIDTH("A",obj%) y% = y%-1*hc%/2+1: x% = x%-1*wc%/2+1: a$ = chg$ FOR c% = 1 TO nc% a$ = a$+STRING$(lc%,hor$)+tth$ NEXT c% a$ = LEFT$(a$,LEN(a$)-1)+chd$: PRINT_LOCATE x%,y%: PRINT a$: y% = y%+hc% FOR r% = 1 TO nr% FOR i% = 1 TO hr% a$ = ver$ FOR j% = 1 TO nc% a$ = a$+STRING$(lc%," ")+ver$ NEXT j% PRINT_LOCATE x%,y%: y% = y%+hc%: PRINT a$ NEXT i% a$ = ttg$: b$ = ttd$: c$ = crx$ IF r% = nr% THEN a$ = cbg$: b$ = cbd$: c$ = ttb$ FOR j% = 1 TO nc% a$ = a$+STRING$(lc%,hor$)+c$ NEXT j% a$ = LEFT$(a$,LEN(a$)-1)+b$ PRINT_LOCATE x%,y%: PRINT a$: y% = y%+hc% NEXT r% PRINT_TARGET_IS pt% wg% = wc%*(1+(lc%+1)*nc%): ' largeur totale de la grille en pixels hg% = hc%*(1+(hr%+1)*nr%): ' hauteur totale de la grille en pixels END_SUB ' ============================================================================== SUB RedimImg(f$,w%,h%,fr$) ' Redimensionnement image f$ (JPG,BMP) en w%xh%. Si h%=0: redimension proportionnelle ' résultat dans fr$ (BMP) ou clipboard si fr$ = "" ' L'image résultante doit pouvoir tenir en entier dans l'écran DIM_LOCAL n2d%,p%,w0%,h0%,r%,fm$,wi%,hi%: n2d% = NUMBER_2D_TARGET w0% = WIDTH(0): h0% = HEIGHT(0): r% = 0 IF w0%<(w%+20) THEN WIDTH 0,w%+20: r% = 1 IF h0%<(h%+40) THEN HEIGHT 0,h%+40: r% = 1 p% = 900: PICTURE p%: WIDTH p%,w%: HEIGHT p%,h%: STRETCH_ON p%: FILE_LOAD p%,f$ IMAGE p%+1 2D_TARGET_IS 0: 2D_IMAGE_COPY p%+1,0,0,w%,h%: 2D_TARGET_IS n2d%: DELETE p% CLIPBOARD_COPY p%+1: IF fr$<>"" THEN FILE_SAVE p%+1,fr$ DELETE p%+1 IF r% = 1 THEN WIDTH 0,w0%: HEIGHT 0,h0% END_SUB ' ============================================================================== SUB DimJpgBmp(f$) ' Image JPG ou BMP exclusivement, dimensions dans wi% et hi% DIM_LOCAL fm$: fm$ = "C:\Temp\Provy.bmp" PICTURE 1099: HIDE 1099: FILE_LOAD 1099,f$: FILE_SAVE 1099,fm$: DELETE 1099 FILEBIN_OPEN_READ 1,fm$ FILEBIN_POSITION 1,18: wi% = FILEBIN_READ(1)+256*FILEBIN_READ(1) FILEBIN_POSITION 1,22: hi% = FILEBIN_READ(1)+256*FILEBIN_READ(1) FILEBIN_CLOSE 1 FILE_DELETE fm$ END_SUB ' ==============================================================================
essaie avec ça, pour voir... Il faudrait ajuster les dimensions des cases en fonction de l'orientation des images (variables lc% et hr%). Si elles sont verticales, par exemple, il les faut plus hautes que larges. Si elles sont mélangées (horizontales/verticales) c'est plus compliqué, mais faisable. PS: La preuve: modifié pour garder les proportions des images
Dernière édition par JL35 le Ven 26 Fév 2016 - 11:30, édité 1 fois | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Une grille d'un nouveau (?) genre Ven 26 Fév 2016 - 8:07 | |
| Ben là, ça ne marche plus ? Heu... c'est quoi => fm$ = "Z:\Provy.bmp"J'ai essayer de remplacer par une image de ma planche avec son chemin, mais il n'y a rien qui s'affiche (sauf la grille) Sinon j'ai repris ton code précédent en modifiant les lignes 24,25 et 26 comme suit: - Code:
-
RedimImg(rep$+a$,k%,k%*5/4,"") CLIPBOARD_PASTE 11: 2D_IMAGE_PASTE 11,x%,y%: ' affichage image -> case PRINT_LOCATE x%,y%+k%*5/4: PRINT a$
Et la j'ai un affichage correct de mes images (J'ai changé 3/4 par 5/4). A+ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Une grille d'un nouveau (?) genre Ven 26 Fév 2016 - 11:29 | |
| Mille excuses Jean Claude, je me suis encore fait avoir avec mon Z:\ (mon disque-mémoire qui me sert pour mes fichiers temporaires) Il faut mettre fm$ = "C:\Temp\Provy.tmp" C'est juste un fichier provisoire qui sert à calculer les dimensions de l'image, et effacé ensuite. Et là tu auras les proportions exactes, pas des approximations.
J'ai corrigé ci-dessus. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Une grille d'un nouveau (?) genre Ven 26 Fév 2016 - 12:46 | |
| Cette fois ça marche.
J'ai dû modifier lc% à 14 pour un meilleur cadrage.
Il faudra que j'essai avec des photos, mais là je dois partir chercher ma fille et mes "chits fillottes" à la gare de Toulon.
A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Une grille d'un nouveau (?) genre Ven 26 Fév 2016 - 14:08 | |
| ch'ti fillotes par ce que chits fillottes, c'est ambigu .... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Une grille d'un nouveau (?) genre Ven 26 Fév 2016 - 14:35 | |
| Oui Jean Claude, ces valeurs lc% et hr%, qui déterminent les dimensions d'une case, s'expriment en nombre de caractères (largeur et hauteur), et une fois traduites en pixels c'est plutôt imprécis, disons que c'est au pif, on ne peut pas régler sur un nombre précis de pixels, c'est par bonds.
Prends bien soin de tes petites filles, fais des photos, tu verras plus tard, c'est super de revoir tout ça. Comme dit Jicehel, ch'tits fillotes c'est pas tellement le langage de ta région ça ? plutôt du ch'nord ? | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Une grille d'un nouveau (?) genre Ven 26 Fév 2016 - 16:13 | |
| C'est un référence au film les visiteurs. - Spoiler:
Godefroy Amaury de Malfête, comte de Montmirail, d'Apremont et de Papincourt, dit « le Hardi »
| |
| | | Contenu sponsorisé
| Sujet: Re: Une grille d'un nouveau (?) genre | |
| |
| | | | Une grille d'un nouveau (?) genre | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |