Dibujar columnas con el objeto Printer

Hola a todos, tengo una duda, estoy haciendo un informe con el objeto Printer, en el cual tengo tres columnas dividas con una linea vertical, que son Viaje, Fecha de Carga, Ciudad de Origen y Ciudad de Destino, con las columnas de Viaje y Fecha no tengo problemas pues el ancho de columna es grande y nunca se pasan del otro lado de la linea de división de columna, pero con la Ciudades de Origen y Destino, tengo el problema de que algunos nombres son más anchos que su columna, me gustaría saber como le hago para que exactamente al ancho de la columna el nombre de la ciudad se recorte, y no se empalme con la linea de dibujo, por favor ayudenme.
Saludos
1

1 Respuesta

3.025 pts.
Puedes usar la propiedad .TextWidth del objeto Printer para verificar la longitud de una cadena alfanumérica.
(Tambien existe .TextHeight)
Esto está relacionado con el tamaño de fuente con el que estás imprimiendo, naturalmante. Por ejemplo, Printer. TextWidth("Hola")
a) Devuelve un valor de 1.019529 cm con Arial 14 puntos.
b) Con Courier New 10 ptos, el ancho es de 0.8466675 cm.
Puedes, o bien cambiar el tamaño de fuente cuando esta columna se va a salir de margen, o bien recortar letras hasta conseguir el ancho deseado.
Otro camino que también puedes usar, aunque más elaborado, es partir la cadena, e imprimir en primer lugar la parte izquierda que no sobrepase de la columna (con Left$ o Mid$), y la parte derecha de la cadena en una línea siguiente (con Right$ o Mid$), enviando antes Pinter. Print vbCRLF.
Hola Soyde
Una preguntita más, como le hago para recortar las "Letras hasta conseguir el ancho deseado", cual es es la función o propiedad que se utiliza para recortar la letra.
Saludos
Reynaldo
Si lees otra vez el último párrafo de la 1ª respuesta, verás que te indico la solución, aunque no te he puesto un código fuente de ejemplo, porque daba por hecho que ya lo captarías. Te explico:
- En un bucle do.. loop, vas asignando 1 letra de menos por ciclo, y 'midiendo' el ancho con .TextWidth, hasta que tengas el ancho requerido. Ejemplo:
Printer.ScaleMode = vbCentimeters
anchomax!= 2.8 'cm
miString$ = Ciudad$
Do
If Printer.TextWidth(miString$) > anchomax! Then
If Len( miString$) < 2 Then Exit Do 'Para evitar cuelgue...
miString$= Left$( miString$, Len(miString$) -1)
Else
Printer.Print miString;
End If
Loop

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas