FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Form(résolu)
Une grille d'un nouveau (?) genre Emptypar leclode Aujourd'hui à 17:59

» trop de fichiers en cours
Une grille d'un nouveau (?) genre Emptypar Marc Aujourd'hui à 11:42

» Bataille navale SM
Une grille d'un nouveau (?) genre Emptypar jjn4 Hier à 17:39

» Une calculatrice en une ligne de programme
Une grille d'un nouveau (?) genre Emptypar jean_debord Hier à 8:01

» Gestion d'un système client-serveur.
Une grille d'un nouveau (?) genre Emptypar Pedro Jeu 25 Avr 2024 - 19:31

» Les maths du crocodile
Une grille d'un nouveau (?) genre Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Une grille d'un nouveau (?) genre Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Une grille d'un nouveau (?) genre Emptypar Froggy One Mer 24 Avr 2024 - 18:38

» Dessine-moi une galaxie
Une grille d'un nouveau (?) genre Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
Une grille d'un nouveau (?) genre Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
Une grille d'un nouveau (?) genre Emptypar papydall Dim 21 Avr 2024 - 23:30

» 2D_fill_color(résolu)
Une grille d'un nouveau (?) genre Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
Une grille d'un nouveau (?) genre Emptypar leclode Mer 17 Avr 2024 - 11:07

» on_key_down (résolu)
Une grille d'un nouveau (?) genre Emptypar leclode Mar 16 Avr 2024 - 11:01

» Sous-programme(résolu)
Une grille d'un nouveau (?) genre Emptypar jjn4 Jeu 4 Avr 2024 - 14:42

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Avril 2024
LunMarMerJeuVenSamDim
1234567
891011121314
15161718192021
22232425262728
2930     
CalendrierCalendrier
Le Deal du moment : -50%
-50% Baskets Nike Air Huarache Runner
Voir le deal
69.99 €

 

 Une grille d'un nouveau (?) genre

Aller en bas 
5 participants
AuteurMessage
JL35




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

Une grille d'un nouveau (?) genre Empty
MessageSujet: Une grille d'un nouveau (?) genre   Une grille d'un nouveau (?) genre EmptyMer 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
' ==============================================================================
Revenir en haut Aller en bas
Jean Claude

Jean Claude


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

Une grille d'un nouveau (?) genre Empty
MessageSujet: Re: Une grille d'un nouveau (?) genre   Une grille d'un nouveau (?) genre EmptyJeu 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+

Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Une grille d'un nouveau (?) genre Empty
MessageSujet: Re: Une grille d'un nouveau (?) genre   Une grille d'un nouveau (?) genre EmptyJeu 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)
Revenir en haut Aller en bas
JL35




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

Une grille d'un nouveau (?) genre Empty
MessageSujet: Re: Une grille d'un nouveau (?) genre   Une grille d'un nouveau (?) genre EmptyJeu 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.
Revenir en haut Aller en bas
Jean Claude

Jean Claude


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

Une grille d'un nouveau (?) genre Empty
MessageSujet: Re: Une grille d'un nouveau (?) genre   Une grille d'un nouveau (?) genre EmptyJeu 25 Fév 2016 - 18: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
Klaus

Klaus


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

Une grille d'un nouveau (?) genre Empty
MessageSujet: Re: Une grille d'un nouveau (?) genre   Une grille d'un nouveau (?) genre EmptyJeu 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 !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




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

Une grille d'un nouveau (?) genre Empty
MessageSujet: Re: Une grille d'un nouveau (?) genre   Une grille d'un nouveau (?) genre EmptyJeu 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.
Revenir en haut Aller en bas
papydall

papydall


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

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



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

Jean Claude


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

Une grille d'un nouveau (?) genre Empty
MessageSujet: Re: Une grille d'un nouveau (?) genre   Une grille d'un nouveau (?) genre EmptyJeu 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:
Une grille d'un nouveau (?) genre Image_10

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
Revenir en haut Aller en bas
Jean Claude

Jean Claude


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

Une grille d'un nouveau (?) genre Empty
MessageSujet: Re: Une grille d'un nouveau (?) genre   Une grille d'un nouveau (?) genre EmptyJeu 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 Very Happy
Revenir en haut Aller en bas
JL35




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

Une grille d'un nouveau (?) genre Empty
MessageSujet: Re: Une grille d'un nouveau (?) genre   Une grille d'un nouveau (?) genre EmptyJeu 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  Very Happy


Dernière édition par JL35 le Ven 26 Fév 2016 - 11:30, édité 1 fois
Revenir en haut Aller en bas
Jean Claude

Jean Claude


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

Une grille d'un nouveau (?) genre Empty
MessageSujet: Re: Une grille d'un nouveau (?) genre   Une grille d'un nouveau (?) genre EmptyVen 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+
Revenir en haut Aller en bas
JL35




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

Une grille d'un nouveau (?) genre Empty
MessageSujet: Re: Une grille d'un nouveau (?) genre   Une grille d'un nouveau (?) genre EmptyVen 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.
Revenir en haut Aller en bas
Jean Claude

Jean Claude


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

Une grille d'un nouveau (?) genre Empty
MessageSujet: Re: Une grille d'un nouveau (?) genre   Une grille d'un nouveau (?) genre EmptyVen 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+
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

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

ch'ti fillotes par ce que chits fillottes, c'est ambigu .... Very Happy
Revenir en haut Aller en bas
JL35




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

Une grille d'un nouveau (?) genre Empty
MessageSujet: Re: Une grille d'un nouveau (?) genre   Une grille d'un nouveau (?) genre EmptyVen 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 ?
Revenir en haut Aller en bas
Jean Claude

Jean Claude


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

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

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





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

Revenir en haut Aller en bas
 
Une grille d'un nouveau (?) genre
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Grille sur le bureau
» fermer une fenetre
» Regrouper les applications par genre (bureau Windows)
» Grille d'Edit
» Une grille sur l'écran

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: