Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Impresion con objeto Printer (https://www.clubdelphi.com/foros/showthread.php?t=55376)

Pollonidas 15-04-2008 13:48:06

Impresion con objeto Printer
 
Buenas, tengo un programa que no trabaja con bases de datos, simplemente con ficheros con tipo. A la hora de imprimir un informe, utilizo el objeto printer de delphi y puedo ir tirando, se que no es optimo, pero es simple y me funciona. Sin embargo, tengo un grandisimo problema, los datos deben ir en columnas, por poner un ejemplo de las cabeceras: (Nombre Domicilio DNI), obviamente cada nombre no va a tener los mismos caracteres por lo que el domicilio y el DNI quedarian descuadrados de su columna(poniendo unos espacios fijos entre ellos). Tuve en cuenta esto y al numero de caracteres entre cada columna, le reste los del nombre (50 - Length(nombre)) y luego con un bucle rellene los espacios que faltaban:

Por ejemplo:

w := (50-Lenght(nombre))
for i := 1 to w do
begin
nombre := (nombre + ' ');
end,
writeln(impresora, nombre);

Aun y así no cuadraban, y comprendi que dos palabras con 5 caracteres no tienen por que ocupar el mismo espacio fisico en la hoja de texto ya que cada letra no ocupa lo mismo... o creo que ese es el problema... llevo tiempo dandole vueltas y no encuentro una solución, si alguien puede prestarme ayuda se lo agradeceria enormememente ya que este asunto me urge muchisimo.

Muchas Gracias.

marcoszorrilla 15-04-2008 14:49:50

Para ese propósito lo mejor es que utilices:
Código Delphi [-]
BeginDoc
TextOut()
EndDoc
del Objeto Tprinter.

Ejemplo.
cNumText, es una variable de tipo String en donde se guardan las cantidades convertidas a texto para luego poderlas alinear por la derecha:

Código Delphi [-]
Printer.Canvas.TextOut(DmXX.Impresoraciva.Value - Printer.Canvas.TextWidth(cNumText), Dmxx.ImpresoraFtotales2.Value , cNumText);

Un Saludo.

Neftali [Germán.Estévez] 15-04-2008 16:08:39

Cita:

Empezado por Pollonidas (Mensaje 280153)
Aun y así no cuadraban, y comprendi que dos palabras con 5 caracteres no tienen por que ocupar el mismo espacio fisico en la hoja de texto ya que cada letra no ocupa lo mismo... o creo que ese es el problema... llevo tiempo dandole vueltas y no encuentro una solución, si alguien puede prestarme ayuda se lo agradeceria enormememente ya que este asunto me urge muchisimo.

Una solución es que utilices algun tipo de letra que sea proporcional. Los tipos normales no cumplen lo que dices (5 A's no ocupan lo mismo que 5 I's), pero sí lo cumplen los tipos proporcionales (por ejemplo COURIER); Si no te es un problema cambia a algun tipo de estos.

ARIAL:
AAAAAA
IIIIII


COURIER:
AAAAAA
IIIIII


La franja horaria es GMT +2. Ahora son las 11:28:27.

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