Как узнать все форматы бумаги, поддерживаемые принтером по умолчанию
Ниже представлена процедура, которая имеет в качестве параметра любой объект
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 thenbegin
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);
Для определения поддерживаемых форматов бумаги принтером можно использовать функцию DeviceCapabilities из модуля WinSpool в Delphi. Эта функция возвращает массив строк, представляющих доступные размеры бумаги.
Вот процедура, которую я предоставил:
procedureGetPaperFormats(aSL:TStringList);
Эта процедура принимает параметр TStringList и пополняет его списком поддерживаемых форматов бумаги для текущего выбранного принтера.
Работает она следующим образом:
Она устанавливает свойство PrinterIndex в -1, что выбирает по умолчанию принтер.
Она вызывает метод GetPrinter, чтобы получить информацию о выбранном принтере.
Она использует функцию DeviceCapabilities, чтобы получить список поддерживаемых форматов бумаги. Константа DC_PAPERNAMES указывает, что мы хотим получить список имен бумаги (т.е., доступные размеры бумаги).
Если функция DeviceCapabilities возвращает ненулевое значение, то это означает, что есть поддерживаемые форматы бумаги.
Она выделяет память для массива строк с помощью процедуры GetMem и инициализирует его количеством поддерживаемых форматов бумаги.
Она вызывает функцию DeviceCapabilities снова, чтобы получить список имен бумаги и хранит их в выделенной памяти.
Она очищает входной TStringList и добавляет каждый формат бумаги в виде строки в список.
Вы можете использовать эту процедуру, вызвав ее с объектом TStringList, например:
GetPaperFormats(Memo1.Lines);
Это будет пополнять свойство Lines объекта Memo1 списком поддерживаемых форматов бумаги для по умолчанию принтера.
Обратите внимание, что функция DeviceCapabilities является специфичной для Windows и может не работать на других платформах. Кроме того, формат возвращенных строк может варьироваться в зависимости от драйвера принтера и операционной системы.
Статья описывает процедуру GetPaperFormats, которая позволяет узнать все форматы бумаги, поддерживаемые принтером по умолчанию, и добавить их в список строк Memo.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.