PDA

Ver la Versión Completa : Error en printer.SetPrinter(ADevice, ADriver, APort, DeviceHandle);


JOMABRI
28-06-2004, 23:15:01
Hola foro,

estoy probando el codigo para el establecer le tamaño de papel para recibos y facturas, pero en la ejecucion de la linea

printer.SetPrinter(ADevice, ADriver, APort, DeviceHandle);

Emite un mensaje de Impresion en progreso y un error de violacion de acceso a la memoria y no me imprime mi codigo con printer.canvas que hay despues de esta instruccion.


Gracias por su ayuda.

marcoszorrilla
29-06-2004, 09:41:00
Para definir el tamaño de papel yo utilizo esta función y no me da ningún tipo de error:


procedure SetPaperSize (intAlto,intAncho : Integer);
{aqui se define el tamaño del papel}
var
ADevice, ADriver, APort : array [0..255] of Char;
ADeviceMode : THandle;
DevMode : PDevMode;
begin
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;
end;


Ojo el tamaño se mide en 0,1 mm por ejemplo 29,7x21 quedaría:
SetPaperSize (2970,2100);

Un Saludo.