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

Форматы бумаги

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

Форматы бумаги

Пользователь приходит и говорит программисту:
- Мне информацию в электронном виде надо. Ну, на дискете чтоб.
- А в каком формате?
- Как в каком? Ясно в каком - в A4.

Вот пример, выводящий список форматов бумаги для принтера, установленного по умолчанию:


procedure TForm1.Button2Click(Sender: TObject);
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);
      memo1.clear;
      for i := 1 to numPaperformats do
        memo1.lines.add(pPaperformats^[i]);
    finally
      FreeMem(pPaperformats);
    end;
  end;
end;

Переведенный текст:

Код - процедура в Delphi, которая получает список форматов бумаги для печати на умолчанию установленном принтере на системе. Вывод отображается в контроле memo (memo1).

Разбивка кода:

  1. Инициализирует некоторые переменные:

    • Device, Driver и Port - массивы для хранения информации о устройстве, драйвере и порте принтера.
    • hDevMode -.handle к структуре устройства режима.
    • numPaperformats - целочисленная переменная для хранения количества форматов бумаги доступных для печати.
    • pPaperFormats - указатель на массив TPaperName (массив из 64 символов), который будет использоваться для хранения списка форматов бумаги.
  2. Устанавливает индекс принтера в -1, что означает использование умолчательного принтера. Затем вызывает GetPrinter для получения структуры устройства режима для умолчательного принтера.

  3. Вызывает WinSpool.DeviceCapabilities с значением DC_PAPERNAMES, чтобы получить количество форматов бумаги доступных для печати на этом принтере.

  4. Если есть более 0 форматов бумаги доступных, выделяет память для массива TPaperName используя GetMem.

  5. Вызывает WinSpool.DeviceCapabilities снова с значением DC_PAPERNAMES и выделенной памятью, чтобы получить список форматов бумаги.

  6. Наконец, освобождает выделенную память используя FreeMem, очищает контрол memo (memo1) и добавляет каждый формат бумаги из массива к строкам контрола memo.

Возможные улучшения:

  • Вместо жесткого кодирования индекса принтера в -1, рассмотрите возможность позволить пользователю выбрать принтер или получить список доступных принтеров.
  • Вы можете улучшить обработку ошибок, проверяя ошибки, возвращаемые WinSpool.DeviceCapabilities и другими системными вызовами.
  • Рассмотрите добавление более функциональности процедуры, например, позволение пользователю фильтровать форматы бумаги по определенным критериям (например, только показать форматы A4).
  • Код использует контрол memo для отображения результатов. Вам может быть полезно использовать более robust UI-контрол, например, список или дерево, в зависимости от требований.

Альтернативное решение: вы можете использовать компонент TPrinter Delphi и его методы, такие как PaperNames, чтобы получить список форматов бумаги доступных для печати. Это может быть проще и более поддерживаемым, чем использование вызовов Windows API напрямую.

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


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

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




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


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


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:59:01/0.0055971145629883/1