|
|
|
|
Работа
с принтером.
Delphi имеет стандартный объект для доступа к принтеру -
TPRINTER, находящийся в модуле PRINTERS. В этом модуле имеется переменная
Printer:Tpinter, что избавляет от необходимости описывать свою. Он позволяет
выводить данные на печать и управлять процессом печати. Правда, в некоторых
версиях Delphi 1 он имеет "глюк" - не работают функции Draw и StrethDraw. Но
эта проблема поправима - можно использовать функции API. Далее приведены
основные поля и методы объекта Printers
: PROPERTY Aborted:boolean - Показывает, что процесс печати
прерван Canvas:Tcanvas - Стандартный Canvas, как у любого графического
объекта. Он позволяет рисовать на листе бумаге графику, выводить текст ... .
Тут есть несколько особенностей, они описаны после описания
объекта. Fonts:Tstrings - Возвращает список шрифтов, поддерживаемых
принтером Handle:HDS - Получить Handle на принтер для использования
функций API (см. Далее) Orientation:TprinterOrientation - Ориентация
листа при печати : (poPortrait, poLandscape) PageHeight:integer - Высота
листа в пикселах PageNumber:integer - Номер страницы, увеличивается на 1
при каждом NewPage PageWidth:integer - Ширина листа в
пикселах PrinterIndex:integer - Номер используемого принтера по списку
доступных принтеров Printers Printers:Tstrings - Список доступных
принтеров Printing:boolean - Флаг, показывающий, что сейчас идет процесс
печати Title:string - Имя документа или приложения. Под этим именем
задание на печать регистрируется в диспетчере
печати
METODS AssignPrn(f:TextFile) - Связать текстовый
файл с принтером. Далее вывод информации в этот файл приводит к ее
печати. Удобно в простейших случаях. Abort - Сбросить печать BeginDoc
- Начать печать NewPage - Начать новую страницу EndDoc - Завершить
печать.
Пример :
Procedure TForm1.Button1Click(Sender: TObject); Begin With Printer do Begin BeginDoc; { Начало печати } Canvas.Font:=label1.font; { Задали шрифт } Canvas.TextOut(100,100,'Это тест принтера !!!'); { Печатаем текст } EndDoc; { Конец печати } end; end;
Особенности работы с TPrinter
1. После команды BeginDoc шрифт у Canvas принтера
сбрасывается и его необходимо задавать заново 2. Все координаты даны в
пикселах, а для нормальной работы необходимы миллиметры (по двум очевидным
причинам: очень трудно произвести разметку страницы в пикселах (особенно
если необходима точность), и , главное, при изменении разрешающей
способности принтера будет изменяться число точек на дюйм, и все координаты
"поедут". 3. У TPrinter информация о принтере, по видимому, определяются
один раз - в момент запуска программы (или смены принтера). Поэтому
изменение настроек принтера в процессе работы программы может привести к
некорректной работе, например, неправильной печать шрифтов True
Type. Определение параметров принтера через API Для определения
информации о принтере (плоттере, экране) необходимо знать Handle этого
принтера, а его можно узнать объекта TPrinter - Printer.Handle. Далее
вызывается функция API (unit WinProcs) : GetDevice(Handle:HDC;
Index:integer):integer; Index - код параметра, который необходимо
вернуть. Для Index существует ряд констант : DriverVersion - вернуть
версию драйвера Texnology - Технология вывода, их много,
основные dt_Plotter - плоттер dt_RasPrinter - растровый
принтер dt_Display - дисплей HorzSize - Горизонтальный размер
листа (в мм) VertSize - Вертикальный размер листа (в мм) HorzRes -
Горизонтальный размер листа (в пикселах) VertRes - Вертикальный размер
листа (в пикселах) LogPixelX - Разрешение по оси Х в dpi (пиксел
/дюйм) LogPixelY - Разрешение по оси Y в dpi (пиксел /дюйм) Кроме
перечисленных еще около сотни, они позволяют узнать о принтере практически
все. Параметры, возвращаемые по LogPixelX и LogPixelY очень важны - они
позволяют произвести пересчет координат из миллиметров в пиксели для
текущего разрешения принтера. Пример таких функций:
Procedure TForm1.GetPrinterInfo; { Получить информацию о принтере } begin PixelsX:=GetDeviceCaps(printer.Handle,LogPixelsX); PixelsY:=GetDeviceCaps(printer.Handle,LogPixelsY); end;
Function TForm1.PrinterCoordX(x:integer):integer; { переводит координаты из мм в пиксели } begin PrinterCoordX:=round(PixelsX/25.4*x); end;
Function TForm1.PrinterCoordY(Y:integer):integer; { переводит координаты из мм в пиксели } begin PrinterCoordY:=round(PixelsY/25.4*Y); end; --------------------------------- GetPrinterInfo; Printer.Canvas.TextOut(PrinterCoordX(30), PrinterCoordY(55), 'Этот текст печатается с отступом 30 мм от левого края и '+ '55 мм от верха при любом разрешении принтера');
Данную
методику можно с успехом применять для печати картинок - зная размер
картинки можно пересчитать ее размеры в пикселах для текущего разрешения
принтера, масштабировать, и затем уже распечатать. Иначе на матричном
принтере (180 dpi) картинка будет огромной, а на качественном струйнике (720
dpi) - микроскопической.
|
Copyright ©
"Мастера DELPHI" E-mail:
delphi@mastak.com
http://www.delphimaster.ru |
Источник получения информации: http://www.delphimaster.ru
|
|