SoloCodigo

Programación General => Delphi => Mensaje iniciado por: megalomano en Miércoles 2 de Febrero de 2005, 23:24

Título: Problema Con La Api De Windows
Publicado por: megalomano en Miércoles 2 de Febrero de 2005, 23:24
He estado usando el siguiente código que encontré en otro foro para inicializar Printer:

Código: Text
  1.  
  2. procedure SetPaperSize (intAlto,intAncho : Integer);
  3. {aqui se define el tamaño del papel}
  4. var
  5.    ADevice, ADriver, APort : array [0..255] of Char;
  6.    ADeviceMode : THandle;
  7.    DevMode : PDevMode;
  8. begin
  9.    with Printer do
  10.       begin
  11.          GetPrinter (ADevice, ADriver, APort, ADeviceMode);
  12.          SetPrinter (ADevice, ADriver, APort, 0);
  13.          GetPrinter (ADevice, ADriver, APort, ADeviceMode);
  14.          DevMode := GlobalLock(ADeviceMode);
  15.          if not Assigned(DevMode) then
  16.             ShowMessage('Ha entrado en -> if not Assigned(DevMode) ...')
  17.          else
  18.             begin
  19.                with DevMode^ do
  20.                   begin
  21.                      dmPaperSize:= DMPAPER_User;
  22.                      dmPaperLength := intAlto;
  23.                      dmPaperWidth:= intAncho;
  24.                      dmFields := dmFields or DM_PAPERSIZE or DM_PAPERLength or DM_PAPERWidth;
  25.                   end;
  26.                GlobalUnLock(ADeviceMode);
  27.                SetPrinter(ADevice, ADriver, APort, ADeviceMode);
  28.            end;
  29.       end;
  30. end;
  31.  
  32.  

Y había satisfecho mis propósitos, pero cuando quise cambiar el tamaño de la hoja de papel por otra que no es carta y no está definida en las constantes de la API de Windows, veo que aunque le ponga el tamaño que le ponga, no cambia nunca, siempre se queda en carta.

Así que quisiera saber si alguien ya tuvo este problema y cómo lo resolvió. O si alguien sabe cómo resolverlo.

El problema específicamente es hacer que el tamaño definido en dmPaperLength y dmPaperWidth sea usado por Printer, ya que uso Printer para obtener ciertos valores como la mitad del ancho de página, etc... que son usados por Printer.Canvas.

De antemano, Gracias.