Imprimer un textbox, avec des retour charriot

Résolu
8369 Messages postés 15 Date d'inscription mardi 9 janvier 2007 Statut Membre Dernière intervention 22 septembre 2008 - 2 avril 2007 à 16:21
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 - 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

9 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
2 avril 2007 à 18:32
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
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
2 avril 2007 à 16:28
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 !
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
2 avril 2007 à 16:30
Excuses !
Pas dans l'instruction Print, mais à définir juste avant l'instruction Print, bien sûr ...
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
2 avril 2007 à 16:32
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.
0

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

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
2 avril 2007 à 16:38
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.




 
0
8369 Messages postés 15 Date d'inscription mardi 9 janvier 2007 Statut Membre Dernière intervention 22 septembre 2008
2 avril 2007 à 17:54
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
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
2 avril 2007 à 18:02
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.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
2 avril 2007 à 18:05
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 ....
0
8369 Messages postés 15 Date d'inscription mardi 9 janvier 2007 Statut Membre Dernière intervention 22 septembre 2008
2 avril 2007 à 18:09
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
0
Rejoignez-nous