Ver Mensaje Individual
  #1  
Antiguo 11-05-2010
Avatar de GerTorresM
GerTorresM GerTorresM is offline
Miembro
 
Registrado: nov 2005
Ubicación: Tunja - Boyacá
Posts: 210
Reputación: 19
GerTorresM Va por buen camino
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

Última edición por GerTorresM fecha: 11-05-2010 a las 22:35:28. Razón: redacción
Responder Con Cita