Alignement à l'impression

Résolu
jiel2007 Messages postés 17 Date d'inscription mercredi 2 mars 2011 Statut Membre Dernière intervention 10 septembre 2011 - 8 mars 2011 à 10:30
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 - 10 mars 2011 à 12:01
Bonjour à tous,

Voici quelques jours, j'avais laissé un message suite à un problème rencontré pour imprimer sous VB 2008 Express.

Grâce à un lien qui m?a été fourni sur le site ( merci ) , j'ai pu découvrir l'excellente notice Impression sous vb 6.0 de Développez.com.

Fort de ces infos, j'ai écrit un petit module d'impression utilisant une RichTextBox. Quand je l'exécute, mes données ( un fichier de 250 lignes de 70 caractères ) s'y affichent parfaitement et toutes mes colonnes sont parfaitement alignées.
Par contre sur la sortie papier les colonnes ne sont plus du tout alignées et me font plus penser à un mur d'escalade qu'a des données imprimées?

A la création du fichier, je complète chaque donnée pour qu'elles aient la même longueur par des blancs ( espaces représentés par des + dans l'exemple ).

Exemple :

La RichTextBox affiche
1A-PRI++MAGLOIRE+++++++++AMANDINE+++++++++11111111101
1A-PRI++MONTSFAUCONS+++++ANELISE++++++++++11111111103
1A-PRI++PLANCENOIX+++++++JUSTIN+++++++++++11111111102

Et sur papier j'obtiens
1A-PRI++MAGLOIRE++++++++AMANDINE+++++++++11111111101
1A-PRI++MONTSFAUCONS++++++++ANELISE++++++++++11111111103
1A-PRI++PLANCENOIX+++++++JUSTIN+++++++++++11111111102

J'ai essayé en changeant la police de caractères ( Arial, Courrier, Calibri? ) mais le résultat est toujours le même : parfait dans le RichTextBox et en dents de scie sur le papier.

Quelqu'un aurait-il une idée d'où cela provient et comment résoudre ce problème car même si le document est parfaitement lisible, comme on dit : « pas beau l'imprimé ».

Un grand merci à vous tous?
Jean-Luc

8 réponses

JPGVB Messages postés 96 Date d'inscription mardi 29 mars 2005 Statut Membre Dernière intervention 10 mars 2011 2
8 mars 2011 à 11:47
Bonjour,
tu dois probablement utiliser une police avec des caractères de largeur fixe dans ton richtextbox, mais pas à l'impression.
Les solutions probables: même police dans les deux cas (ces polices de largeur fixe ne sont pas toujours esthétiques) ou décomposer tes lignes à l'impression (ce qui risque de te compliquer la vie si tu imprimes le contenu d'un bloc).
3
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
8 mars 2011 à 14:21
Bonjour,

Comme le dit JPGVB tu ne dois pas avoir les mêmes polices dans ton RichTtextBox et à l'impression.
Il te faut donc utiliser à l'impression une police non proportionnelle comme Courier New, les lettres ayant toutes la même chasse (largeur).
Le fait de tricher avec les espaces n'est qu'un pis aller car avec une police proportionnelle (comme Arial) la largeur de la lettre est égale à son dessin (un I étant moins large qu'un W).
Au lieu d'un RichTextBox tu devrais utiliser un MSHFlexGrid, tu aurais une meilleure présentation à l'écran et à l'impression en utilisant la virgule pour séparer les cellules tu pourras jouer ainsi avec les tabulations. Quelle que soit la police utilisée tu auras toujours un alignement de tes données.
Ce qui t'éviteras aussi le problème fastidieux de décomposer ton texte à partir du RichTextBox.

Cheyenne
3
jiel2007 Messages postés 17 Date d'inscription mercredi 2 mars 2011 Statut Membre Dernière intervention 10 septembre 2011
8 mars 2011 à 17:16
Merci à JPGVB et Cheyenne pour leurs conseils. Je vais faire un premier essai en utilisant une police non proportionnelle et ensuite un autre avec un FlexGrid.
3
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
9 mars 2011 à 10:15
Bonjour,

Si tu utilises un MSHFlexGrid, je t'avais indiqué que tu pouvais aligner tes colonnes à l'aide de tabulations faites avec la virgule.
Cette solution manquant de souplesse, car il y a une tabulation par pas de 14, il est préférable d'utiliser Tab().

With maGrille
   For ligne = 0 To .Rows - 1
      Printer.Print Tab(t0); .TextMatrix(ligne, 0);
      Printer.Print Tab(t1); .TextMatrix(ligne, 1);
      Printer.Print Tab(t2); .TextMatrix(ligne, 2);
      Printer.Print Tab(t3); .TextMatrix(ligne, 3)
   Next ligne
End With

t0, c'est la marge de gauche.
Ensuite tu définis t1, t2 et t3 en fonction des mots les plus longs de chaque colonne.
Si tu utilises à l'impression une police proportionnelle, tu ajoutes à tes tabulations une marge d'erreur, sinon tu te bases sur le nombre de caractères du mot le plus long dans chaque colonne +1.
Tu peux même te payer le luxe de mettre des colonnes en italique et/ou en gras ou changer de police.
Cette solution, à mon avis, me parait beaucoup plus souple qu'avec le RichTextBox, c'est à toi de voir selon ce que tu désires au final.

Cheyenne
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jiel2007 Messages postés 17 Date d'inscription mercredi 2 mars 2011 Statut Membre Dernière intervention 10 septembre 2011
9 mars 2011 à 13:44
Je viens d'essayer en utilisant la police Courier New et effectivement, tout est bien aligné à l'impression. Dès que j'aurais un peu de temps libre, j'essaierai à partir d'un MSHFlexGrid car en effet les polices non proportionnelles ne sont pas des plus agréables.

Un grand merci pour l'aide et le code car je suis quelque peu déformé par ce que j'avais appris il y a près de 25 ans avec le GW Basic ( ou l'impression se limitait quasi à LPrint ou LPrint tab())...

Jean-Luc
3
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
9 mars 2011 à 23:42
> Jean-Luc : pour plus d'aide je t'ai envoyé un message personnel sur ce site. Consultes, stp, ta boîte de réception.

Cheyenne
3
jiel2007 Messages postés 17 Date d'inscription mercredi 2 mars 2011 Statut Membre Dernière intervention 10 septembre 2011
10 mars 2011 à 07:35
Cheyenne,

Merci pour le message et les explications. Je viens d'en prendre connaissance. En fait, je travaille dans l'enseignement et je souhaite écrire un programme pour la gestion du suivi des garderies dans mon école( c'est une petite école primaire qui compte 350 stroumphs et stroumphettes ).

Dans un même temps, je découvre vb 2008 et je constate que pour pas mal de choses, je dois oublier GW Basic. Je me donnes donc jusqu'à la prochaine rentrée scolaire de septembre pour écrire le programme de façon à le mettre en test de septembre à décembre avant une première utilisation sur une année civile entière (2012).

Je sais déjà que je rencontrerai des petits problèmes et selon ta proposition, dans ce cas, je prendrai contact avec toi.

Un grand merci pour ton dynamisme.
Jean-Luc

PS : Comment fait-on sur le site pour envoyer un message en direct sans passer par le forum ?
3
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
10 mars 2011 à 12:01
Bonjour jiel2007,

Pour envoyer un message privé tu cliques sur l'icône personnelle à gauche au dessus du pseudo de la personne que tu désires contacter et tu accèdes à sa fiche.
Arrivé là, tu cliques sur "Ecrire un message privé".

Attention, la proposition d'aide ne vaut que pour VB6 et non pas pour VB 2008.

Bonne prog. et au plaisir de te lire,

Cheyenne
3
Rejoignez-nous