Пример использования TPrinter

Советы » Принтеры и Печать » Пример использования TPrinter

Может ли мне кто-либо сказать, как с помощью TPrinter сделать следующее?:

  1. Замена исходного Paper Bin страницей. Создание отчета, который нужно переключать между двумя бункерами (некоторым страницам отчета нужно работать с другим бункером, например бланки писем и пр.).
  2. Печать нескольких копий отчета. Для этого желательно использовать диалог настройки принтера, но это, похоже, не работает.

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

Вот пример одного из моих компонентов, инкапсулирующий вышесказанную функциональность:

procedure

TCrpePrinter.GetCurrentPrinter; var

lpDevice: PChar; lpDriver: PChar; lpPort: PChar; Handle: THandle; begin

lpDevice := StrAlloc(255); lpDriver := StrAlloc(255); lpPort := StrAlloc(255); try

Printer.GetPrinter(lpDevice, lpDriver, lpPort, Handle); if

Handle <> 0 then

{ если это не 0, то мы имеем указатель на структуру устройства} begin

FDevMode := Ptr(Handle, 0); {Получаем дескриптор структуры устройства} FDevice := StrPas(lpDevice); FDriver := StrPas(lpDriver); FPort := StrPas(lpPort); end

else

begin

Printer.PrinterIndex := Printer.PrinterIndex; {Этим мы пытаемся осуществить инициализацию} Printer.GetPrinter(lpDevice, lpDriver, lpPort, Handle); if

Handle <> 0 then

begin

FDevMode := Ptr(Handle, 0); FDevice := StrPas(lpDevice); FDriver := StrPas(lpDriver); FPort := StrPas(lpPort); end

else

begin

FDevMode := nil

; raise

ECrpe.Create('Ошибка загрузки драйвера принтера'); end

; end

; finally

StrDispose(lpDevice); StrDispose(lpDriver); StrDispose(lpPort); end

; end

;

Изменение лотка и количества копий:

dmCopies := 2;
dmDefaultSource := 2;  {Нижний лоток}

Как только вы получите указатель на структуру devmode, вы вправе делать изменения любых полей. Говорят, могут быть проблемы при изменении лотков во время печати, но сам я не пробовал менять эти поля в структуре DevMode.

Другое по теме:

Категории

Статьи

Советы

Copyright © 2022 - All Rights Reserved - www.delphirus.com