FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Alineacion de valores numericos en Printer
Hola foro,
Estoy imprimiendo valores numericos en el printer.canvas utilizando FormatFloat con textOut. Pero al imprimir me salen asi: 12,789.23 1,185.00 186.00 10.56 que funcion hay o que debo hacer para que salgan alineados o justificados a la derecha??? Gracias. |
#2
|
||||
|
||||
Dado el método que estas usando para imprimir, lo único que te queda es justificarlos vos a mano.
Para conseguirlo, has de fijar la posición derecha de los valores a una coordenada, averiguar el tamaño que tendrán ya impresos (en pixels) con el método TextWidth del Canvas y luego calcular en base a esto la posición donde imprimirlo. Creo que me he enrollado un poco, y un trozo de código dice mas que mil palabras
Hasta luego. |
#3
|
|||
|
|||
Hola muchachos, en realidad imprimir directo sobre el Canvas del TPrinter a veces es bastante laborioso la propuesta de roman puede solventar este caso, sin embargo quería aclarar que las dos primeras declaraciones presentan dificultades debido a que:
Código:
Canvas.Font.Pitch = 'Helvetica'; Y Código:
Canvas.Font.Width = -11; Al menos ha sido así hasta Delphi 6, no obstante considero una buena propuesta de solución al caso. Saludos |
#4
|
||||
|
||||
Cita:
Ciertamente he dejado los errores que has resaltado. He cometido el error de hablar de memoria sin comprobar lo que digo, y ya ves, mi memoria no es confiable... El código debiera ser algo como:
Gracias por la aclaración, y hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#5
|
|||
|
|||
Buenas noches jachguate, como ves no solo a ti te traiciona la memoria pués escribí el nombre equivocado, había acabado de leer un post de roman y allá salió el nombre, ya veo las enmiendas que has hecho y yo tambíén enmiendo mi error por abusar de mis ya viejas neuronas, que entre ron y tabaco van muriendo.
Un saludo |
#6
|
|||
|
|||
Otra alternativa
Hola, me hice esta funcion para poder alinear a la derecha, fijate si te sirve:
function ubica(s: string):integer; var aux: byte; begin aux:= 8 - length(s); ubica:= 25 * aux; end; Nota: cadena de hasta 8 caracteres. Ejemplo de llamada: TextOut ( (2090+ubica(label1.caption)), 1675, label1.caption); Salutes! |
#7
|
||||
|
||||
Que significa el factor 25 que utilizas?
Has considerado que pasa con cadenas largas y tipos de fuente no monospace?
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#8
|
|||
|
|||
Bueno , esa funcion me sirvio a mi para alinear precios de unos productos que no superaban a 99.999,99. Por eso el 8 y no probe con strings con espacios.
El factor 25 es el ancho aproximado de un caracter. (Usando printer.canvas) |
#9
|
||||
|
||||
Cita:
Cita:
Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#10
|
|||
|
|||
No uso separadores de miles, perdon: 99999,99 = 8
Gracias por el dato TextWidth Salutes |
#11
|
|||
|
|||
me funciona conrrectamente, pero si el string es muy largo se me corta, como puedo hacer para que me haga saltos de linea cuando llegue al borde del canvas?
|
#12
|
||||
|
||||
Un canvas es una superficie de dibujo. Así, es tarea tuya determinar si la cadena no puede dibujarse completa (valiendote del textwidth ya mencionado, por ejemplo), cortarla adecaudamente y dibujar el resto en la siguiente "línea", (cuyas coordenadas también tendrás que calcular).
Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
|
|
|