Двусторонняя печать

отредактировано 06:36 Раздел: FastReport 2.xx VCL
Доброго времени суток всем форумчанам!
Возможно обсуждалась данная тема в этой ветке, но я не смог найти ответ на свой вопрос. А именно: можно ли в версии 2.5 сделать вустороннюю печать отчета программно. Что бы пользователь не заходил в настройки диалога печати?

Комментарии

  • отредактировано 06:36
    Можно.
    Проверяем, возможна ли дуплексная печать у текущего принтера:
    function IsDuplexPrintSupported: 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;
    

    Затем устанавливаем дуплексной печати вертикальный либо горизонтальный в зависимости от ориентации страницы.
    Если портретная ориентация, значит вертикальный дуплексный режим:
    procedure SetVerticalDuplexPrintMode;
    begin
      SetDuplexPrintMode(DMDUP_VERTICAL)
    end;
    

    Если альбомная ориентация, горизонтальный дуплексный режим:
    procedure SetHorizontalDuplexPrintMode;
    begin
      SetDuplexPrintMode(DMDUP_HORIZONTAL)
    end;
    


    Вернуть одностороннюю печать:
    procedure SetSimplexDuplexPrintMode;
    begin
      SetDuplexPrintMode(DMDUP_SIMPLEX)
    end;
    
    procedure SetDuplexPrintMode(DuplexMode: SmallInt);
    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 := DuplexMode;
            dmFields := dmFields or DM_DUPLEX;
          end;
        finally
          // unlock devmode handle.
          GlobalUnlock(Devmode);
        end;
      end;
    end;
    

    Узнать текущий дуплексный режим:
    function GetDuplexPrintMode: Smallint;
    var
      Device, Driver, Port: array[0..80] of Char;
      DevMode: THandle;
      pDevmode: PDeviceMode;
    begin
      Result := DMDUP_SIMPLEX; //no duplex default
      Printer.GetPrinter(Device, Driver, Port, DevMode);
      if Devmode <> 0 then
      begin
        pDevMode := GlobalLock(Devmode);
        if pDevmode <> nil then
        try
          with pDevmode^ do
            Result := dmDuplex;
        finally
          GlobalUnlock(Devmode);
        end;
      end;
    end;
    

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.