Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-07-2005
tiel tiel is offline
Miembro
 
Registrado: jul 2003
Ubicación: México, D.F.
Posts: 29
Poder: 0
tiel Va por buen camino
Lightbulb Impresora

Primeramente, mi problema es que quiero cambiar el tamaño del papel de la impresora.

Hace tiempo que plantee este problema en otro hilo, y ahora después de seguir investigando encontré este link, directo del soporte técnico de Microsoft http://support.microsoft.com/default...0285#appliesto

Aqui explican cómo usando la API es posible cambiar las propiedades de la impresión, pero... lo estuve trasladando a Pascal y tengo un problema:

Código:
var

   hPrinter: THandle;
   dwNeeded: Dword;
   pi2: ^PRINTER_INFO_2;
   pDevMode: ^DevMode;
   pd: PRINTER_DEFAULTS;

begin

   hprinter := 0;
   dwNeeded := 0;
   pdevmode := nil;

   ZeroMemory( @pd, Sizeof(pd) );
   pd.DesiredAccess := PRINTER_ACCESS_ADMINISTER;

   if OpenPrinter(PAnsiChar(Printer.Printers[Printer.PrinterIndex]), hPrinter, @pd ) then
      begin
         SetLastError(0);
         GetPrinter(hPrinter, 2, nil, 0, @dwNeeded );
         pi2 := Pointer( GlobalAlloc( GPTR, dwNeeded ) );

         if not( GetPrinter(hPrinter, 2, pi2, dwNeeded, @dwNeeded) ) then
            begin
               ShowMessage( IntToStr(GetLastError) );
               Exit;
            end;


         if pi2.pDevMode <> nil then
            begin
               pi2.pSecurityDescriptor := nil;
               pi2.pDevMode.dmFields :=  DM_PAPERLENGTH and DM_PAPERWIDTH and DM_PAPERSIZE;
               pi2.pDevMode.dmPaperLength := 1000;
               pi2.pDevMode.dmPaperWidth := 2160;
               pi2.pDevMode.dmPaperSize := DMPAPER_User;
            end;

       end;

   end;
Se darán cuenta que no lo trasladé textualmente, y me salté algunas validaciones, porque las estoy haciendo con 'Watches' y ejecutando 'Paso a paso', pero en la línea marcada con negrita siempre me da FALSE y no logro entender porqué, a ver si pueden revisar el código original (escrito en c++) y me pueden echar una mano para corregir algo en lo que me haya equivocado o decirme "de plano nunca vas a poder cambiar el tamaño de papel"

PD: Nótese que según el soporte técnico de Microsoft, este código sirve para XP y NT, yo estoy usando XP Professional
__________________
“Daría todo lo que sé por la mitad de lo que ignoro”
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:46:35.


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
Copyright 1996-2007 Club Delphi