Может ли мне кто-либо сказать, как с помощью TPrinter сделать
следующее?:
Замена исходного Paper Bin страницей. Создание отчета, который нужно
переключать между двумя бункерами (некоторым страницам отчета нужно работать с
другим бункером, например бланки писем и пр.).
Печать нескольких копий отчета. Для этого желательно использовать диалог
настройки принтера, но это, похоже, не работает.
То, что вы
собираетесь делать, возможно с помощью структуры 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);
endelsebegin
Printer.PrinterIndex := Printer.PrinterIndex;
{Этим мы пытаемся осуществить инициализацию}
Printer.GetPrinter(lpDevice, lpDriver, lpPort, Handle);
if Handle <> 0 thenbegin
FDevMode := Ptr(Handle, 0);
FDevice := StrPas(lpDevice);
FDriver := StrPas(lpDriver);
FPort := StrPas(lpPort);
endelsebegin
FDevMode := nil;
raise ECrpe.Create('Ошибка загрузки драйвера принтера');
end;
end;
finally
StrDispose(lpDevice);
StrDispose(lpDriver);
StrDispose(lpPort);
end;
end;
Как только вы получите указатель на структуру devmode, вы вправе делать
изменения любых полей. Говорят, могут быть проблемы при изменении лотков во
время печати, но сам я не пробовал менять эти поля в структуре DevMode.
Пример статьи о использовании класса TPrinter в Delphi для изменения параметров принтера и печати отчетов.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.