Hola a todos:
La situación que se me presenta el día de hoy es la siguiente:
Tengo una aplicación que he desarrollado en delphi 6 y utiliza el Quick Report 3 para los reportes, la esencia de la situación es que utilizo tan solo algunos reportes en tamaño folio o en 8.5 x 13", y el el resto de los reportes en tamaño carta.
Conociendo a los usuarios de mi aplicación, puedo llegar a asegurar que éstos nunca iran al panel de control y en impresoras especificaran el tamaño del papel antes de cargar e imprimir el reporte, así que intente cambiar el tamaño del papel mediante de código y me halle con el siguiente código
Código Delphi
[-]
procedure SetPaperSize(floatAlto, floatAncho: Double);
var
ADevice, ADriver, APort : array [0..255] of Char;
ADeviceMode : THandle;
DevMode : PDevMode;
PixelsInInchX, PixelsInInchY :Integer;
MedidaAncho, MedidaAlto : Variant;
begin
with Printer do
begin
GetPrinter (ADevice, ADriver, APort, ADeviceMode);
SetPrinter (ADevice, ADriver, APort, 0);
GetPrinter (ADevice, ADriver, APort, ADeviceMode);
PixelsInInchX:=GetDeviceCaps(Printer.Handle,LOGPIXELSX);
PixelsInInchY:=GetDeviceCaps(Printer.Handle, LOGPIXELSY);
MedidaAncho:= PixelsInInchX * floatAncho;
MedidaAlto:= PixelsInInchY * floatAlto;
DevMode := GlobalLock(ADeviceMode);
if not Assigned(DevMode) then
ShowMessage('Ha entrado en -> if not Assigned(DevMode) ...')
else
begin
with DevMode^ do
begin
dmFields := dmFields or DM_PAPERSIZE or DM_PAPERLength or DM_PAPERWidth;
dmPaperSize:= DMPAPER_User;
dmPaperLength := MedidaAlto;
dmPaperWidth:= MedidaAncho;
end;
GlobalUnLock(ADeviceMode);
SetPrinter(ADevice, ADriver, APort, ADeviceMode);
end;
end;
end;
Las pruebas son realizadas utilizando Windows 7 Ultimate de 64 y una impresora HP que utiliza el driver universal.
El código como tal corre, pero al finalizar no realiza el cambio el tamaño del papel.
Agradezco de antemano el tiempo que den a la respuesta
gertorresm
colombia