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

Как получить настройки драйвера принтера для включения коллатирования в Windows

Delphi , Компоненты и Классы , TQuickReport

Как получить настройки драйвера принтера для включения коллатирования в Windows

В процессе программирования на Delphi или Pascal может возникнуть необходимость получить настройки драйвера принтера, в частности, узнать, включено ли коллатирование. Коллатирование – это процесс сортировки страниц в печатных документах для правильного их порядка на выходе. В данной статье мы рассмотрим, как получить настройки драйвера принтера и определить, включено ли коллатирование, используя Windows API.

Проблема

Разработчик столкнулся с проблемой, когда программное обеспечение, написанное на Delphi XE2, не соблюдало настройки коллатирования в драйвере принтера, в отличие от версии, созданной в Delphi 6. Пользователям не разрешено менять настройки коллатирования, так как они принудительно установлены системными администраторами. Требуется найти способ определить, включено ли коллатирование в драйвере принтера, чтобы можно было принудительно установить настройки в QuickReport и добиться правильного коллатирования документов на указанном принтере.

Решение

Для получения настроек драйвера принтера и определения, включено ли коллатирование, можно воспользоваться функциями Windows API OpenPrinter и GetPrinter. При вызове функции GetPrinter передайте запись PRINTER_INFO_2, которая будет возвращена с членом pDevMode, установленным в запись DEVMODE. В этой записи DEVMODE есть флаг, указывающий, включено ли коллатирование.

Ниже приведен пример кода на Object Pascal (Delphi), демонстрирующий обновление настроек принтера для их сохранения, но включающий использование OpenPrinter, GetPrinter, ClosePrinter и PRINTER_INFO_2, а также использование записи DEVMODE (обозначаемой как hDevMode в коде ниже). Этот пример поможет вам начать работу с получением настроек драйвера принтера:

procedure MakePrintersettingsPermanent;
var
  hPrinter: THandle;
  Device: array[0..255] of char;
  Driver: array[0..255] of char;
  Port: array[0..255] of char;
  hDeviceMode: THandle;
  pDevMode: PDeviceMode;
  bytesNeeded: Cardinal;
  pPI: PPrinterInfo2;
  Defaults: TPrinterDefaults;
  retval: BOOL;
begin
  Assert(Printer.PrinterIndex >= 0);
  Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
  FillChar(Defaults, SizeOf(Defaults), 0);
  Defaults.DesiredAccess := PRINTER_ACCESS_ADMINISTER or PRINTER_ACCESS_USE;
  if not WinSpool.OpenPrinter(@Device, hPrinter, @Defaults) then
    RaiseLastWin32Error;
  try
    retval := WinSpool.GetPrinter(
      hPrinter,
      2,
      Nil, 0, @bytesNeeded);
    GetMem(pPI, bytesNeeded);
    try
      retval := WinSpool.GetPrinter(
        hPrinter, 2,
        pPI, bytesNeeded, @bytesNeeded);
      If not retval then
        RaiseLastWin32Error;

      pDevMode := GlobalLock(hDeviceMode);
      Assert(Assigned(pDevMode));
      try
        Move(pDevMode^, pPI^.pDevMode^, SizeOf(pDevMode^));
      finally
        GlobalUnlock(hDeviceMode);
      end;
      If not WinSpool.SetPrinter(
        hPrinter, 2,
        pPI,
        0) Then
        RaiseLastWin32Error;
    finally
      FreeMem(pPI);
    end;
  finally
    WinSpool.ClosePrinter(hPrinter);
  end;
end;

Чтобы определить, включено ли коллатирование, проверьте значение поля dmCollate в записи pPI.pDevMode. Если это значение равно TRUE, то коллатирование включено.

Альтернативный ответ

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

Заключение

В данной статье мы рассмотрели, как получить настройки драйвера принтера и определить, включено ли коллатирование, используя функции Windows API OpenPrinter и GetPrinter. Пример кода на Object Pascal (Delphi) демонстрирует, как работать с этими функциями и получать записи DEVMODE, содержащие информацию о настройках коллатирования. Знание этих функций поможет разработчикам программного обеспечения на Delphi и Pascal правильно обрабатывать настройки коллатирования в драйверах принтеров.

Создано по материалам из источника по ссылке.

Данный текст описывает процесс получения настроек драйвера принтера и определения, включено ли коллатирование, используя функции Windows API в программировании на Delphi или Pascal.


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

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




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


:: Главная :: TQuickReport ::


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:23:22/0.003896951675415/0