Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

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

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);

Для определения поддерживаемых форматов бумаги принтером можно использовать функцию DeviceCapabilities из модуля WinSpool в Delphi. Эта функция возвращает массив строк, представляющих доступные размеры бумаги.

Вот процедура, которую я предоставил:

procedure GetPaperFormats(aSL: TStringList);

Эта процедура принимает параметр TStringList и пополняет его списком поддерживаемых форматов бумаги для текущего выбранного принтера.

Работает она следующим образом:

  1. Она устанавливает свойство PrinterIndex в -1, что выбирает по умолчанию принтер.
  2. Она вызывает метод GetPrinter, чтобы получить информацию о выбранном принтере.
  3. Она использует функцию DeviceCapabilities, чтобы получить список поддерживаемых форматов бумаги. Константа DC_PAPERNAMES указывает, что мы хотим получить список имен бумаги (т.е., доступные размеры бумаги).
  4. Если функция DeviceCapabilities возвращает ненулевое значение, то это означает, что есть поддерживаемые форматы бумаги.
  5. Она выделяет память для массива строк с помощью процедуры GetMem и инициализирует его количеством поддерживаемых форматов бумаги.
  6. Она вызывает функцию DeviceCapabilities снова, чтобы получить список имен бумаги и хранит их в выделенной памяти.
  7. Она очищает входной TStringList и добавляет каждый формат бумаги в виде строки в список.

Вы можете использовать эту процедуру, вызвав ее с объектом TStringList, например:

GetPaperFormats(Memo1.Lines);

Это будет пополнять свойство Lines объекта Memo1 списком поддерживаемых форматов бумаги для по умолчанию принтера.

Обратите внимание, что функция DeviceCapabilities является специфичной для Windows и может не работать на других платформах. Кроме того, формат возвращенных строк может варьироваться в зависимости от драйвера принтера и операционной системы.

Статья описывает процедуру GetPaperFormats, которая позволяет узнать все форматы бумаги, поддерживаемые принтером по умолчанию, и добавить их в список строк Memo.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Принтеры и Печать ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 03:41:46/0.0033500194549561/0