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

Как найти все форматы бумаги, поддерживаемые принтером

Delphi , ОС и Железо , Принтеры и Печать



Автор: http://www.swissdelphicenter.ch

uses
  Printers, WinSpool;

procedure GetPapernames(sl: TStrings);
type
  TPaperName = array[0..63] of Char;
  TPaperNameArray = array[1..High(Word) 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; // Standard printer
  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);
      sl.Clear;
      for i := 1 to numPaperformats do
        sl.Add(pPaperformats^[i]);
    finally
      FreeMem(pPaperformats);
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  GetPapernames(memo1.Lines);
end;

Перевод кода на русский язык:

Процедура GetPapernames Это процедура принимает параметр TStrings под именем sl, который будет использоваться для хранения списка форматов бумаги.

Продолжение: 1. Устанавливает свойство PrinterIndex объекта Printer в -1, что выбирает по умолчанию принтер. 2. Вызывает метод GetPrinter объекта Printer для получения информации о выбранном принтере, включая имя устройства (Device), имя драйвера (Driver), имя порта (Port) и.handle режима устройства (hDevMode). 3. Получает количество форматов бумаги, поддерживаемых принтером, с помощью функции DeviceCapabilities из библиотеки WinSpool. Функция принимает четыре параметра: имя устройства, имя порта, тип возможностей (в этом случае DC_ PAPERNAMES) и два необязательных буфера для хранения данных. 4. Если есть какие-либо форматы бумаги, поддерживаемые принтером, выделяет память для массива записей TPaperName с помощью GetMem. 5. Вызывает функцию DeviceCapabilities снова для получения списка форматов бумаги. В этот раз передает указатель на выделенную память (pPaperFormats) и устанавливает третий параметр в DC_ PAPERNAMES. 6. Итерирует по массиву форматов бумаги и добавляет каждый из них в объект TStrings, переданный как аргумент. 7. Наконец, освобождает выделенную память с помощью FreeMem.

Процедура Button1Click Это обработчик события клика кнопки на форме (TForm1). Когда кнопка кликается, она вызывает процедуру GetPapernames и передает строки в компоненте мемо (memo1) как аргумент. Процедура пополняет мемо списком форматов бумаги, поддерживаемых принтером.

Предложения по улучшению кода Вот несколько предложений для улучшения кода:

  • Рассмотрите использование более описательного имени переменной вместо sl. Например, paperFormatList.
  • В процедуре GetPapernames можно использовать блок try-finally, чтобы обеспечить освобождение выделенной памяти, даже если возникает исключение.
  • Может быть полезно добавить обработку ошибок для случаев, когда устройство принтера или порт не могут быть получены.
  • Вместо использования GetMem и FreeMem можно использовать умный указатель,such as TArray or TList, для управления массивом форматов бумаги.

В целом, этот код хорошо структурирован и легко понятен. С некоторыми минимальными улучшениями он может стать еще более robust и maintainable.

Статья рассказывает о том, как использовать программистский код на языке Delphi для обнаружения и вывода списка форматов бумаги, поддерживаемых принтером.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-01-28 06:21:08/0.0034270286560059/0