Как узнать все форматы бумаги, поддерживаемые
принтером по умолчанию.
Компилятор: Delphi
Ниже представлена процедура, которая имеет в
качестве параметра любой объект StringList - Строки
для Memo, Пункты Combo и т.д.
procedure GetPaperFormats(aSL: TStringList);
type
TPaperName = Array [0..63] of Char;
TPaperNameArray = Array [1..High(Cardinal) 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.PrinterIndex := -1;
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);
aSL.clear;
For i:= 1 To numPaperformats Do
aSL.lines.add( pPaperformats^[i] );
finally
FreeMem( pPaperformats );
end;
End;
End;
Использование:
GetPaperFormats(Memo1.Lines);
|