Использование объекта Tprinter
Для использования объекта TPrinter, необходимо изучить его свойства и методы. Ниже приведены основные из них.
Свойство, метод | Описание |
Canvas | Объявляется как экземпляр объекта TCanvas. Canvas - место в памяти, в котором формируется страница или документ перед печатью. Canvas обладает рядом свойств, включая Pen (перо) и Brush (кисть), которые позволяют вам делать рисунки и помещать на них текст. |
TextOut | Метод объекта Tcanvas, который позволяет посылать текст в Canvas. |
BeginDoc | Используется для начала задания печати. |
EndDoc | Используется для окончания задания печати. Фактическая печать не происходит, пока не вызван EndDoc. |
PageHeight | Возвращает высоту страницы в пикселах. |
NewPage | Принудительно начинает новую страницу на принтере и сбрасывает значение свойства Pen объекта Canvas в ( 0, 0). |
PageNumber | Возвращает текущий номер печатаемой страницы. |
Для того чтобы напечатать текст, используя печатающий
объект, достаточно написать код:
Printer.BeginDoc
Printer.Canvas.TextOut(10,10, 'Я печатаю через объект
Printer');
Printer.EndDoc;
Этот код вызывает печать на канве текста 'Я печатаю через объект Printer', начиная с десятого пиксела слева и десятого сверху. BeginDoc запускает задание на печать. Текст посылается на канву с помощью метода TextOut объекта Canvas. EndDoc вызывает печать текста и останавливает задание на печать.
Эти свойства и методы - только поверхностный слой того, что в действительности доступно. Но и их достаточно для создания программы печати файлов с помощью печатающего объекта. Загрузите проект File2Prn.dpr и сохраните его повторно под именем File2Pob.dpr. Сохраните повторно модуль под именем FilePob.pas. Отредактируйте код, соответствующий нажатию кнопки "Печать" - в нашем случае это Button2. Пусть программа читает файл построчно, как и ранее, но теперь пусть она вычисляет позицию на канве, куда должен быть послан текст, и помещает его там.
Листинг 9.2 показывает такую отредактированную программу печати файлов. Комментарии в ней помогут понять этот код. Если вы сделали копию старого файла под именем FileObj.pas, модифицируйте код кнопки "Печать" (Button2) так, чтобы он соответствовал листингу 9.2. Вы можете изменить свойство формы Caption, чтобы в заголовке программы стояло: "Печать текстового файла объектом TPrinter".
Листинг 9.2. Печать текстового файла с использованием объекта Tprinter
_________
Unit FilepObj;
Interface
Uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Printers;
type
Tform1 = class (TForm)
Button1: TButton;
OpenDialog1: TOpenDialog;
Button2: TButton;
Label1: TLabel;
Procedure Button1Click(Sender: TObject);
Procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: Tform1;
Implementation
{$R *.DFM}
Var
Fname : String;
Procedure Tform1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
Fname : OpenDialog1.FileName;
Label1.Caption := 'Готов к печати' + Fname;
end;
end;
Procedure Tform1.Button2Click(Sender: TObject);
Var
F : TextFile;
TempStr, PageNum : String;
Ctr, x, PHeight, LineSpace: Integer;
begin
Ctr := 1;
{Открытие текстового файла, который надо печатать}
AssignFile(F, Fname);
Reset;
{ Начало печати}
Printer.BeginDoc;
{ Извлечение высоты страницы}
Pheight := Printer.PageHeight;
{ Вычисление расстояний между строками исходя из 60 строк на странице}
LineSpace := PHeight Div 60;
{ Извлечение номера текущей печатаемой страницы}
PageNum := IntToStr(Printer.PageNumber);
{ Обновление метки с номером текущей страницы}
Label1.Caption := 'Теперь печатается '+ Fname + ' Страница'
+ PageNum;
While Not Eof(F) Do
begin
{ Чтение строки текста из файла в TempStr}
Readln(F, TempStr);
{ Содержимое TempStr посылается на принтер}
Printer.Canvas.TextOut(0, x, TempStr);
{ Увеличение x на соответствующее число пикселей
для печати следующей строки}
x := x+LineSpace ;
{ Подсчет числа напечатанных строк}
Ctr := Ctr + 1;
{ Если напечатано 60 строк, то начало новой страницы,
извлечение номера страницы и сброс счетчиков}
If Ctr > 59 then
begin
Printer.NewPage;
X := 0;
Ctr := 0;
PageNum := IntToStr(Printer.PageNumber);
Label1.Caption := 'Теперь печатается '+ Fname +
' Страница ' + PageNum;
end;
end;
( Закрытие текстового файла и запуск вывода текста на принтер}
CloseFile(F);
Printer.EndDoc;
Labell.Caption := 'Печать закончена!' + ' Число страниц = '+ PageNum;
end;
end.
Программа ведет себя во многом так же, как и предыдущая, за исключением того, что теперь она печатает через печатающий объект. Есть также несколько изменений в сообщениях о состоянии. Убедитесь в том, что сохранили свою работу, прежде чем станете испытывать новую версию печати текстового файла.
Данный метод печати позволяет легко добавить в документ графику. Вы также можете добавить код для изменения ориентации страницы, размера шрифта, стилей и многого другого. Вы получаете эти дополнительные возможности без необходимости серьезного программирования. Достаточно просто указать печатающему объекту, что и как печатать.