Impressao - obtendo informacoes da impressora selecionada no objeto Printer

Top  Previous  Next

// obtendo informacoes da impressora selecionada no Printer

 

function GetPrinterPaperSize: string;

var

  // usados no GetPrinter

  Device, Driver, Port: Array [0..255of Char;

  hDevMode: THandle;

  // Restante

  SpaceNeeded  : word;         // for pDriverinfo2

  pDBuff       : _devicemodeA; // dummy

  Driver_info_2: pDriverinfo2;

  DevModeSize  : integer;

  dPtr         : Pointer;

  hPrinter     : THandle;

  DevMode      : PDeviceMode;

begin

  try

    Printer.GetPrinter(Device, Driver, Port, hDevmode) ;

    // Get the printer handle

    OpenPrinter(Device, hPrinter, nil);

    // find out how much space we need for the info stuct

    GetPrinter( hPrinter, 2, nil, 0, @SpaceNeeded);

    // allocate the necessary

    GetMem( Driver_info_2, SpaceNeeded);

    // The second GetPrinter fills in all the current settings

    GetPrinter( hPrinter, 2, Driver_info_2, SpaceNeeded, @SpaceNeeded);

    // If GetPrinter didn't fill in the DEVMODE, try to get it by calling

    // Documentproperties() - this is always true in Delphi, so ...

    // Zero in last arg returns buffer size - if it's -1 the call failed..

    DevModeSize :=  DocumentProperties(0, hPrinter, Device, pDBuff, pDBuff, 0);

    // aloca espaco

    dPtr := allocmem( DevModeSize );

    devmode := pDevmode( dPtr );

    // this call fills our DevMode struct

    DocumentProperties(0, hPrinter, Device, _devicemodeA( dPtr^), pDBuff, DM_OUT_BUFFER);

    // o devmode^. contem monte de informacoes sobre a impressora

    Result := devmode^.dmFormName;

 

    FreeMem(Driver_info_2, SpaceNeeded);

    FreeMem(dPtr, DevmodeSize);

    ClosePrinter(hPrinter);

  except

    Result := '?';

  end;

end;