FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Immortaliser les photos de famille
par Jean Claude Hier à 21:24

» Concours de Morpions
par jjn4 Hier à 16:34

» Tout est tranquille
par Jean Claude Ven 22 Sep 2017 - 21:41

» Texte en gif animé
par JL35 Ven 22 Sep 2017 - 13:29

» BasicEditor
par Yannick Mer 20 Sep 2017 - 17:17

» Simuler l’appui d'une touche ou combinaison de touches.
par pascal10000 Lun 18 Sep 2017 - 19:30

» Utilisation de HVIEWER pour afficher des images
par papydall Lun 18 Sep 2017 - 17:43

» Panoramic et les gifs animés.
par papydall Lun 18 Sep 2017 - 16:32

» recover source
par pascal10000 Dim 17 Sep 2017 - 14:21

» Recent dans vos menu
par Jean Claude Sam 16 Sep 2017 - 11:41

» Comment centrer un texte 3D.
par pascal10000 Ven 15 Sep 2017 - 20:20

» Carte interface 16 entrées et 16 sorties
par Jicehel Ven 15 Sep 2017 - 16:30

» Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT
par pascal10000 Ven 15 Sep 2017 - 16:20

» Compilateur FBPano
par jean_debord Ven 15 Sep 2017 - 9:59

» 1 (en analyse): 3D_TARGET_IS ne fonctionne pas sur 3D_TEXT
par Jack Jeu 14 Sep 2017 - 19:52

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Septembre 2017
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier

Partagez | 
 

 Une grille d'un nouveau (?) genre

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
JL35



Nombre de messages : 5951
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Une grille d'un nouveau (?) genre   Jeu 25 Fév 2016 - 0: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
' ==============================================================================
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5019
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Une grille d'un nouveau (?) genre   Jeu 25 Fév 2016 - 10: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+

Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5855
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Une grille d'un nouveau (?) genre   Jeu 25 Fév 2016 - 13: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)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5951
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Une grille d'un nouveau (?) genre   Jeu 25 Fév 2016 - 16: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5019
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Une grille d'un nouveau (?) genre   Jeu 25 Fév 2016 - 20:50

Rassure-toi JL35, je ne suis pas choqué, seulement surpris. Very Happy

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+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Une grille d'un nouveau (?) genre   Jeu 25 Fév 2016 - 21: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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



Nombre de messages : 5951
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Une grille d'un nouveau (?) genre   Jeu 25 Fév 2016 - 22: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5531
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Une grille d'un nouveau (?) genre   Jeu 25 Fév 2016 - 22:43



Dernière édition par papydall le Jeu 25 Fév 2016 - 22:51, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jean Claude

avatar

Nombre de messages : 5019
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Une grille d'un nouveau (?) genre   Jeu 25 Fév 2016 - 22: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 - 23:01, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5019
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Une grille d'un nouveau (?) genre   Jeu 25 Fév 2016 - 22: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 Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5951
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Une grille d'un nouveau (?) genre   Jeu 25 Fév 2016 - 23: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  Very Happy


Dernière édition par JL35 le Ven 26 Fév 2016 - 13:30, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5019
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Une grille d'un nouveau (?) genre   Ven 26 Fév 2016 - 10: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+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5951
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Une grille d'un nouveau (?) genre   Ven 26 Fév 2016 - 13: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5019
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Une grille d'un nouveau (?) genre   Ven 26 Fév 2016 - 14: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+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5855
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Une grille d'un nouveau (?) genre   Ven 26 Fév 2016 - 16:08

ch'ti fillotes par ce que chits fillottes, c'est ambigu .... Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5951
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Une grille d'un nouveau (?) genre   Ven 26 Fév 2016 - 16: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 ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5019
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Une grille d'un nouveau (?) genre   Ven 26 Fév 2016 - 18:13

C'est un référence au film les visiteurs. Very Happy
Spoiler:
 
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Une grille d'un nouveau (?) genre   

Revenir en haut Aller en bas
 
Une grille d'un nouveau (?) genre
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Nouveau virus : Win32.Induc.A. Surveillez vos logiciels !
» Nouveau Routeur D-link DIR 628 ... Configuration
» [résolu]Nouveau PC Première utilisation
» Un icône de nouveau message plus voyant
» Nouveau membre

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: