Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-06-2004
JOMABRI JOMABRI is offline
Miembro
 
Registrado: may 2004
Posts: 30
Poder: 0
JOMABRI Va por buen camino
Post 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.
Responder Con Cita
  #2  
Antiguo 23-06-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
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

Código Delphi [-]
  Canvas.Font.Pitch = 'Helvetica';
  Canvas.Font.Width = -11;
  PosX := 150 - Canvas.TextWidth('12,789.23');
  Canvas.TextOut(PosX, 50, '12,789.23');

Hasta luego.

Responder Con Cita
  #3  
Antiguo 23-06-2004
Ruben_Cu Ruben_Cu is offline
No confirmado
 
Registrado: oct 2003
Ubicación: Mariel, Cuba
Posts: 271
Poder: 0
Ruben_Cu Va por buen camino
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';
no puede correr ya que al Pich se asocia el TFontPitch y no un string que es este caso es el nombre de un tipo de letra.
Y
Código:
Canvas.Font.Width = -11;
le sucede otro tanto ya que para el TFont no existe la propiedad Width.
Al menos ha sido así hasta Delphi 6, no obstante considero una buena propuesta de solución al caso.
Saludos
Responder Con Cita
  #4  
Antiguo 23-06-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Cita:
Empezado por Ruben_Cu
la propuesta de roman
Hola Ruben... no se si me perdí de algo, pero creo que estas hablando de mi propuesta... jachguate y no de la de roman...

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:

Código Delphi [-]
  Canvas.Font.Name = 'Arial';
  Canvas.Font.Size = -11;
  PosX := 150 - Canvas.TextWidth('12,789.23');
  Canvas.TextOut(PosX, 50, '12,789.23');

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
Responder Con Cita
  #5  
Antiguo 23-06-2004
Ruben_Cu Ruben_Cu is offline
No confirmado
 
Registrado: oct 2003
Ubicación: Mariel, Cuba
Posts: 271
Poder: 0
Ruben_Cu Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 28-07-2004
eber eber is offline
Registrado
 
Registrado: dic 2003
Ubicación: Olavarria
Posts: 9
Poder: 0
eber Va por buen camino
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!
Responder Con Cita
  #7  
Antiguo 28-07-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
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
Responder Con Cita
  #8  
Antiguo 28-07-2004
eber eber is offline
Registrado
 
Registrado: dic 2003
Ubicación: Olavarria
Posts: 9
Poder: 0
eber Va por buen camino
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)
Responder Con Cita
  #9  
Antiguo 28-07-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Cita:
Empezado por eber
que no superaban a 99.999,99. Por eso el 8
length('99.999,99') = 9, no 8

Cita:
Empezado por eber
El factor 25 es el ancho aproximado de un caracter. (Usando printer.canvas)
En todo caso, eso dependerá del tipo de letra y el tamaño elegido. Por ello he usado la función TextWidth, del canvas, que te devuelve el ancho exacto de cualquier cadena tomando en cuenta estas variables.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #10  
Antiguo 28-07-2004
eber eber is offline
Registrado
 
Registrado: dic 2003
Ubicación: Olavarria
Posts: 9
Poder: 0
eber Va por buen camino
No uso separadores de miles, perdon: 99999,99 = 8
Gracias por el dato TextWidth

Salutes
Responder Con Cita
  #11  
Antiguo 27-07-2005
iotegi iotegi is offline
Registrado
 
Registrado: oct 2003
Ubicación: Legazpi
Posts: 3
Poder: 0
iotegi Va por buen camino
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?
Responder Con Cita
  #12  
Antiguo 27-07-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 01:05:05.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi