Imprimer un textbox, avec des retour charriot [Résolu]

8369 15 Messages postés mardi 9 janvier 2007Date d'inscription 22 septembre 2008 Dernière intervention - 2 avril 2007 à 16:21 - Dernière réponse : jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention
- 2 avril 2007 à 18:32
Bonjour à tous de Visual,
dans une form j'ai mis des textbox avec multiline true et scrollbar vertical.
J'ai déjà une routine pour sectionner le texte en plusieurs lignes et les placer au bon endroit.
Seulement j'ai un problème :Quand j'écris un texte et je vais à la ligne suivante avec enter, l'imprimante n'imprime plus à la position indiqué dans le programme, mais au bord gauche de <?xml:namespace prefix st1 ns "urn:schemas-microsoft-com:office:smarttags" /??><st1:personname w:st="on" productid="la feuille. Par">la feuille.
Par</st1:personname> contre quand j'écris le texte tout en suivant tout le texte est imprimé correctement sur plusieurs lignes et à la position demandée.


Il y a quelqu'un qui peux m'aider à trouver une solution pour imprimer le texte  ??
Merci de votre aide
Visual
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 2 avril 2007 à 18:32
3
Merci
Bon !
Je ne vois rien, dans ce code copié-collé, qui gère les sauts de ligne de ta textbox multiligne !

Il est apparemment  fait pour un texte (un paragraphe, par exemple) sans saut de ligne


Il va falloir que tu t'y intéresses en premier, avant même de commencer à parler d'impression.

1) Etudie la façon de décomposer (sans impression) en plusieurs lignes le texte d'une textebox multiligne. Utilise pour celà Split (à voir dans ton aide en ligne).
2) lorsque tu auras maîtrisé cette partie là, il te suffira d'envoyer à ta routine, pour impression, chacune des lignes ou paragraphes, tour à tour...


 


Bonne étude

Merci jmfmarques 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de jmfmarques
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 2 avril 2007 à 16:28
0
Merci
Bonjour,

Je suppose que tu utilises l'objet Printer, donc...

Il a pour celà (exactement comme pour une pictureBox ou une Form) des propriétés CurrentX et CurrentY, qui sont à utiliser dans ton instruction print !
Commenter la réponse de jmfmarques
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 2 avril 2007 à 16:30
0
Merci
Excuses !
Pas dans l'instruction Print, mais à définir juste avant l'instruction Print, bien sûr ...
Commenter la réponse de jmfmarques
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 2 avril 2007 à 16:32
0
Merci
Tout à fait, si tu définit le currentX pour faire une indentation,
celui-ci ne sera appliqué que pour la première ligne, il faut le
redéfinir à chaque retour de ligne !


=> fait un print de chacune des lignes de ton textbox séparément.
Commenter la réponse de cs_DARKSIDIOUS
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 2 avril 2007 à 16:38
0
Merci
Exemple, donc

Private Sub Command2_Click()
  Printer.CurrentX = 300: Print "debut paragraphe"
  Printer.CurrentX = 200: Print "suite paragraphe"
  Printer.CurrentX = 200: Print "suite paragraphe"
  Printer.CurrentX = 300: Print "debut paragraphe"
  Printer.CurrentX = 200: Print "suite paragraphe"
  Printer.CurrentX = 200: Print "suite paragraphe"
End Sub

Mais tu as intérêt à utiliser une petite sous-routine paramétrée ...

A toi de jouer un peu, quand même.




 
Commenter la réponse de jmfmarques
8369 15 Messages postés mardi 9 janvier 2007Date d'inscription 22 septembre 2008 Dernière intervention - 2 avril 2007 à 17:54
0
Merci
Merci de ta proposition, sur ma feuille il y a 5 textbox et à chaque textbox, je fais faire le sub programme routine IMPRIME2 pour le détailler en lignes.
Mes lignes sont:
Call IMPRIME2(TextGeneralites(0).Text, 8, 6, 10)
 Call IMPRIME2(TextGeneralites(1).Text, 8, 8, 10)
Call IMPRIME2(TextGeneralites(2).Text, 8, 12, 10)
Call IMPRIME2(TextGeneralites(3).Text, 8, 14, 10)
Call IMPRIME2(TextGeneralites(4).Text, 8, 16, 10)
Call IMPRIME2(TextGeneralites(5).Text, 8, 21, 10)
 Call IMPRIME2(LabelMisejour.Caption, 2, 27, 8)
 Call IMPRIME2(LabelDatesGeneralites.Caption, 7, 27, 8)
J'espère que vous m'avez compris.
Merci encore si vous avez un idée


8369
Commenter la réponse de 8369
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 2 avril 2007 à 18:02
0
Merci
C'est le code de ta sous-routine IMPRIME2 que l'on a besoin de voir... et il n'est pas là !!!

Tes chiffres sont beaux, mais on n'en devine aucunement la signification de façon précise.
Commenter la réponse de jmfmarques
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 2 avril 2007 à 18:05
0
Merci
Houlà !...

Mais j'ai lu plus heut que tes textboxes étaient multilignes ...
Il te faut donc les "éclater" (par un split sur vbcrlf) en plusieurs lignes distinctes et envoyer chacune de ces lignes à ta sous-routine d'impression.... pas la totalité de ta textbox, pardi ....
Commenter la réponse de jmfmarques
8369 15 Messages postés mardi 9 janvier 2007Date d'inscription 22 septembre 2008 Dernière intervention - 2 avril 2007 à 18:09
0
Merci
Voilà la routine demandé, c'est un routine qui j'ai pris dans Vbfrance




'---------- Première évolution : les mots ne sont pas coupés et sont renvoyés à la ligne.


Public Sub IMPRIME2(Texte As String, X As Currency, Y As Currency, largeur As Currency)
Dim i, k As Integer
Printer.ScaleMode = vbCentimeters
Printer.Font = "Time New Roman"
Printer.CurrentY = Y
i = 1
Do    j 0: k 1
'---------------On découpe le texte en lignes, chaque ligne mesurant "Largeur" cm------
    Do
        j = j + 1        If Mid(Texte, i + j - 1, 1) " " Then k j
    Loop While (Printer.TextWidth(Mid(Texte, i, j + 1)) <= largeur) And (i + j <= Len(Texte))
    Printer.CurrentX = X


'------------------- Si on coupe un mot en fin de ligne alors on renvoie ce mot à la ligne-------------
    If (i + j < Len(Texte)) And (Mid(Texte, i + j - 1, 1) <> " ") And (Mid(Texte, i + j, 1) <> " ") And (k > 1) Then j = k


'-------------------On supprime les éventuels espaces au début de la ligne obtenue---------------
   
    Do While Mid(Texte, i, 1) = " "
        i = i + 1
    Loop
' -----------------On envoie la ligne vers l'imprimante----------------
    Printer.Print Mid(Texte, i, j)
    i = i + j
Loop While i < Len(Texte)
End Sub
merci
8369
Commenter la réponse de 8369

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.