PDA

Ver la Versión Completa : La historia de mi problema al imprimir.


JOMABRI
30-06-2004, 14:27:38
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.