В Delphi имеется класс печатающих объектов TPrinter, который обеспечивает печать текстов, изображений и других объектов, расположенных на его канве — Canvas (см. разделы и ). На канве объекта типа TPrinter могут размещаться и тексты, и изображения.
Модуль Delphi, именуемый Printers, содержит переменную Printer, являющуюся объектом типа TPrinter. Эта переменная эквивалентна невизуальному компоненту, только отсутствующему в палитре библиотеки. Чтобы использовать Printer, надо добавить модуль Printers в оператор uses вашей программы. Автоматически он не добавляется.
Рассмотрим некоторые свойства и методы объекта типа TPrinter.
Свойство, метод | Описание |
Canvas | Канва Canvas — место в памяти, в котором формируется страница или документ перед печатью. Canvas обладает рядом свойств, включая Pen (перо) и Brush (кисть), которые позволяют вам делать рисунки и помещать на них текст. Подробное описание канвы и методов работы с ней вы найдете в . |
TextOut | Метод канвы, который позволяет посылать в нее текст (см. ). |
BeginDoc | Используется для начала задания печати. |
EndDoc | Используется для окончания задания печати. Фактическая печать происходит только при вызове EndDoc. |
PageHeight | Возвращает высоту страницы в пикселях. |
NewPage | Принудительно начинает новую страницу на принтере. |
PageNumber | Возвращает текущий номер печатаемой страницы. |
Предположим, вы хотите напечатать текст, используя печатающий объект. Вы можете написать код вида: Printer.BeginDoc; Printer.Canvas.ТехtOut(10, 10, 'Я печатаю через объект Printer'); Printer.EndDoc;
Этот код вызывает печать на канве принтера текста «Я печaтаю через объект Printer», начиная с десятого пикселя слева и десятого сверху. BeginDoc запускает задание на печать. Текст посылается на канву с помощью метода TextOut объекта Canvas. Метод EndDoc вызывает печать текста и останавливает задание на печать.
Если вы хотите напечатать изображение, хранящееся в компоненте Image1 (см. ), это можно сделать операторами: 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 (см. ) и выполнением его метода Print (см. ). Другой возможный вариант — использование описанной в следующем разделе системы QuickReport.