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
7668
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
7668
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
7668
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
7668
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
131
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
7668
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
7668
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
7668
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