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

Перевести принтер в режим Duplex

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

Перевести принтер в режим Duplex

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
You typically switch a printer to duplex mode by changing its 
TDeviceMode(API: DEVMODE)record .But first you should test whether 
the installed printer driver supports this: 
}
 uses
   printers, winspool;

 function PrinterSupportsDuplex: Boolean;
 var
   Device, Driver, Port: array[0..255] of Char;
   hDevMode: THandle;
 begin
   Printer.GetPrinter(Device, Driver, Port, hDevmode);
   Result :=
     WinSpool.DeviceCapabilities(Device, Port, DC_DUPLEX, nil, nil) <>
     0;
 end;

 {if it does you can try to switch the duplex mode on before you call 
 richedit.print:}


 var
   Device, Driver, Port: array[0..80] of Char;
   DevMode: THandle;
   pDevmode: PDeviceMode;
   begin
      // Get printer device mode handle. 
    Printer.GetPrinter(Device, Driver, Port, DevMode);
     if Devmode <> 0 then begin
        // lock it to get pointer to DEVMODE record 
      pDevMode := GlobalLock(Devmode);
       if pDevmode <> nil then
       try
         with pDevmode^ do begin
           dmDuplex := DMDUP_VERTICAL;
           dmFields := dmFields or DM_DUPLEX;
         end;
       finally
         // unlock devmode handle. 
        GlobalUnlock(Devmode);
       end;
     end; { If }
   end;

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

Это фрагмент кода на Delphi, демонстрирующий, как переключить принтер в режим двустороннего печати с помощью записи TDeviceMode и библиотеки WinSpool. Вот разбивка того, что код делает:

  1. Первая функция PrinterSupportsDuplex проверяет, поддерживает ли установленный драйвер принтера двустороннюю печать. Она делает это, вызывая WinSpool.DeviceCapabilities с именем устройства, портом и флагом DC_ DUPLEX. Если результат не равен нулю, то это означает, что драйвер принтера поддерживает двустороннюю печать.
  2. Вторая часть кода пытается включить режим двусторонней печати перед вызовом RichEdit.Print. Она делает это следующим образом:
    • Получает handle устройства принтера с помощью Printer.GetPrinter.
    • Закрывает handle устройства принтера с помощью GlobalLock, чтобы получить указатель на запись TDeviceMode.
    • Обновляет поле dmDuplex записи TDeviceMode до DMDUP_VERTICAL, что означает вертикальную двустороннюю печать.
    • Устанавливает поле dmFields записи TDeviceMode включить флаг DM_ DUPLEX, который разрешает двустороннюю печать.
    • Открывает handle устройства принтера с помощью GlobalUnlock.
  3. Замечание: код предполагает, что драйвер принтера поддерживает двустороннюю печать и что метод RichEdit.Print будет использовать обновленные настройки режима устройства.

Альтернативное решение:

Вместо блокировки и разблокировки handle устройства принтера можно использовать объект TPrinterDeviceMode, чтобы включить режим двусторонней печати. Вот пример:

uses
  printers, winspool;

procedure SetDuplexPrinter;
var
  Printer: TPrinter;
begin
  Printer := TPrinter.Create;
  try
    Printer.DeviceMode.DmDuplex := dmDUP_VERTICAL;
    Printer.DeviceMode.dmFields := Printer.DeviceMode.dmFields or DM_DUPLEX;
    Printer.Print;
  finally
    Printer.Free;
  end;
end;

Код создает объект TPrinter, включает режим двусторонней печати с помощью его свойства DeviceMode и затем вызывает метод Print. Замечание: это подход более простой и эффективный, чем оригинальный код.

Также стоит отметить, что метод RichEdit.Print может не использовать обновленные настройки режима устройства, если драйвер принтера не поддерживает двустороннюю печать. В таких случаях вам нужно проверять возможности драйвера перед попыткой печати в режиме двусторонней печати.

Программисты могут изменить принтер в режим двойного печатания (Duplex) с помощью изменения записи TDeviceMode (DEVMODE) и тестирования поддержки этого режима установленным драйвером принтера.


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

Получайте свежие новости и обновления по 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:40:20/0.0033810138702393/0