4.7.2 Печать с помощью объекта Printer

В Delphi имеется класс печатающих объектов TPrinter, который обеспечивает печать текстов, изображений и других объектов, расположенных на его канве — Canvas (см. разделы 3.2 и 4.2). На канве объекта типа TPrinter могут размещаться и тексты, и изображения.

Модуль Delphi, именуемый Printers, содержит переменную Printer, являющуюся объектом типа TPrinter. Эта переменная эквивалентна невизуальному компоненту, только отсутствующему в палитре библиотеки. Чтобы использовать Printer, надо добавить модуль Printers в оператор uses вашей программы. Автоматически он не добавляется.

Рассмотрим некоторые свойства и методы объекта типа TPrinter.
Свойство, методОписание
CanvasКанва Canvas — место в памяти, в котором формируется страница или документ перед печатью. Canvas обладает рядом свойств, включая Pen (перо) и Brush (кисть), которые позволяют вам делать рисунки и помещать на них текст. Подробное описание канвы и методов работы с ней вы найдете в разделе 4.2.
TextOutМетод канвы, который позволяет посылать в нее текст (см. раздел 3.2).
BeginDocИспользуется для начала задания печати.
EndDocИспользуется для окончания задания печати. Фактическая печать происходит только при вызове EndDoc.
PageHeightВозвращает высоту страницы в пикселях.
NewPageПринудительно начинает новую страницу на принтере.
PageNumberВозвращает текущий номер печатаемой страницы.

Предположим, вы хотите напечатать текст, используя печатающий объект. Вы можете написать код вида:

Printer.BeginDoc;
Printer.Canvas.ТехtOut(10, 10,
'Я печатаю через объект Printer');
Printer.EndDoc;

Этот код вызывает печать на канве принтера текста «Я печaтаю через объект Printer», начиная с десятого пикселя слева и десятого сверху. BeginDoc запускает задание на печать. Текст посылается на канву с помощью метода TextOut объекта Canvas. Метод EndDoc вызывает печать текста и останавливает задание на печать.

Если вы хотите напечатать изображение, хранящееся в компоненте Image1 (см. раздел 4.3), это можно сделать операторами:

Printer.BeginDoc;
with Image1.Picture.BitMap do
Printer.Canvas.CopyRect(Rect(0, 0, Height, Width),
Canvas, Rect(0, 0, Height, Width));
Printer.EndDoc;

При печати текста объект Printer не производит автоматического переноса строк и разбиения текста на страницы. Поэтому печать длинных текстов с помощью объекта Printer требует достаточно сложного программирования. Проще это делать, например, загрузкой текста в компонент RichEdit (см. раздел 3.3.4) и выполнением его метода Print (см. раздел 4.7.1). Другой возможный вариант — использование описанной в следующем разделе системы QuickReport.


к началу страницы