Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Como cambiar el tamaño del papel en win 7 (https://www.clubdelphi.com/foros/showthread.php?t=67878)

GerTorresM 11-05-2010 22:32:44

Como cambiar el tamaño del papel en win 7
 
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


La franja horaria es GMT +2. Ahora son las 16:58:19.

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