Personne peut m'aider?

Signaler
Messages postés
133
Date d'inscription
dimanche 1 septembre 2002
Statut
Membre
Dernière intervention
18 avril 2004
-
Messages postés
1858
Date d'inscription
samedi 29 juin 2002
Statut
Membre
Dernière intervention
17 octobre 2013
-
quel est le code svp pour imprimer un textbox en multiligne;je precise bien en multiligne alor pas de printer.print text1 svp merci

2 réponses

Messages postés
1133
Date d'inscription
mercredi 2 octobre 2002
Statut
Membre
Dernière intervention
24 juillet 2011
3
Je ne crois pas qu'il en existe un.
Il me semble qu'il faut que tu découpes le contenu de ton textbox au fur et à mesure que tu veux aller à la ligne.
J'ai trouvé un tutorial au sujet de l'impression sur le site : http://www.developpez.com/vbasic/.

Ce tutorial est un fichier pdf de 10 pages écrites par J-M RABILOUD dont l'adresse que tu pourras lire à l'adresse : http://bidou.developpez.com/Impression_vb.pdf

Extrait :
'=============================
Impression de longues chaînes
En général, les chaînes sont coupées dans les contrôles par VbCrLf et l'impression se passe bien. Mais par
exemples, lors de l'impression d'une chaîne qui n'apparaît pas sur le formulaire, ou dans un TextBox multilignes,
ce caractère n'est pas présent dans la chaîne. L'imprimante risque alors de déborder du cadre ou de la feuille.
On utilise alors la fonction suivante pour découper la chaîne.
N.B : Cette fonction gère le cas de très longues chaînes, elle peut être optimisée si l'on est sûr de ne jamais
rencontrer de chaîne de plus de 3 ou 4 lignes.
Private Function DecoupeChaine(ByVal TextLong As String, ByVal TailleMax As Single) As String()
Dim TabSplit() As String, TabRetour() As String, compteur1 As Long, compteur2 As Long
Dim TabMot() As String, ChaineInter As String
TabSplit = Split(TextLong, vbCrLf)
ReDim TabRetour(0 To 0)
For compteur1 = 0 To UBound(TabSplit)
If Printer.TextWidth(TabSplit(compteur1)) > TailleMax Then
TabMot = Split(TabSplit(compteur1), " ")
For compteur2 = 0 To UBound(TabMot)
If Printer.TextWidth(ChaineInter & " " & TabMot(compteur2)) > TailleMax Then
TabRetour(UBound(TabRetour)) = ChaineInter
ChaineInter = TabMot(compteur2)
ReDim Preserve TabRetour(0 To UBound(TabRetour) + 1)
Else
ChaineInter = IIf(Len(ChaineInter) > 0, ChaineInter & " " & TabMot(compteur2),
TabMot(compteur2))
End If
Next compteur2
If Len(ChaineInter) > 0 Then
TabRetour(UBound(TabRetour)) = ChaineInter
ChaineInter = ""
ReDim Preserve TabRetour(0 To UBound(TabRetour) + 1)
End If
Else
TabRetour(UBound(TabRetour)) = TabSplit(compteur1)
ReDim Preserve TabRetour(0 To UBound(TabRetour) + 1)
End If
Next compteur1
ReDim Preserve TabRetour(0 To UBound(TabRetour) - 1)
DecoupeChaine = TabRetour
End Function
De manière générale il est bon de traiter ces chaînes de façon à ne pas laisser dedans de caractères "VbCrLf" ce
qui ramènerait currentX contre la marge de gauche, sauf si c'est évidemment le but rechercher.
'=============================
0
Messages postés
1858
Date d'inscription
samedi 29 juin 2002
Statut
Membre
Dernière intervention
17 octobre 2013
10
Autre solution : repérer les espaces
contrôler si le texte entre le début de la ligne et l'espace a une largeur inférieure à la largeur de la TextBox.
Voici un code qui réalise ceci (ne gère pas le cas où un mot très long est coupé en 2 dans la TextBox)
FontName Text1.FontName: FontSize Text1.FontSize ' Pour initialise TextWidth
Dim LargeurBox As Single: LargeurBox = Text1.Width
Dim i As Integer, j As Integer, k As Integer, Texte As String
ReDim Ligne(100) As String ' 100 lignes, ça doit être suffisant !
Texte = Text1.Text
k = 1
Do While Len(Texte) > 0
For i = 1 To Len(Texte)
If Mid(Texte, i, 1) = Chr(32) Then
If TextWidth(Mid(Texte, 1, i - 1)) < LargeurBox Then
j = i
Ligne(k) = Mid(Texte, 1, i - 1)
Else
k = k + 1
Texte = Mid(Texte, j + 1)
Exit For
End If
End If
Next i
If TextWidth(Texte) <= LargeurBox Then
Ligne(k) = Texte
Exit Do
End If
Loop
For i = 1 To k
Printer.Print Ligne(i)
Next i
0