Использование объекта 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.

 

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

Данный метод печати позволяет легко добавить в документ графику. Вы также можете добавить код для изменения ориентации страницы, размера шрифта, стилей и многого другого. Вы получаете эти дополнительные возможности без необходимости серьезного программирования. Достаточно просто указать печатающему объекту, что и как печатать.