Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   La historia de mi problema al imprimir. (https://www.clubdelphi.com/foros/showthread.php?t=11942)

JOMABRI 30-06-2004 14:27:38

La historia de mi problema al imprimir.
 
saludos,

Mi problema comenzo cuando queria imprimir 2 comprobantes o recibos de pago en 1 hoja tamaño carta utilizandi QuickReport con XP, entonces realize lo siguiente:

1. Configure el QuickReport 8.5 x 5.5: En la vista previa salia perfecto, pero la imprimir solo mostraba un recibo por hoja.
2. Consulte al Foro y asi, construí mi rutina de impresion utilizando Printer.Cavas:

with Printer do begin
GetPrinter (ADevice, ADriver, APort, ADeviceMode);
SetPrinter (ADevice, ADriver, APort, 0);
GetPrinter (ADevice, ADriver, APort, ADeviceMode);
DevMode := GlobalLock(ADeviceMode);
if not Assigned(DevMode) then
ShowMessage('Ha entrado en -> if not Assigned(DevMode) ...')
else begin
with DevMode^ do begin
dmPaperSize:= DMPAPER_User;
dmPaperLength := intAlto;
dmPaperWidth:= intAncho;
dmFields := dmFields or DM_PAPERSIZE or DM_PAPERLength or DM_PAPERWidth;
end;
GlobalUnLock(ADeviceMode);
SetPrinter(ADevice, ADriver, APort, ADeviceMode);
end;
end;
Printer.BeginDoc;
Printer.Canvas.Font.Style:=[];
Printer.Canvas.Font.Size:=10;
Printer.Canvas.Font.Name:='draft';
Printer.Canvas.TextOut(0,0,'Hola');
Printer.EndDoc;

Hasta aqui funciono bien, Pero seguia con el problema de que la impresion era lenta.

3. Consulte al Foro y me aconsejaron imprimir directamente al puerto.

Pero antes de hacer esto, quisiera saber algo que me esta pasando con Printer.Canvas: El codigo que les muestro lo proble con 1 impresora LEXMARK 4227 PLUS y funciono a la perfeccion, pero cuando voy donde mi cliente, me doy cuenta que tiene impresora EPSON FX1180 y HP940C, en estas 2 impresoras la rutina que funcionaba perfecto en la primera, se desconfigura en las 2 ultimas, porque?????


Muchas gracias a todos por su colaboracion.

marcoszorrilla 30-06-2004 14:33:33

El problema es la resolución del Canvas de las impresoras que no es la misma, por lo tanto, puedes imprimir un recibo perfectamente a una resolución, pero al cambiar a otra te quedará completamente desconfigurado, yo lo resuelvo guardando en un fichero de configuración una simple tabla, todas las posiciones que me interesan, éstas se acceden desde un formulario para la configuración de la impresora:

Pongamos que que el título nos queda muy a la izquierda:
Pues el campo ConfiguraColumnaTitulo, lo modifico y la siguiente vez que imprima un recibo se modificará su posición, esto lleva cierto trabajo a veces hay que guardar más de 40 valores para asegurarse que pongan la impresora que pongan podremos configurar el recibo o incluso hasta por teléfono si el usuario no es muy torpe.

Un Saludo.

jmoran 30-06-2004 14:52:37

hola,

Para que todas las medidas que mandes al canvas de la impresora sean independientes de la impresora, deberías escribir antes:

SetMapMode(Printer.Handle,MM_LOMETRIC);

Esto hace que lea los valores en milímetros. Espero que te sirva.

Un saludo.


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

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