• Viernes 19 de Abril de 2024, 15:41

Autor Tema:  Problema Con La Api De Windows  (Leído 1185 veces)

megalomano

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Problema Con La Api De Windows
« en: Miércoles 2 de Febrero de 2005, 23:24 »
0
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.