Friday, January 05, 2007

procedure TForm1.Button1Click(Sender: TObject);
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, CountPaperFormats : Integer;
pPaperFormats : pPaperNameArray;
begin
Memo1.Lines.Clear;
Printer.GetPrinter(Device, Driver, Port, hDevmode);
CountPaperformats := WinSpool.DeviceCapabilities(Device, Port, DC_PAPERNAMES, Nil, Nil);
if CountPaperformats > 0 then
begin
GetMem(pPaperformats, CountPaperformats * SizeOf(TPaperName));
try
WinSpool.DeviceCapabilities(Device, Port, DC_PAPERNAMES, PChar(pPaperFormats), Nil);
for i := 1 to CountPaperformats do Memo1.Lines.Add(pPaperformats^[i]);
finally
FreeMem(pPaperFormats);
end;
end;
end;