cs_PROGRAMMIX
Messages postés1133Date d'inscriptionmercredi 2 octobre 2002StatutMembreDernière intervention24 juillet 20113 26 oct. 2002 à 17:22
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/.
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.
'=============================
cs_rene38
Messages postés1858Date d'inscriptionsamedi 29 juin 2002StatutMembreDernière intervention17 octobre 201311 26 oct. 2002 à 18:15
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