Советы по Delphi

       

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


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

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

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

procedure TCrpePrinter.GetCurrentPrinter;varlpDevice: PChar;lpDriver: PChar;lpPort: PChar;Handle: THandle;beginlpDevice := StrAlloc(255);lpDriver := StrAlloc(255);lpPort := StrAlloc(255);
tryPrinter.GetPrinter(lpDevice,lpDriver,lpPort,Handle);if Handle <> 0 then { если это не 0, то мы имеем указатель на структуру устройства}beginFDevMode := Ptr(Handle,0); {Получаем дескриптор структуры устройства}FDevice := StrPas(lpDevice);FDriver := StrPas(lpDriver);FPort := StrPas(lpPort);endelsebeginPrinter.PrinterIndex := Printer.PrinterIndex; {Этим мы пытаемся осуществить инициализацию}Printer.GetPrinter(lpDevice,lpDriver,lpPort,Handle);if Handle <> 0 thenbeginFDevMode := Ptr(Handle,0);FDevice := StrPas(lpDevice);FDriver := StrPas(lpDriver);FPort := StrPas(lpPort);endelsebeginFDevMode := nil;raise ECrpe.Create('Ошибка загрузки драйвера принтера');end;end;finallyStrDispose(lpDevice);StrDispose(lpDriver);StrDispose(lpPort);end;end;

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

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

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

- Jeff Fisher [000822]



Содержание раздела