PDA

Ver la Versión Completa : Impresion con objeto Printer


Pollonidas
15-04-2008, 13:48:06
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:
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:

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
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