Problemas al imprimir

J.P.Z.
11 de Diciembre del 2002
Hola:
Me gustaría que me dijera alguien como hacer para que al imprimir un texto, de una longitud por ejemplo de 1000 caracteres, con el objeto printer aparezca este texto en diferentes líneas del siguiente modo: que todas las líneas tengan como máximo 50 caracteres, sin que las palabras se partan. Es decir, que actúe como lo hace el Word, que cuando llegas al final de la línea si la palabra no cabe se cambie de línea.

Gracias.

webJose
11 de Diciembre del 2002
Lo que pide no es corto, pero sí sencillo relativamente hablando. Lo que necesita es una función que parta un string en varios strings y los devuelva, por ejemplo, en forma de vector de strings. La función se encargaría de hacer respetar las reglas que usted quiera.

Una vez que la función devuelve el string partido en varios, solamente debe hacer un FOR NEXT e imprimir cada pedazo de string.

javierbalk
11 de Diciembre del 2002
Acá está la rutina:

Public Function EnRenglones(nTexto As String, nLienzo As Object, nMargenes) As Variant
Dim iRenglonesTexto() As String
Dim iRenglon As Long
Dim iPosEspacio As Long
Dim iPosEspacioNueva As Long
Dim iAuxTexto As String
Dim iAuxTextoAnterior As String
Dim iAuxAncho
Dim iInicioRenglon As Long

ReDim iRenglonesTexto(0)
iPosEspacio = 0
iInicioRenglon = 1
Do
iPosEspacioNueva = InStr(iPosEspacio + 1, nTexto, " ")
iAuxTextoAnterior = iAuxTexto
If iPosEspacioNueva > 0 Then
iAuxTexto = Mid(nTexto, iInicioRenglon, iPosEspacioNueva - iInicioRenglon)
iAuxAncho = nLienzo.TextWidth(iAuxTexto)
End If
If iAuxAncho > nLienzo.ScaleWidth - nMargenes Or iPosEspacioNueva = 0 Then
iRenglon = UBound(iRenglonesTexto) + 1
ReDim Preserve iRenglonesTexto(iRenglon)
iRenglonesTexto(iRenglon) = iAuxTextoAnterior
If iPosEspacioNueva = 0 Then
If Len(nTexto) - iPosEspacio > 0 Then
iRenglon = UBound(iRenglonesTexto) + 1
ReDim Preserve iRenglonesTexto(iRenglon)
iRenglonesTexto(iRenglon) = Right(nTexto, Len(nTexto) - iPosEspacio)
End If
Exit Do
End If
iAuxTexto = ""
iInicioRenglon = iPosEspacio + 1
End If
iPosEspacio = iPosEspacioNueva
Loop

EnRenglones = iRenglonesTexto
End Function

Y para usarla:

Dim TextoEnRenglones
Dim iContador As Long

TextoEnRenglones = EnRenglones(Text1.Text, Printer, 100)

For iContador = 1 To UBound(TextoEnRenglones)
Printer.Print TextoEnRenglones(iContador)
Next

Saludos,
Javier