15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Как узнать все форматы бумаги, поддерживаемые принтером по умолчанию.

Компилятор: 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);