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..255] of 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; |