8369
Messages postés15Date d'inscriptionmardi 9 janvier 2007StatutMembreDernière intervention22 septembre 2008
-
2 avril 2007 à 16:21
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 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
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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...
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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 !
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
8369
Messages postés15Date d'inscriptionmardi 9 janvier 2007StatutMembreDernière intervention22 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
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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 ....
8369
Messages postés15Date d'inscriptionmardi 9 janvier 2007StatutMembreDernière intervention22 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