![]() |
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. |
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. ;) |
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 |
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... :p El código debiera ser algo como:
Gracias por la aclaración, y hasta luego. ;) |
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 |
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! |
Que significa el factor 25 que utilizas?
Has considerado que pasa con cadenas largas y tipos de fuente no monospace? |
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) |
Cita:
Cita:
Hasta luego. ;) |
No uso separadores de miles, perdon: 99999,99 = 8
Gracias por el dato TextWidth Salutes |
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?
|
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. ;) |
La franja horaria es GMT +2. Ahora son las 22:13:03. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi