Pregunta: | 26182 - COMO JUSTIFICAR TEXTO EN REPORTE |
Autor: | Joel Lozano |
He generado un reporte en datareport en el que tengo en la seccion cabecera un label que recibe en tiempo de ejecucion parametros desde codigo de un formulario. En realidad envio unas dies lineas de para que me los presente en el reporte, los envia bien pero quisiera que los justificara como lo hace word. rptLabel tiene 3 propiedades para justificar texto ala (derecha,izquierda y centro) pero no justificar.
En definitiva no quiero que me quede asi FEO==> como este texto en el margen derecho. !!Puede ser cualquiera herramienta!! gracias compañeros... |
Respuesta: | Angel Pacheco Gutiérrez |
Yo no uso reporteador alguno, por que unos son demasiado para mis requerimientos, y otros escasos, así que tengo varias sub y function para el manejo de mi salida impresa. Ví tu solicitud y como no hay objeción tuya respecto a la forma, he aquí el código que yo utilizo para justificar que desde luego, puedes mejorar. Espero sea de utilidad:
Public Sub ImpJust(Texto, margenIzq_, margenDer_) 'Imprime el texto con justificación completa 'dentro de los márgenes indicados. 'El programa que hace el llamado debe seleccionar el 'tipo y tamaño de la fuente. 'Ejemplo de llamado: ImpJust(miCadena,5000,9000) 'miCadena contiene el texto a justificar 'Solo hay una restricción: está hecho pensando en TWIPS Dim i As Long Dim tope, ancho As Long Dim palabra() As String Dim Terminar As Boolean Dim anchoCadena As Long Dim IniciarEn As Integer Dim LaPalabra As String Dim cadena As String Dim j, k, n As Integer Dim espacioS, incremento As Long Terminar = False IniciarEn = 1 Do While Not Terminar And Len(Texto) > 0 IniciarEn = InStr(Texto, " ") If IniciarEn > 1 Then LaPalabra = Left(Texto, IniciarEn - 1) i = i + 1 ReDim Preserve palabra(i) palabra(i) = LaPalabra Texto = Right(Texto, Len(Texto) - IniciarEn) Else If IniciarEn = 0 Then i = i + 1 ReDim Preserve palabra(i) palabra(i) = Trim(Texto) Terminar = True Else Texto = Right(Texto, Len(Texto) - 1) End If End If Loop n = UBound(palabra) j = 0 IniciarEn = 1 ancho = margenDer_ - margenIzq_ cadena = "" For i = 1 To n j = j + 1 cadena = cadena & palabra(i) & " " anchoCadena = Printer.TextWidth(cadena) k = Len(cadena) If anchoCadena > ancho Then 'Quitar la última palabra de la cadena, incluídos los espacios cadena = Left(cadena, Len(cadena) - (Len(palabra(i)) + 2)) k = Len(cadena) anchoCadena = Printer.TextWidth(cadena) espacioS = ancho - anchoCadena 'Calcular el no. de espacios entre palabras j = j - 2 'Calcular espacio en palabras incremento = espacioS / j cadena = "" 'Regresar una palabra i = i - 1 'Iniciar contador de palabras j = 1 '========================= 'Imprimir la linea '========================= Printer.CurrentX = margenIzq_ For k = IniciarEn To i If k <> i Then cadena = cadena & palabra(k) & " " Else cadena = cadena & palabra(k) End If Printer.Print palabra(k); If k <> i Then Printer.Print " "; End If Printer.CurrentX = Printer.CurrentX + incremento j = j + 1 Next Printer.CurrentY = Printer.CurrentY+(Printer.TextHeight(cadena) * 1.1) 'Determinar la palabra que inicia la siguiente linea cadena = "" j = 0 IniciarEn = i + 1 End If Next If cadena <> "" Then Printer.CurrentX = margenIzq_ Printer.Print cadena; End If End Sub |