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
» Planétarium virtuel.
par Pedro Alvarez Hier à 16:57

» Roues dentées
par jean_debord Hier à 10:40

» Attention arnaque !
par mindstorm Jeu 19 Juil 2018 - 19:18

» Qui fait quoi ?
par silverman Mer 18 Juil 2018 - 15:21

» ITEM_SELECT N,L pour synedit
par silverman Mer 18 Juil 2018 - 15:20

» Boussole
par jean_debord Mer 18 Juil 2018 - 11:06

» Roue à n faces
par Marc Dim 15 Juil 2018 - 22:16

» Exemple d'une nouvelle version d'un GRID
par Jean Claude Ven 13 Juil 2018 - 10:32

» Une simple question
par Oscaribout Sam 7 Juil 2018 - 23:20

» BUG sur l'objet TAB
par Jack Sam 7 Juil 2018 - 21:12

» Monopoly moderne
par jjn4 Sam 7 Juil 2018 - 15:06

» Récapitulatif ludothèque panoramic jjn4
par jjn4 Ven 6 Juil 2018 - 17:41

» Lignes ondulées
par JL35 Ven 6 Juil 2018 - 17:39

» bug off_activate 0 : sans d'effet
par silverman Ven 6 Juil 2018 - 13:02

» Position des objets d'un conteneur dans FBPano et Panoramic
par Navigateur Ven 6 Juil 2018 - 12:59

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Juillet 2018
LunMarMerJeuVenSamDim
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
CalendrierCalendrier

Partagez | 
 

 Bug sur TEXT_HEIGHT()

Aller en bas 
AuteurMessage
Oscaribout



Nombre de messages : 173
Date d'inscription : 29/12/2016

MessageSujet: Bug sur TEXT_HEIGHT()   Sam 3 Fév 2018 - 10:53

Bonjour,

J'ai constaté que la fonction TEXT_HEIGHT() ne retournait pas les bonnes dimensions.

Mais en dehors du bug, il restera un problème sur le positionement du corps du texte sans les jambages.

Code:
label fonte
dim font$ , h% , tx$ , f$ , a%  

picture 10:full_space 10 : 2d_target_is 10 : print_target_is 10
   font_size 10,20
dlist 1 : font_names_load 1 : font_names_load 1
button 2 : caption 2,"Teste"  : on_click 2,fonte
end
' --------------------------
fonte:  
   off_click 2
   tx$ =  "TpzZiLfjJ"  :   font$ = "Consolas"
   for a% = 1 to count(1)
      2d_clear                
      h% = text_height(tx$,10)          
      ' écrire au dessus de 100, l'écriture se fait depuis le haut de la fonte
      font_name 10,font$   :   print_locate 10,200-h%
      print tx$          
      ' --- 2ème ---  
      font_name 10,font$      
      font$ = item_read$(1,a%)
      h% = text_height(tx$,10)
      print_locate 200,200-h% -1
      print tx$
      
      2d_pen_color 255,0,0
      2d_line 0,200,width(0),200
      2d_line 0,200-h% , width(10),200-h%
  
      2d_pen_color 0,255,0
      2d_line 0,200-5,width(0),200-6
      if scancode = 27 then terminate
      repeat : pause 100 : until scancode = 32 or scancode = 27
   next a%
return
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Oscaribout



Nombre de messages : 173
Date d'inscription : 29/12/2016

MessageSujet: Re: Bug sur TEXT_HEIGHT()   Sam 3 Fév 2018 - 13:18

Je remets ici un code plus complet, en faisant une différence entre l'écriture en rapport au haut de caractère, et en bas du caractère. On voit que dans le corps hors jambage, place parfois selon le haut et pour d'autre depuis le bas.

Je me demande si ce sujet n'aurait pas été mieux dans aide ou bavardage, mmais il y a pour moi un bug.

Je vais revoir ceci en faisant une sub, qui recherche les pixels qui trouvent la hauteur des lettres sans jambage.

Code:
dim font$ , h% , tx$ , f$ , a% 

picture 10:full_space 10 : 2d_target_is 10 : print_target_is 10
  font_size 10,20
dlist 1 : font_names_load 1 : font_names_load 1
fonte()
' --------------------------
sub fonte() 
 
  tx$ =  "TpzZiLfjJ"  :  font$ = "Consolas"
  for a% = 1 to count(1)
      2d_clear                                     
      ' écrire au dessus de 100, l'écriture se fait depuis le haut de la fonte
      font_name 10,"Consolas"
      print_locate 20,80 : font_size 10,12 : print font$+string$(200," ")             
      ' là on est encore en mémoire
      font_name 10,font$ : font_size 10,20
      h% = text_height(tx$,10) 
     
      ' haut à gauche -----
      print_locate 10,200-h%    : print tx$
      ' bas  à gauche -----copie mais en listant depuis le bas de la fonte 
      print_locate 10,300        : print tx$ 
      ' --- 2ème ---                 
     
      font_size 10,12 :font_name 10,"Consolas" 
      font$ = item_read$(1,a%)  :  print_locate 300,80 : print font$+string$(200," ") 
           
      font_name 10,font$ : font_size 10,20    :  h% = text_height(tx$,10)
      print_locate 300,200-h%  :  print tx$
      print_locate 300,300    :  print tx$     
                                         
      2d_pen_color 255,0,0       
      2d_line 0,200,width(0),200
      2d_line 0,200-h% , width(10),200-h%
     
      2d_line 0,300,width(0),300
      2d_line 0,300+h%,width(0),300+h%
 
      2d_pen_color 0,255,0
      2d_line 0,200-5,width(0),200-6
      2d_line 0,300+h%-5,width(0),300+h%-5
      if scancode = 27 then terminate
      repeat : pause 100 : until scancode = 32 or scancode = 27
  next a%
end_sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

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

MessageSujet: Re: Bug sur TEXT_HEIGHT()   Sam 3 Fév 2018 - 13:35

Oscaribout a écrit:
J'ai constaté que la fonction TEXT_HEIGHT() ne retournait pas les bonnes dimensions.

J'ai essayé tes 2 codes, mais c'est trop compliqué.
Vu ce que tu dis (dans la citation), je pense qu'un code plus simple pourrait dire si oui ou non il y a un problème.


Citation :
Mais en dehors du bug, il restera un problème sur le positionement du corps du texte sans les jambages.

Je pense qu'il faut d'abord voir s'il y a réellement un Bug avec TEXT_HEIGHT()

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Oscaribout



Nombre de messages : 173
Date d'inscription : 29/12/2016

MessageSujet: Re: Bug sur TEXT_HEIGHT()   Sam 3 Fév 2018 - 14:30

Le code ne fait que comparer dans la liste des polices la police précédente par rapport à la fonte actuellement lue, et selon deux méthodes.

Il est difficile de faire plus simple, et comme toi, j'ai pas trop le temps. voici une simple image pour voir qu'il y a des problèmes de correspondance.




Cela dit, je vois que text_height pour un picture ne peux pas être une référence. En faisant le parallèle par rapport au html, je ne sait pas comment ils procèdent. On peut aligner les lettres de corps différents, de styles différents et de "size" différent sur la même ligne. Mais il me semble que Html a une liste limitée de polices, et qu'en dehors de cette liste, ils adaptent la police la plus proche.

Après avoir publié le code au dessus, je me suis rendu compte que c'est pas la hauteur qu'il faut tenir compte. Avec des fontes différentes des grosseurs différentes, on est obligé de faire ses propres calculs. On a pas de commande directe pour cela. Avec print_locate x,y et 'y' constant, rien n'est aligné. Donc la résolution de text_height() n'apportera rien. Il y a des polices qui s'écrivent (en testant le programme) bien en dehors du cadre du positionnement et de la hauteur.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jack
Admin
avatar

Nombre de messages : 1868
Date d'inscription : 28/05/2007

MessageSujet: Re: Bug sur TEXT_HEIGHT()   Sam 3 Fév 2018 - 14:40

Il y a déjà un bug qui a été signalé pour TEXT_HEIGHT s'appliquant à un LIST:
http://panoramic.free-boards.net/t5495-2-en-analyse-text_height-et-text_width-sur-un-list
je vais regarder s'il y a aussi un problème sur PICTURE.

_________________
username : panoramic@jack-panoramic password : panoramic123
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://panoramic.free-boards.net
JL35



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

MessageSujet: Re: Bug sur TEXT_HEIGHT()   Sam 3 Fév 2018 - 15:34

@Oscaribout,
Sauf erreur, il me semble que ton problème serait d'aligner des polices de tailles différentes ou de types différents (la base des caractères) sur une même ligne.
Or TEXT_HEIGHT donne la hauteur totale des caractères, ce qui est normal, mais rien ne permet de savoir où se trouve la ligne de base des caractères (base des majuscules et des caractères sans jambage), qui est quelque part à l'intérieur de cette valeur.
Pour ça il faudrait une autre fonction, mais ça me parait bien compliqué à obtenir...

Sur le PICTURE il n'y a a priori aucun problème de TEXT_HEIGHT (pour la hauteur totale des caractères).

Un petit exemple (adapter f$, le fichier exemple quelconque à afficher):
Code:
LABEL Police,Pol1,Affiche
DIM x%,y%,f$,a$,nl%
f$ = "C:\TEXTES\Fetes.txt": ' <====== à adapter ===========
HEIGHT 0,SCREEN_Y-30: WIDTH 0,360: BORDER_SMALL 0: FONT_BOLD 0: COLOR 0,180,255,255
EDIT 1: TOP 1,1: WIDTH 1,150: TEXT 1,"Arial": ON_CLICK 1,Police
SPIN 2: LEFT 2,WIDTH(1): WIDTH 2,50: MIN 2,6: MAX 2,255: POSITION 2,12
BUTTON 3: LEFT 3,LEFT(2)+WIDTH(2)+5: WIDTH 3,40: CAPTION 3,"OK": ON_CLICK 3,Affiche
ALPHA 5: TOP 5,0: LEFT 5,LEFT(3)+45: FONT_SIZE 5,14
  COLOR 5,255,255,0: FONT_COLOR 5,164,0,0
PICTURE 15: TOP 15,25: WIDTH 15,25: HEIGHT 15,HEIGHT(0)-60: COLOR 15,255,255,128
PICTURE 16: TOP 16,TOP(15): LEFT 16,WIDTH(15): HEIGHT 16,HEIGHT(15): WIDTH 16,WIDTH(0)-50
2D_TARGET_IS 15
FOR y% = 0 TO HEIGHT(15) STEP 10
    2D_LINE 15,y%,25,y%
NEXT y%
FOR y% = 0 TO HEIGHT(15) STEP 100
    2D_LINE 5,y%,25,y%
NEXT y%
LIST 20: HIDE 20: TOP 20,TOP(1)+25: WIDTH 20,200: HEIGHT 20,HEIGHT(15)
FONT_NAMES_LOAD 20: ON_CLICK 20,Pol1
GOSUB Affiche
END
' ----------------------
Police:
  SHOW 20
RETURN
Pol1:
  TEXT 1,ITEM_INDEX$(20)
  HIDE 20
  GOSUB Affiche
RETURN
' -----------------------
Affiche:
2D_TARGET_IS 16: CLS
PRINT_TARGET_IS 16: FONT_NAME 16,TEXT$(1): FONT_SIZE 16,POSITION(2)
CAPTION 5," HL = "+STR$(TEXT_HEIGHT("Abc_ïxyz",16))+" "
y% = 0: nl% = 0
FILE_OPEN_READ 1,f$
    WHILE FILE_EOF(1) = 0
       FILE_READLN 1,a$
       IF TRIM$(a$) <> ""
           nl% = nl%+1
           PRINT_LOCATE 5,y%: PRINT STR$(nl%)+"_ "+a$
           y% = y%+TEXT_HEIGHT(a$,16)
       END_IF
    END_WHILE
FILE_CLOSE 1
RETURN
' ------------------------
Si on multiplie le numéro de ligne par la hauteur de ligne on obtient bien la bonne valeur dans tous les cas.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Oscaribout



Nombre de messages : 173
Date d'inscription : 29/12/2016

MessageSujet: Re: Bug sur TEXT_HEIGHT()   Sam 3 Fév 2018 - 16:52

Effectivement, j'avais aussi constaté un bug sur LIST.

@JL35
Tu as tout à fait raison. Je me suis rappelé après coup que dans un vieux programme il y a quelques années qu'il avait fallu que je fasse une liste des réglages pour adapter l'alignement des fontes.
Je ne me souviens plus où est ce programme, mais j'avais procédé ce cette façon: (pas le temps de refaire l'essai)
j'avais testé sur la lettre "E" pour testé pixel par pixel le début de la lettre (E étant plus haut que j par exemple). Pour le Haut j'avais pris "T, etc...

Je me sauve!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Bug sur TEXT_HEIGHT()   Sam 3 Fév 2018 - 17:37

Malheureusement, expérience faite, il n'y a pas un rapport constant entre la hauteur totale d'une police (Text_Height) et la position de la base par rapport à cette hauteur, ça varie en fonction des polices utilisées...
Il me semble difficile d'aligner des textes avec des polices différentes et/ou des tailles différentes sur une même ligne...
On peut le faire au pif pour un cas précis, mais ça paraît compliqué, voire impossible, d'automatiser la chose par programme.

Pour une police donnée il doit y avoir un rapport constant entre sa hauteur totale et la position de la base des caractères, quelle que soit sa taille, mais il faut le mesurer au coup par coup.

Tiens Oscaribout, je te mets un petit programme dans 'Vos sources...' qui calcule la hauteur de la ligne de base pour une police donnée d'une taille donnée, d'où le facteur à appliquer au Text_Height
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Oscaribout



Nombre de messages : 173
Date d'inscription : 29/12/2016

MessageSujet: Re: Bug sur TEXT_HEIGHT()   Sam 3 Fév 2018 - 20:06

JL35 a écrit:
Pour une police donnée il doit y avoir un rapport constant entre sa hauteur totale et la position de la base des caractères, quelle que soit sa taille, mais il faut le mesurer au coup par coup.

J'ai retrouvé le programme que j'avais fait à l'époque (2015)
Je ne le mets pas en entier, déjà ce serait hors propos, mais à chaque fois que je le lance, Windows me le ferme sans raison aussitôt! pale  Là Windows devient de plus en plus inquiétant. Mais j'ai extrait une partie du code qui met en tableau les dimensions des fontes demandées. Pour l'alignement selon les données, cela fonctionnait parfaitement. (Sauf des fois en largeur de ce que je m'en souvient), avec certaines fontes, il y avait un petit problème. De la sub j'ai pas tout mis, il aurait fallu que j'en rajoute de trop.

Code:
dim choix_item_liste$(10)
dim fonte%(200,255) , font% , police$(10) : font%=1

police$(1)="Arial|15|g|i|s|b}0,0,0|255,255,255"
picture 2 : full_space 2   : color 2,197,242,237 : 2d_target_is 2:print_target_is 2
image 4
list 10 : left 10,100
mettre_attribut(police$(1))
format_fonte(1)

end
' ============================================================================
sub format_fonte(font%)

   2d_fill_on : 2d_fill_color 255,255,255 : 2d_pen_color 255,255,255
   font_underline_off 2 : ' sinon si souligné, cela remonte le caractère.
   2d_rectangle 0,0,600,100  :  2d_image_copy 4,0,0,100,100 : font_color 2,0,0,0

   dim_local a%,y,d%,c%,larg% , b%
   ' ....... recherche du haut ....... normalement c'est 1
   2d_image_paste 4, 0,0 :2d_fill_color 255,253,255 : 2d_pen_color 255,253,255 :  print_locate 0,0 :print "   "
   ' ...........................................
   for a% = 1 to 80 : c% = color_pixel_green(2,10,a%) : if c% <> 253 then y=a%:exit_for
   next a% : fonte%(font%,3)=y  :' on a le bas du caractère

   ' ...........................................
   ' on recherche la largeur du caractère 151, qui a la largeur maxi
   2d_image_paste 4,0,0     :  print_locate 0,0 : print string$(1,chr$(151))
   for d% = 60 to 1 step -1 :  c% = color_pixel_green(2,d%,10) : if c%=253 then exit_for
   next d%  : larg% = d%    :  fonte%(font%,2)=larg%

   ' ...........................................
   for a% = 32 to 255       :' caractère par caractère
      2d_image_paste 4,0,0  : print_locate 0,0 : print string$(1,chr$(a%)) :' pause 1
      for d% = larg% to 1 step -1 : c% = color_pixel_green(2,d%,10) : if c%=253 then exit_for
      next d%  :   fonte%(font%,a%) = d% +1
   next a%

   ' ...........................................
   2d_image_paste 4,0,0
   print_locate 0,0:print "Lg" :' L c'est sur cette ligne sans jambage qu'on aligne les caractères
   for a% = y to 1 step -1  : c%= color_pixel_green(2,5,a%) : if c%=0 then exit_for    
   next a%   :   fonte%(font%,1)= a%   :   fonte%(font%,1)= a%  
    
   2d_pen_color 0,255,0 : 2d_line 0,y,100,y :' pour voir si c'est correct
   message "hauteur retenu:" + str$(a%)  
  
   rem fonte%(font%,"1")  "1" est le nb retenu pour la hauteur du jambage inférieur.
   rem il y a d'autre relevés mais hors sujet ici
end_sub
' ==========================================================

sub mettre_attribut(a$)
   dim_local v,b$,c% , key$
   c%=1
   repeat
      v = instr(a$,"|")
      if v > 0
         select c%
            case 1 : font_name 2,left$(a$,v-1)
            case 2 : font_size 2,val(left$(a$,v-1))
            case 3 : b$=left$(a$,v-1):if b$="G" then font_bold 2 : else : font_bold_off 2
            case 4 : b$=left$(a$,v-1):if b$="I" then font_italic 2 : else : font_italic_off 2
            case 5 : b$=left$(a$,v-1):if b$="S" then font_underline 2 : else : font_underline_off 2
            case 6 : b$=left$(a$,v-1):if b$="B" then font_strike 2 : else : font_strike_off 2
         end_select
         a$ = right_pos$(a$,v+1)
      end_if
      c%=c%+1
   until c% = 7
end_sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Bug sur TEXT_HEIGHT()   

Revenir en haut Aller en bas
 
Bug sur TEXT_HEIGHT()
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Un bug dans PANORAMIC?-
Sauter vers: