How to identify the paper names of the active printer (Views: 714)
Problem/Question/Abstract: How to identify the paper names of the active printer Answer: procedure TFReport.GetPapernames(sl: TStrings); type TPaperName = array[0..63] of Char; TPaperNameArray = array[1..High(Integer) div Sizeof(TPaperName)] of TPaperName; PPapernameArray = ^TPaperNameArray; var Device, Driver, Port: array[0..255] of Char; hDevMode: THandle; i, numPaperformats: Integer; pPaperFormats: PPapernameArray; begin Printer.GetPrinter(Device, Driver, Port, hDevmode); numPaperformats := WinSpool.DeviceCapabilities(Device, Port, DC_PAPERNAMES, nil, nil); if numPaperformats > 0 then begin GetMem(pPaperformats, numPaperformats * Sizeof(TPapername)); try WinSpool.DeviceCapabilities(Device, Port, DC_PAPERNAMES, Pchar(pPaperFormats), nil); sl.Clear; for i := 1 to numPaperformats do sl.add(pPaperformats^[i]); finally FreeMem(pPaperformats); end; end; end; |