В этой статье я постараюсь рассказать Вам о самых удобных и
распространенных способах печати текстов и изображений из Ваших приложений.
Печать используется в приложениях не так часто, вот и возникают различные
вопросы по этому поводу. Иногда бывает необходимо "вывести на принтер" график
получившейся функции или отчет о деятельности фирмы и т.д. Прочитав эту статью
Вы освоите все самое необходимое для печати данных из Ваших приложений.Итак, начнем рассмотрение этих способов.
Печать с помощью функций файлового ввода/вывода
Здесь мы будем использовать простейшие функции ввода/вывода в
файл, только свяжем выходной поток не с файлом, а с принтером. Рассмотрим пример
печати текста, содержащегося в компоненте TEdit:
var P:TextFile;
begin
AssignPrn(P);
Rewrite(P);
Writeln(P, Edit1.text);
CloseFile(P);
End;
Здесь мы объявляем переменную P типа TextFile. Процедура AssignPrn является
разновидностью процедуры Assign. Она настраивает переменную P на порт принтера и
позволяет работать с ним как с файлом. Rewrite открывает порт для работы, а
WriteLn - выводит информацию на печать. Важно закрыть порт принтера командой
CloseFile!!!
Этот способ можно использовать для распечатки строк списка или каких-нибудь
других данных, по мере их поступления в программу.
Печать текстов в обогащенном формате методом Print
Если Вы пытались попробовать распечатать тексты из Вашего приложения, то ,
наверно, Вам известно, что компонент TRichEdit имеет метод Print, позволяющий
печатать текст, хранящийся в этом компоненте. Этот метод имеет только один
параметр - строку, которая при просмотре в Windows очереди печатаемых заданий
является именем задания. Приведу пример использования (хотя он очевиден :)
RichEdit1.Print('Print of our RichEdit1');
Следует заметить, что печать воспроизводит все особенности форматирования
текста, так же происходит автоматический перенос строк и разбиение текста на
страницы. При этом длина строк ни как не связана с размерами компонента
RichEdit.
Печать с помощью объекта Printer
В Дельфи имеется класс печатающих объектов TPprinter, который обеспечивает
печать текстов, изображений и других объектов, расположенных на его канве
(Canvas).
Модуль Дельфи Printers, содержит переменную Printer, которая является
объектов типа TPrinter. Поэтому для использования этой переменной в Ваших
программах, надо подключить модуль Printers в оператор Uses (к сожалению
автоматически этого не делается)
Рассмотрим подробнее некоторые свойства и методы объекта TPrinter:
| Свойство, метод |
Описание |
| Canvas |
Канва - место в памяти, в котором формируется страница или
документ перед печатью. |
| TextOut |
Метод канвы, позволяющий посылать в нее текст |
| BeginDoc |
Используется для начала задания печати |
| EndDoc |
Используется для завершения задания печати. При этом печать
начинается только после вызова этого метода! |
| PageHeight |
Возвращает высоту страницы в пикселах |
| NewPage |
Принудительно начинает новую страницу |
| PageNumber |
Возвращает номер печатаемой страницы |
Приведу два примера печати с помощью объекта TPrinter текста и
изображения.
Печать текста можно осуществить
так:
Printer.BeginDoc;
Printer.Canvas.TextOut(10,10,'Печатаем с
помощью объекта Printer');
Printer.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 есть существенный
недостаток: он не производит автоматическое разбиение на строки и страницы,
поэтому печатать длинные тексты предпочтительнее с помощью компонента RichEdit
или Memo.
Печать форм
У форм в Delphi есть метод Print, который печатает всю клиентскую область
формы. При этом полоса заголовка и полоса главного меню формы не печатаются.
Свойство PrintScale определяет опции масштабирования изображения формы при
печати:
| poNone |
Масштабирование не используется. Размер изображения может
изменяться в зависимости от используемого принтера |
| poPrintToFit |
Делается попытка напечатать изображение формы того же размера,
который виден на экране |
| poProportional |
Увеличивает или уменьшает размер изображения, подгоняя его под
размер страницы. |
На этом мы заканчиваем обзор способов печати данных из Ваших приложений.
Надеюсь, что еще одним вопросом у Вас стало меньше :))