Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

usando el objeto printer

Estas en el tema de usando el objeto printer en el foro de Visual Basic clásico en Foros del Web. Hola amigos, tengo el siguiente inconveniente, estoy armando un listado usando el objeto printer y, cuando el largo de una cadena es mayor que el ...
  #1 (permalink)  
Antiguo 24/11/2010, 12:19
rdm
 
Fecha de Ingreso: noviembre-2003
Ubicación: Buenos Aires, Argentina
Mensajes: 57
Antigüedad: 20 años, 5 meses
Puntos: 0
usando el objeto printer

Hola amigos, tengo el siguiente inconveniente, estoy armando un listado usando el objeto printer y, cuando el largo de una cadena es mayor que el espacio previsto para dicha columna, se produce una superposición de las columnas de mi listado, investigando un poco, descubro que puedo usar una propiedad del objeto printer llamada TextWidth que me devuelve el ancho en pixeles de la cadena que le paso como parámetro, esta función está buena porque tiene en cuenta el tipo de letra, tamaño y propiedades de la cadena que estoy enviando, ahora bien, lo que no puedo resolver es como cortar una cadena que, por usar textwidth, se que es mas ancha que el espacio previsto.

Espero me puedan ayudar, les mando saludos y quedo a la espera de algún comentario salvador.
  #2 (permalink)  
Antiguo 24/11/2010, 14:15
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: usando el objeto printer

Hola:

Supongo que en este caso la única opción es que te recorte el texto hasta la longitud deseada, pero evidentemente ello dependerá de las coordenadas máximas que tengas previstas donde se puede imprimir.

Se supone que tienes una coordenada x supongamos DesdeX donde empezar a imprimir que será la que asignarás a Printer.CurrentX

Por otra parte conocerás otra x que es la posición máxima donde quieres que llegue el texto, supongamos que se llama HastaX

Entonces tendríamos que HastaX - DesdeX = TextWidth máximo que puedes permitirte.

Do While DesdeX + Printer.TextWidth(TuTexto) > HastaX
TuTexto = Left$(TuTexto, Len(TuTexto)-1)
Loop

Es de suponer que si no me he equivocado debería funcionar, escribo sobre la marcha y puedo haber cometido algun error de sintaxis.

Prueba y Comenta.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #3 (permalink)  
Antiguo 24/11/2010, 14:25
rdm
 
Fecha de Ingreso: noviembre-2003
Ubicación: Buenos Aires, Argentina
Mensajes: 57
Antigüedad: 20 años, 5 meses
Puntos: 0
Respuesta: usando el objeto printer

Gracias por la pronta respuesta, efectivamente, el camino que estaba siguiendo está apuntado a una solución por esa vía, pero puse este post por las dudas existiera alguna instrucción que funcionace cortando el texto enviado a la impresora sin tener que ajustar esto a mano.

A continuación pongo el código de una pequeña función que, de ser necesario, trunca una cadena hasta ajustarla dentro de un ancho preestablecido.

Private Function TextTruncado(cadTexto As String, anchoDisp As Integer) As String
Dim cadDevo As String
Dim x As Integer
If Printer.TextWidth(cadTexto) > anchoDisp Then
For x = 1 To Len(cadTexto)
cadDevo = cadDevo + Mid(cadTexto, x, 1)
If Printer.TextWidth(cadDevo) > anchoDisp Then
Exit For
End If
Next x
TextTruncado = cadDevo
Else
TextTruncado = cadTexto
End If
End Function

Nuevamente gracias y saludos.

Etiquetas: objeto
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:13.