Delphi.Заметки программиста

       

Печать содержимого редактора как вывод


unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Button2: TButton; OpenDialog1: TOpenDialog; BitBtn1: TBitBtn; Button3: TButton; FontDialog1: TFontDialog; procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
uses
Printers; // Эта ссылка обязательна!
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
// Выбор файла с текстом и его загрузка в редактор begin
if OpenDialog1.Execute then
Memo1.Lines.LoadFromFile(OpenDialog1.FileName) end;
procedure TForm1.Button3Click(Sender: TObject);
// Выбор шрифта и связывание его с Memo1 begin
if FontDialog1.Execute then
Memo1.Font := FontDialog1.Font end;
procedure TForm1.Button2Click(Sender: TObject);
// Печать содержимого редактора как вывод в текстовый файл var
Prn: TextFile; k: Integer; begin
AssignPrn(Prn);
// Переназначаем вывод в файл на вывод в принтер Rewrite(Prn);
// Готовим принтер к печати (аналог BeginDoc) {Для печати используем такой же шрифт, как и для показа в редакторе:} Printer.Canvas.Font := Memo1.Font; // Цикл печати: for k := 0 to Memo1.Lines.Count-1 do
WriteLn(Prn, Memo1.Lines[k]);
CloseFile(Prn);
// Аналог EndDoc end;
end.
Описанный способ печати — самый примитивный: с его помощью невозможно вывести линии, разделяющие колонки или строки, трудно форматировать текст, вставлять заголовки, номера страниц и т.д.
Значительно более гибкие средства обеспечивает свойство Printer.Canvas. Покажем, как с его помощью можно напечатать текст, содержащийся в редакторе Memo1 (PrintText.dpr, листинг 12):

Содержание раздела