Принтер Принтер
Класс TPRINTER |
*
| *
|
| |
Delphi имеет стандартный объект для доступа к принтеру - TPRINTER,
находящийся в модуле PRINTERS. В этом модуле имеется переменная Printer:Tpinter, что
избавляет от необходимости описывать свою. Он позволяет выводить данные на печать и управлять
процессом печати. Правда, в некоторых версиях Delphi1 он имеет "глюк"
- не работают функции 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) - микроскопической.
© Зайцев Олег, "Программирование на Delphi - обмен опытом" 1999-2004. При использовании любых материалов данного сайта
необходимо указывать источник информации. Дата обновления: 22.11.2004. Сайт размещен на хостинге AGAVA -
Хостинг от AGAVA.ru