Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Formattage et justification dans un MEMO | |
| | Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Formattage et justification dans un MEMO Mar 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 | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Formattage et justification dans un MEMO Mar 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 | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Formattage et justification dans un MEMO Mar 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 | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Formattage et justification dans un MEMO Mar 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 | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Formattage et justification dans un MEMO Mar 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] [/img] Pour moi, ça semble bon. Et, toujours tel que je l'ai posté, voici l'affichage des polices chez moi: [img] [/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. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Formattage et justification dans un MEMO Mer 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
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Formattage et justification dans un MEMO Mer 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. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Formattage et justification dans un MEMO Mer 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) | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Formattage et justification dans un MEMO Mer 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 | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Formattage et justification dans un MEMO Mer 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. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Formattage et justification dans un MEMO Mer 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$ ? | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Formattage et justification dans un MEMO Mer 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.
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Formattage et justification dans un MEMO Mer 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 ) 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 | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Formattage et justification dans un MEMO Mer 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... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Formattage et justification dans un MEMO Mer 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é. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Formattage et justification dans un MEMO Mer 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 | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Formattage et justification dans un MEMO Mer 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
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Formattage et justification dans un MEMO Mer 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] [/img] | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Formattage et justification dans un MEMO Mer 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 | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Formattage et justification dans un MEMO Mer 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. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Formattage et justification dans un MEMO Mer 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. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Formattage et justification dans un MEMO Mer 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] [/img] | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Formattage et justification dans un MEMO Mer 9 Mai 2012 - 23:48 | |
| OK c'est clair Danke Klaus. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Formattage et justification dans un MEMO Jeu 10 Mai 2012 - 0:27 | |
| Là, je suis content On a le nombre de décimale demandé, ça répond à l'énoncé du problème | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Formattage et justification dans un MEMO Jeu 10 Mai 2012 - 0:38 | |
| Merci. Deux approbations nettes - voilà qui me fait plaisir ! | |
| | | Contenu sponsorisé
| Sujet: Re: Formattage et justification dans un MEMO | |
| |
| | | | Formattage et justification dans un MEMO | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |