allora se ho capito bene ti serve qualcosa che ti riduca la larghezza del testo (mandandolo a capo) correttamente?
sei fortunato perchè ho fatto tale routine 2 giorni fa...
codice:
Public Function ChangeTextLong(Text As String, HowLong As Double) As String
Dim s() As String, i As Integer, newS() As String, j As Integer, u As Integer, TextToCheck As String
s = Split(Text, vbCrLf)
ReDim newS(0)
Printer.ScaleMode = 6
For i = 0 To UBound(s)
If Printer.TextWidth(s(i)) > HowLong Then
TextToCheck = s(i)
startCheck: u = UBound(newS) + 1
j = Len(TextToCheck)
Do
j = j - 1
ReDim Preserve newS(u)
newS(u) = Mid(TextToCheck, 1, j)
If Printer.TextWidth(newS(u)) <= HowLong Then Exit Do
Loop
If Printer.TextWidth(Mid(TextToCheck, j + 1, Len(TextToCheck) - j)) > HowLong Then
TextToCheck = Mid(TextToCheck, j + 1, Len(TextToCheck) - j)
GoTo startCheck
Else
u = UBound(newS) + 1
ReDim Preserve newS(u)
newS(u) = Mid(TextToCheck, j + 1, Len(TextToCheck) - j + 1)
End If
Else
u = UBound(newS) + 1
ReDim Preserve newS(u)
newS(u) = s(i)
End If
Next i
For i = 1 To UBound(newS)
If i = 1 Then
ChangeTextLong = newS(i)
Else
ChangeTextLong = ChangeTextLong & vbCrLf & newS(i)
End If
Next i
End Function
Usa questa funzione: basta passargli il testo (che sia su una riga o piu non importa) e la lunghezza (in millimetri, ma puoi modificarlo per ottenerlo in qualunque scala).
ATTENZIONE: questa funzione ti restituisce il testo formattato in modo che vada a capo dopo una certa lunghezza, quindi sulla stampa dovrai gestire le righe, facendo uno split dei vbcrlf.
ad esempio:
codice:
Dim n As Integer, s() As String, Y As Double, sp As Double
Y = 10
sp = 4 'spessore delle righe
s = Split(ChangeTextLong(text1.Text, 74), vbCrLf)
For n = 0 To UBound(s)
'stampo le righe
Printer.CurrentX = 10
Printer.CurrentY = Y + sp / 2 - Printer.TextHeight(s(n)) / 2
Printer.Print s(n)
Y = Y + sp
Next n
Spero di essere stato chiaro, ciao!