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
» Logiciel de planétarium.
Formattage et justification dans un MEMO Emptypar Pedro Aujourd'hui à 8:08

» Un autre pense-bête...
Formattage et justification dans un MEMO Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Formattage et justification dans un MEMO Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Formattage et justification dans un MEMO Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Formattage et justification dans un MEMO Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Formattage et justification dans un MEMO Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Formattage et justification dans un MEMO Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Formattage et justification dans un MEMO Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Formattage et justification dans un MEMO Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Formattage et justification dans un MEMO Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Formattage et justification dans un MEMO Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Formattage et justification dans un MEMO Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Formattage et justification dans un MEMO Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Formattage et justification dans un MEMO Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Formattage et justification dans un MEMO Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment :
LEGO Icons 10331 – Le martin-pêcheur
Voir le deal
35 €

 

 Formattage et justification dans un MEMO

Aller en bas 
3 participants
AuteurMessage
Klaus

Klaus


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

Formattage et justification dans un MEMO Empty
MessageSujet: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyMar 8 Mai 2012 - 21:25

Comment faire des colonnes dans un mémo ?
Comment justifier une valeur numérique (ou texte, d'ailleurs) à droite ?
Comment centrer un texte ?
Et tout ça dans un mémo ?

Sur ces questions, j'avais toujours trouvé des solutions spécifiques, différentes pour chaque problème. Mais maintenant, je m'y suis mis et j'ai fait des routines générales. Fonctions réalisées:

FLOAT_TO_STRING - convertit une valeur flottante en chaîne de caractères, avec arrondi sur un nombre de décimales choisis, et un nombre de caractères total prédéfini

TEXT_LEFT_JUSTIFY - justifie un texte à gauche, sur un nombre de caractères prédéfini

TEXT_RIGHT_JUSTIFY - justifie un texte à droite, sur un nombre de caractères prédéfinis

TEXT_CENTER_JUSTIFY - centre un texte sur un nombre de caractères prédéfinis

Pour toutes ces routines, si le résultat ne tient pas dans le nombre de caractères prédéfini, la sortie est remplacé par une série de "*" pour remplir la zone prédéfinie

Pour illustrer les possibilités, j'ai fait un programme qui affiche une petite facture dans un mémo, avec 5 colonnes et des barres de séparation.

Code:
' formattage_et_justification.bas
'
' A l'aide d'une petite facture montrée dans un memo, ce programme
' fait la démonstration de l'usage des sousprogrammes de formattage
' de valeurs et textes: représentation d'une valeur décimale, ainsi
' que la justification gauche, droite et centrée, en fonction de la
' largeur d'un champ. On peut ainsi simuler des colonnes dans un memo.
'
'
'

' définitions pour les routines de justification
label float_to_string, text_right_justify
label text_left_justify, text_center_justify
dim s$, v, dec%, larg%, p%
' fin des définitions pour les routines de justification

label facture_vierge, remplir_facture

dim tab$ : tab$ = chr$(9)

dim ncol%, col%(20), tit$(20), t$
dim pu, qte, tot, totgen, wid%

' *** description du tableau avec ses colonnes et son entête
data 5,10,"Date",40,"Libellé",12,"Prix U.",4,"Qté",12,"Total"
' *** données pour 3 lignes de facture
data "11/3/2011","Pommes de Terre 1 kg",1.17,3
data "17/11/2011","Saumon fumé 5 Tr",12.57,3
data "3/12/2011","Champagne Mercier",33.89,27
' *** marqueur de fin de facture
data ""

width 0,900 : height 0,600

memo 1 : top 1,10 : left 1,10
  width 1,800 : height 1,400
  font_name 1,"Fixedsys"

gosub facture_vierge
gosub remplir_facture
end



' *** lire la configuration du tableau et afficher l'entête
facture_vierge:
  clear 1
  t$ = "| "
  wid% = 0
  totgen = 0
  read ncol%
  for p%=1 to ncol%
    read col%(p%)
    read tit$(p%)
    s$ = tit$(p%)
    larg% = col%(p%)
    wid% = wid% + larg%
    gosub text_left_justify
    t$ = t$ + s$ + " | "
  next p%
  item_add 1,t$
  wid% = wid% + (ncol%-1)*3 + 2
  item_add 1,"|"+string$(wid%,"=")+"|"
  item_insert 1,1,"|"+string$(wid%,"=")+"|"
  s$ = "FACTURE"
  larg% = wid%
  gosub text_center_justify
  item_insert 1,1,s$
  s$ = "du "+date$
  larg% = wid%
  gosub text_right_justify
  item_insert 1,2,s$
  item_insert 1,3,""
  return
 
' *** lire les données d'une ligne et afficher la ligne
remplir_facture:
  read s$
  while s$<>""
  ' *** date
    t$ = "| "
    larg% = col%(1)
    gosub text_right_justify
    t$ = t$ + s$ + " | "
  ' *** libellé
    read s$
    larg% = col% (2)
    gosub text_left_justify
    t$ = t$ + s$ + " | "
  ' *** prix unitaire
    read v
    pu = v
    larg% = col%(3)
    dec% = 2
    gosub float_to_string
    gosub text_right_justify
    t$ = t$ + s$ + " | "
  ' *** quantité
    read v
    qte = v
    larg% = col%(4)
    dec% = 0
    gosub float_to_string
    gosub text_right_justify
    t$ = t$ + s$ + " | "
  ' *** calculer le total de la ligne
    tot = pu * qte
    totgen = totgen + tot
    v = tot
    larg% = col%(5)
    dec% = 2
    gosub float_to_string
    gosub text_right_justify
    t$ = t$ + s$ + " | "
    item_add 1,t$
  ' *** lire la date de la ligne suivante
    read s$
  end_while
  ' *** fin de tableau, tirer n trait
  item_add 1,"|"+string$(wid%,"=")+"|"
  ' *** faire la ligne du total général
  t$ = "| "
  t$ = t$ + string$(col%(1)," ") + string$(3," ")
  s$ = "Total à payer"
  larg% = col%(2)+3+col%(3)+3+col%(4)
  gosub text_right_justify
  t$ = t$ + s$ + " | "
  v = totgen
  larg% = col%(5)
  dec% = 2
  gosub float_to_string
  gosub text_right_justify
  t$ = t$ + s$ + " |"
  item_add 1,t$
  ' *** tirer le trait final
  item_add 1,"|"+string$(wid%,"=")+"|"
  return


' ***************** routines de conversion et justification *********

' *** convertir v en string avec dec% décimales
'    la valeur v est arrondie sur dec% décimales
float_to_string:
  if dec%<0 then dec% = 0
  s$ = str$(int(v*power(10,dec%) + 1/2)/power(10,dec%))
  if dec%=0 then return
  p% = instr(s$,".")
  if p%=0
    s$ = s$ + "." + string$(dec%,"0")
    p% = instr(s$,".")
  end_if
  if len(s$)-p%<dec% then s$ = s$ + string$(dec%-len(s$)+p%,"0")
  s$ = left$(s$,p%-1)+","+mid$(s$,p%+1,len(s$))
  return

' *** justifier v à droite avec dec% décimales, sur larg% caractères
'    la valeur v est arrondie sur dec% décimales
'    si le résultat ne tient pas dans larg% caractères: retourner des "*"
'    le résltat est retourné dans s$
text_right_justify:
  s$ = trim$(s$)
  if len(s$)<larg% then s$ = string$(larg%-len(s$)," ")+s$
  if len(s$)>larg% then s$ = string$(larg%,"*")
  return

' **** justifier s$ à gauche sur larg% caractères
'    si le résultat ne tient pas dans larg% caractères: retourner des "*"
'    le résltat est retourné dans s$
text_left_justify:
  s$ = trim$(s$)
  if len(s$)>larg% then s$ = string$(larg%,"*")
  if len(s$)<larg% then s$ = s$ + string$(larg%-len(s$)," ")
  return
 
' *** justifier s$ en centrant sur larg% caractères
'    si le résultat ne tient pas dans larg% caractères: retourner des "*"
'    le résltat est retourné dans s$
text_center_justify:
  s$ = trim$(s$)
  if len(s$)>larg% then s$ = string$(larg%,"*")
  while len(s$)<larg%
    s$ = " " + s$
    if len(s$)<larg% then s$ = s$ + " "
  end_while
  return

Un autre exemple: l'affichage de la liste des polices de caractères installées sur la machine. Cette liste s'affiche en deux mémos: le premier contient les polices à espacement fixe, le second les polices proportionnelles. Par défaut, tout est affiché dans la police "Courier". En bas de la fenêtre, on peut choisir n'importe quelle police par son numéro (qui est justifié à droite dans le memo !) et elle sera appliquée aux deux mémos.
Code:
' polices_fixes.bas
'
' Ce programme montre l'usage des routines de justification en affichant
' une liste des polices fixes et proportionnelles. L'affichage est fait
' avec la police "Courrier" qui est une police fixe. On voit l'effet par
' la justification à droite du nméro d'ordre de la police. On peut essayer
' les différentes polices fixes en les choisissant par leur numéro.

' définitions pour les routines de justification
label float_to_string, text_right_justify
label text_left_justify, text_center_justify
dim s$, v, dec%, larg%, p%
' fin des définitions pour les routines de justification

label essayerfixe, essayerprop

dim i%, f$, nf%, np%, n_courier%
dim iii$ : iii$ = string$(5," ")
dim www$ : www$ = "wwwww"

height 0,730 : width 0,900

dlist 1
alpha 2 : top 2,20 : left 2,10
  caption 2,"Polices fixes:"
memo 3 : top 3,40 : left 3,10 : font_name 3,"Courier"
  width 3,400 : height 3,500
alpha 4 : hide 4
alpha 5 : top 5,20 : left 5,420
  caption 5,"Polices proportionnelles:"
memo 6 : top 6,40 : left 6,420 : font_name 6,"Courier"
  width 6,400 : height 6,500
 
container 10 : top 10,560 : left 10,10
  caption 10,"Essai d'une police fixe"
  width 10,400 : height 10,80
edit 11 : parent 11,10 : left 11,10
  top 11,20 : width 11,40
button 12 : parent 12,10 : left 12,60 : top 12,20
  caption 12,"Essayer" : on_click 12,essayerfixe
alpha 15 : parent 15,10 : top 15,50 : left 15,10
  caption 15,"Courier"

container 20 : top 20,560 : left 20,420
  caption 20,"Essai d'une police proportionnelle"
  width 20,400 : height 20,80
edit 21 : parent 21,20 : left 21,10
  top 21,20 : width 21,40
button 22 : parent 22,20 : left 22,60 : top 22,20
  caption 22,"Essayer" : on_click 22,essayerprop
 
alpha 25 : parent 25,20 : top 25,50 : left 25,10
  caption 25,"Courier"

font_names_load 1

larg% = 4
dec% = 0
for i%=1 to count(1)
  f$ = item_read$(1,i%)
  font_name 4,f$
  if text_width(iii$,4)=text_width(www$,4)
    nf% = nf% + 1
    if lower$(f$)="courier" then n_courier% = nf%
    v = nf%
    gosub float_to_string
    gosub text_right_justify
    item_add 3,s$+": "+f$
  else
    np% = np% + 1
    v = np%
    gosub float_to_string
    gosub text_right_justify
    item_add 6,s$+": "+f$
  end_if
next i%

text 11,str$(n_courier%)

end

essayerfixe:
  s$ = text$(11)
  if numeric(s$)=0
    message "Numéro de police invalide"
    return
  end_if
  i% = val(s$)
  if (i%<1) or (i%>count(3))
    message "Numéro de police invalide"
    return
  end_if
  f$ = item_read$(3,i%)
  f$ = mid$(f$,7,len(f$))
  font_name 3,f$
  font_name 6,f$
  caption 15,f$
  caption 25,f$
  return
 
essayerprop:
  s$ = text$(21)
  if numeric(s$)=0
    message "Numéro de police invalide"
    return
  end_if
  i% = val(s$)
  if (i%<1) or (i%>count(6))
    message "Numéro de police invalide"
    return
  end_if
  f$ = item_read$(6,i%)
  f$ = mid$(f$,7,len(f$))
  font_name 3,f$
  font_name 6,f$
  caption 15,f$
  caption 25,f$
  return


' ***************** routines de conversion et justification *********

' *** convertir v en string avec dec% décimales
'    la valeur v est arrondie sur dec% décimales
float_to_string:
  if dec%<0 then dec% = 0
  s$ = str$(int(v*power(10,dec%) + 1/2)/power(10,dec%))
  if dec%=0 then return
  p% = instr(s$,".")
  if p%=0
    s$ = s$ + "." + string$(dec%,"0")
    p% = instr(s$,".")
  end_if
  if len(s$)-p%<dec% then s$ = s$ + string$(dec%-len(s$)+p%,"0")
  s$ = left$(s$,p%-1)+","+mid$(s$,p%+1,len(s$))
  return

' *** justifier v à droite avec dec% décimales, sur larg% caractères
'    la valeur v est arrondie sur dec% décimales
'    si le résultat ne tient pas dans larg% caractères: retourner des "*"
'    le résltat est retourné dans s$
text_right_justify:
  s$ = trim$(s$)
  if len(s$)<larg% then s$ = string$(larg%-len(s$)," ")+s$
  if len(s$)>larg% then s$ = string$(larg%,"*")
  return

' **** justifier s$ à gauche sur larg% caractères
'    si le résultat ne tient pas dans larg% caractères: retourner des "*"
'    le résltat est retourné dans s$
text_left_justify:
  s$ = trim$(s$)
  if len(s$)>larg% then s$ = string$(larg%,"*")
  if len(s$)<larg% then s$ = s$ + string$(larg%-len(s$)," ")
  return

' *** justifier s$ en centrant sur larg% caractères
'    si le résultat ne tient pas dans larg% caractères: retourner des "*"
'    le résltat est retourné dans s$
text_center_justify:
  s$ = trim$(s$)
  if len(s$)>larg% then s$ = string$(larg%,"*")
  while len(s$)<larg%
    s$ = " " + s$
    if len(s$)<larg% then s$ = s$ + " "
  end_while
  return


Dernière édition par Klaus le Mer 9 Mai 2012 - 23:28, édité 2 fois
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


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

Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyMar 8 Mai 2012 - 22:51

Salut Klaus.
J’ai testé ton programme: formattage_et_justification.bas
C’est clair, et bien fait.
J’ai qu’en même relevé une petite correction à la ligne 126 ; il faut ajouter +1 à la variable larg% pour que l’affichage de la ligne Total à payer ne soit pas décalé.

Par contre, le programme : polices_fixes.bas
En appuyant sur le bouton Essayer de Essai d’une police fixe, j’obtiens toujours le message d’erreur « Numéro de police invalide »

J'ai ajouté
item_add 3,s$+": "+f$ à la ligne 74 à la suite de item_add 6,s$+": "+f$

et l'execution est devenue correct.

A+


Dernière édition par papydall le Mar 8 Mai 2012 - 23:28, édité 1 fois
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jicehel

Jicehel


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

Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyMar 8 Mai 2012 - 23:05

J'ai testé aussi, on s'est croisé avec Papydall et j'avais commencé aussi par jouté 1 à la ligne 122
Code:
t$ = t$ + string$(col%(1)+3," ")
mais après, je me suis dis que ce n'était pas trop logique (excuse moi Klaus ...)
En fait, cette ligne ne sert à rien dans le principe, alors j'ai juste mis cette ligne en commentaire et j'ai ajusté la largeur de la "cellule" (Il y a 2 colonnes pour lesquelles on n'affichera pas le séparateur, donc 2*3 caractères, la formule pour la largeur du texte est donc:
Code:
 larg% = col%(1)+col%(2)+col%(3)+3+col%(4)+6

Résumé du code
Code:
  t$ = "| "
  s$ = "Total à payer"
  larg% = col%(1)+col%(2)+col%(3)+3+col%(4)+6
  gosub text_right_justify

Bon, je vais tester le deuxième exemple Wink
Revenir en haut Aller en bas
Jicehel

Jicehel


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

Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyMar 8 Mai 2012 - 23:22

Le Deuxième exemple marche bien, par contre je suis surpris 0 Polices à taille fixe et 309 Polices proportionnelles chez moi, quand on tape le numéro, ça change bien la police dans la liste.
Si je mets un nombre à 0 ou supérieur à 310, j'ai la fenêtre propre qui me dit "Numéro de police invalide", ce qui est nickel
Revenir en haut Aller en bas
Klaus

Klaus


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

Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyMar 8 Mai 2012 - 23:41

Je ne vois pas pourquoi il faut modifier le calcul des largeurs, mais si ça marche comme ça chez toi...
Voici le résultat de la "facture" chez moi, avec le programme trel que je l'ai posté:
[img]Formattage et justification dans un MEMO Ajuste10[/img]
Pour moi, ça semble bon.

Et, toujours tel que je l'ai posté, voici l'affichage des polices chez moi:
[img]Formattage et justification dans un MEMO Police10[/img]
Si tu ajoutes un "item_add 3," après le "item_add 6,", tu copies en fait les noms des polices proportionnelles dans la liste des polices fixes, ce qui n'est pas le but. N'aurais-tu pas la police "Courier" ? Ni "Fixedsys" ? Regarde dans ma copie d'écran, la liste des polices fixes. Je les détecte en comparant la largeur du texte "iiiii" avec celle du texte "wwwww". En cas d'égalité, c'est une police fixe; sinon, c'est une police proportionnelle. J'ai essayé aussi sur Vista - le résultat est similaire.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


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

Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyMer 9 Mai 2012 - 0:09

@Klaus
Chez moi, la ligne d’affichage du total est décalée d’un cran à gauche. C’est pourquoi j’ai ajouté +1 à la variable larg%
Pour le 2eme programme la liste des polices fixes ne contient aucun nom de police, tandis que celle des polices proportionnelles en contient 215
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


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

Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyMer 9 Mai 2012 - 0:28

@Papydall:
Alors là, mystère ... Tu vois les copies d"écran - j'ai du mal à voir où serait l'anomalie. Est-ce que tu utilises la version instantanée 0.9.23i5 du 13/2/2012 ?

Il est évident que, pour que mes routines de justification marchent, il faut utiliser une police à espacement fixe, telle que Courier ou FixedSys. Cela ne marche évidemment pas avec une police proportionnelle. Et j'ai du mal à croire que sur ton système, aucune police ne soit à espacement fixe. As-tu ces deux polices que j'ai citée, ou quelques-unes des polices dans le mémo de gauche sur ma copie d'écran ? Chez toi, quand le programme démarre, est-ce que dans le mémo de droite, les numéros des polices sont bien cadrés et alignés à droite, acex les ":" bien verticalement les uns au-dessus des autres ? Si oui, tu as la police Courier, elle fait son effet et tu dois la trouver dans le mémo de gauche. C'est très curieux.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


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

Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyMer 9 Mai 2012 - 0:32

Tout pareil que Papydall
Décalage à gauche de 1 au niveau de la ligne Total à payer. Mais en plus au niveau de la logique, je trouve que c'est aussi bien de considérer la case comme étant une seule case alignée à droite ... mais bon, c'est mon point de vue
Pour le deuxième, je crois qu'il manque un espace dans la déclaration de iii$=" ". Chez moi, j'obtiens 50 Police fixes en ajoutant un espace (dont la Fixedsys)
Revenir en haut Aller en bas
papydall

papydall


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

Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyMer 9 Mai 2012 - 0:41

Ça y ait !
J’ai compris pourquoi je n’ai pas la police fixe .
En effet la ligne 18 dans ton source est
Code:

dim iii$ : iii$ = "    "
Je l’ai corrigée comme ceci.
Code:

dim iii$ : iii$ = "iiiii"

j’obtient 27 comme nombre de polices fixes et le fonctionnement du programme est devenu normal.

Oui j'utilise la version 0.9.23i5 du 13/2/2012
A+


Dernière édition par papydall le Mer 9 Mai 2012 - 0:44, édité 1 fois
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


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

Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyMer 9 Mai 2012 - 0:42

pour les polices, la ligne 18:
Code:
dim iii$ : iii$ = "    "
doit contenit 5 espaces entre guillements.

Pour la facture, la ligne 124:
Code:
  t$ = t$ + string$(col%(1)," ") + "  "
doit contenir 3 espaces entre guillemets.

Les espaces sont-ils bien transmis ? En éditant mon post avec les sources, je compte bien le nombre d'espaces correct.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyMer 9 Mai 2012 - 0:45

Oui, avec 5 lettres "i", ça doit marcher aussi. Le but était de comparer deux caractères manifestement différents en largeur, pour identifier les polices à espacement fixe. Mais je reste perplexe pour l'utilisation de l'espace qui marche bien chez moi: as-tu vraiment 5 espaces dans iii$ ?
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


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

Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyMer 9 Mai 2012 - 1:00

C’est vrai ! C’est une question d’espaces.
J’ai corrigé les espaces et tout entre en ordre.
Par contre, pour le 2eme programme la ligne 18 contient seulement 4 espaces. En les complétant à 5, j’obtiens 26 comme nombre de polices fixes.
J’ai remplacé les 5 espaces par 5i, j’obtiens 27 comme nombre de polices fixes.

Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jicehel

Jicehel


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

Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyMer 9 Mai 2012 - 1:02

Dans le source que j'ai copié, si j'ai bien compté il y en avait 4, c'est pour ça que j'en ai rajouté un.
L'idée de Papydall de mettre des i permet de voir le nombre de caractères (on voit tout de suite comme ça qu'il en manque un, ce n'est pas si évident avec les espaces Wink) et l'idée de mettre un i est bien puisque c'est une lettre très étroite, donc normalement sa longueur est très différente de celle du W sur une police non fixe
Revenir en haut Aller en bas
Klaus

Klaus


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

Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyMer 9 Mai 2012 - 1:07

C'est bien ce que je redoutais - en postant le source, le nombre d'espaces n'est pas toujours respecté. C'était bien vu de remplacer les espaces par des "i". C'est certainement le même problème avec la ligne du total général de la facture.

Bon, dodo maintenant...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyMer 9 Mai 2012 - 9:13

J'ai remplacé ces constantes string avec des espaces par des string$(n," "). Ca devrait maintenant marcher tel quel.

C'est quand-même bizarre, cette histoire d'espaces qui ne sont pas transmis en intégralité.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyMer 9 Mai 2012 - 15:06

Un nouvel exemple: les valeurs de pi arrondies sur un nombre de décimales entre 0 et 16, et cadrées à droite, à gauche et centrées:
Code:
' ajustement_PI.bas
'
' ce programme montre les décimales de pi ajustées à droite

' définitions pour les routines de justification
label float_to_string, text_right_justify
label text_left_justify, text_center_justify
dim s$, v, dec%, larg%, p%
' fin des définitions pour les routines de justification

dim i%
dim pi : pi = 4*atn(1)
height 0,800
memo 1 : width 1,500 : height 1,750
  font_name 1,"Courier"

s$ = str$(pi)
item_add 1,"["+s$+"] = pi Panoramic"
item_add 1,"[3.14159265358979323846264338327950288419716] = pi réel"
item_add 1,"["+string$(20,".")+"]"
item_add 1,"Cadré à droite:"
for i%=1 to 16
  v = pi
  dec% = i%
  larg% = 20
  gosub float_to_string
  gosub text_right_justify
  item_add 1,"["+s$+"]"+"  "+str$(i%)
next i%
item_add 1,"Cadré à gauche:"
for i%=1 to 16
  v = pi
  dec% = i%
  larg% = 20
  gosub float_to_string
  gosub text_left_justify
  item_add 1,"["+s$+"]"+"  "+str$(i%)
next i%
item_add 1,"Centré:"
for i%=1 to 16
  v = pi
  dec% = i%
  larg% = 20
  gosub float_to_string
  gosub text_center_justify
  item_add 1,"["+s$+"]"+"  "+str$(i%)
next i%

end

' ***************** routines de conversion et justification *********

' *** convertir v en string avec dec% décimales
'    la valeur v est arrondie sur dec% décimales
float_to_string:
  if dec%<0 then dec% = 0
  s$ = str$(int(v*power(10,dec%) + 1/2)/power(10,dec%))
  if dec%=0 then return
  p% = instr(s$,".")
  if p%=0
    s$ = s$ + "." + string$(dec%,"0")
    p% = instr(s$,".")
  end_if
  if len(s$)-p%<dec% then s$ = s$ + string$(dec%-len(s$)+p%,"0")
  s$ = left$(s$,p%-1)+","+mid$(s$,p%+1,len(s$))
  return

' *** justifier v à droite avec dec% décimales, sur larg% caractères
'    la valeur v est arrondie sur dec% décimales
'    si le résultat ne tient pas dans larg% caractères: retourner des "*"
'    le résltat est retourné dans s$
text_right_justify:
  s$ = trim$(s$)
  if len(s$)<larg% then s$ = string$(larg%-len(s$)," ")+s$
  if len(s$)>larg% then s$ = string$(larg%,"*")
  return

' **** justifier s$ à gauche sur larg% caractères
'    si le résultat ne tient pas dans larg% caractères: retourner des "*"
'    le résltat est retourné dans s$
text_left_justify:
  s$ = trim$(s$)
  if len(s$)>larg% then s$ = string$(larg%,"*")
  if len(s$)<larg% then s$ = s$ + string$(larg%-len(s$)," ")
  return

' *** justifier s$ en centrant sur larg% caractères
'    si le résultat ne tient pas dans larg% caractères: retourner des "*"
'    le résltat est retourné dans s$
text_center_justify:
  s$ = trim$(s$)
  if len(s$)>larg% then s$ = string$(larg%,"*")
  while len(s$)<larg%
    s$ = " " + s$
    if len(s$)<larg% then s$ = s$ + " "
  end_while
  return


Dernière édition par Klaus le Mer 9 Mai 2012 - 23:25, édité 1 fois
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


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

Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyMer 9 Mai 2012 - 22:36

Chez moi, ça marche bien jusqu'à 11. Après sauf erreur de ma part, ça bug. Je m'explique: 12 n'affiche que 11 caractère comme 11. 13 affiche bien 13 caractères, mais 14 n'en affiche que 13. 15 en affiche 15 mais 16 aussi mais là ça peut être lié à la limitation de la taille de la chaine
Voilà le résultat que j'obtiens:
Code:
[3.14159265358979] = pi Panoramic
[3.14159265358979323846264338327950288419716] = pi réel
[....................]
Cadré à droite:
[                3,1]  1
[                3,14]  2
[              3,142]  3
[              3,1416]  4
[            3,14159]  5
[            3,141593]  6
[          3,1415927]  7
[          3,14159265]  8
[        3,141592654]  9
[        3,1415926536]  10
[      3,14159265359]  11
[      3,14159265359]  12
[    3,1415926535898]  13
[    3,1415926535898]  14
[    3,14159265358979]  15
[    3,14159265358979]  16
Cadré à gauche:
[3,1                ]  1
[3,14                ]  2
[3,142              ]  3
[3,1416              ]  4
[3,14159            ]  5
[3,141593            ]  6
[3,1415927          ]  7
[3,14159265          ]  8
[3,141592654        ]  9
[3,1415926536        ]  10
[3,14159265359      ]  11
[3,14159265359      ]  12
[3,1415926535898    ]  13
[3,1415926535898    ]  14
[3,14159265358979    ]  15
[3,14159265358979    ]  16
Centré:
[        3,1        ]  1
[        3,14        ]  2
[        3,142      ]  3
[      3,1416      ]  4
[      3,14159      ]  5
[      3,141593      ]  6
[      3,1415927    ]  7
[    3,14159265    ]  8
[    3,141592654    ]  9
[    3,1415926536    ]  10
[    3,14159265359  ]  11
[    3,14159265359  ]  12
[  3,1415926535898  ]  13
[  3,1415926535898  ]  14
[  3,14159265358979  ]  15
[  3,14159265358979  ]  16
Revenir en haut Aller en bas
Klaus

Klaus


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

Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyMer 9 Mai 2012 - 22:44

Peut-être un problème de police chez toi, en ce qui concerne le cadrage qui n'est pas bon. En ligne 15, j'utilise "Courier", mais tu peux essayer "FixedSys". Le fait qu'entre 11/12 et 13/14, on a la même valeur, s'explique par l'arrondi: regarde la suite des chiffres du vrai pi.

Voici ce que ça donne chez moi:
[img]Formattage et justification dans un MEMO Cadrag10[/img]
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


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

Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyMer 9 Mai 2012 - 22:57

Non Klaus, j'ai bien la même chose que toi, c'est le copier / coller qui déforme, désolé.
Par contre je pense que pour être logique (enfin à ma logique à mois, si on veut les 12 décimale, il faudrait afficher le 0 en 12ème position) maintenant, je te l'accorde, mathématiquement, ça ne change rien. C'est juste que comme là, on travaille plus sur la présentation que sur les math, si on veut afficher 12 chiffres après la virgule, c'est mieux d'en avoir 12 que 11 Wink

Revenir en haut Aller en bas
Klaus

Klaus


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

Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyMer 9 Mai 2012 - 23:21

Tu as raison pour le 0 manquant en dernière position. Je vais corriger cela.

EDIT

voilà, c'est corrigé, et pour les deux programmes du premier post de la série aussi (mini-facture et liste des polices fixes). Dans tous ces modules, on peut extraire les 4 routines et les quelques lignes de déclarations pour intégrer cela dans un programme.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


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

Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyMer 9 Mai 2012 - 23:31

Salut Klaus.

J’obtiens exactement le même affichage que toi.
Mais comme a dit Jicehel , les lignes 11 et 12 affichent la même valeur [ 3,14159265359]
Ainsi que les lignes 13 et 14 [ 3,1415926535898]
Et les lignes 15 et 16 [ 3,14159265358979]

PS:
OK, je vois maintenant la correction. C'est parfait.
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


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

Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyMer 9 Mai 2012 - 23:40

@Papydall:
recharge le programme maintenant - le problème du zéro en dernière position est résolu. Mais que les valeurs en 11/12 et 13/14 soient égales, c'est normal: regarde la vraie valeur de pi et fais l'arrondi sur les x chiffres voulus: dans ces cas-là, tu obtiens un 0 en dernière position à cause de l'arrondi, ce qui est normal. Et les valeurs 15/16: regarde la valeur de pi en version Panoramic: ça s'arrête justement là: il n'y a plus de chiffres significatifs disponibles -snif...

Voici le nouveau résultat:
[img]Formattage et justification dans un MEMO Cadrag11[/img]
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


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

Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyMer 9 Mai 2012 - 23:48

OK c'est clair
Danke Klaus.
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jicehel

Jicehel


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

Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyJeu 10 Mai 2012 - 0:27

Là, je suis content Wink On a le nombre de décimale demandé, ça répond à l'énoncé du problème
Revenir en haut Aller en bas
Klaus

Klaus


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

Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO EmptyJeu 10 Mai 2012 - 0:38

Merci. Deux approbations nettes - voilà qui me fait plaisir !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





Formattage et justification dans un MEMO Empty
MessageSujet: Re: Formattage et justification dans un MEMO   Formattage et justification dans un MEMO Empty

Revenir en haut Aller en bas
 
Formattage et justification dans un MEMO
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Position dans un MEMO
» Sélection dans un Memo
» Positionnement plus ou moins ciblé dans un MEMO
» sélection de texte dans un mémo.
» FILE_FIND: Arborescence des répertoires dans un mémo

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: