Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
Может ли мне кто-либо сказать, как с помощью TPrinter сделать следующее?:
То, что вы собираетесь делать, возможно с помощью структуры TDevMode, получив к которой доступ, можно делать необходимые вам изменения. Структура TDevMode имеет все необходимые для настройки принтера поля и позволяет сделать любые настройки не обращаясь к диалогу настройки принтера.
Вот пример одного из моих компонентов, инкапсулирующий вышесказанную функциональность:
procedureTCrpePrinter.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); endelse
begin
Printer.PrinterIndex := Printer.PrinterIndex;
{Этим мы пытаемся осуществить инициализацию} Printer.GetPrinter(lpDevice, lpDriver, lpPort, Handle); ifHandle <> 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.