Delphi 1
Пример использования TPrinter
Может ли мне кто-либо сказать, как с помощью TPrinter сделать следующее?:
То, что вы собираетесь делать, возможно с помощью структуры TDevMode, получив к которой доступ,
можно делать необходимые вам изменения.
Структура TDevMode имеет все необходимые для настройки принтера поля и позволяет
сделать любые настройки не обращаясь к диалогу настройки принтера.
- Замена исходного Paper Bin страницей. Создание отчета, который нужно переключать между двумя бункерами (некоторым страницам отчета нужно работать с другим бункером, например бланки писем и пр.).
- Печать нескольких копий отчета. Для этого желательно использовать диалог настройки принтера, но это, похоже, не работает.
Вот пример одного из моих компонентов, инкапсулирующий вышесказанную функциональность:
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.
- Jeff Fisher [000822]