Объект Printer автоматически создается, если в программе указана ссылка на модуль printers. Этот объект предоставляет программисту все необходимое для того, чтобы научить программу выводить данные на один из подключенных к ПК принтеров.
Вывод на принтер в Windows ничем не отличается от вывода на экран: в распоряжение программиста предоставляется свойство сап-vas объекта printer, содержащее набор чертежных инструментов и методы, свойственные классу TCanvas. Размер листа бумаги в пикселях принтера определяют свойства Height и Width, а набор принтерных шрифтов - свойство Fonts.
Свойства объекта printer: | property Aborted: Boolean; | Содержит True, если выполнение предыдущего задания на печать было досрочно прекращено | property Canvas: TCanvas; | Канва принтера - основной инструмент создания изображения на листе бумаги | type TPrinterCapability = (pcCopies, pcOrientation, pcCollation) ; TPrinterCapabilities = set of TPrinterCapability; property Capabilities: TPrinterCapabilities; | Содержит возможности текущей настройки драйвера принтера: pcCopies - может печататься несколько копий документа; pcOrientation - драйвер поддерживает разную ориентацию листа бумаги; pcCollation -документ печатается в подбор по экземплярам | property Copies: Integer; | Указывает требуемое количество копий документа | property Fonts: TStrings; | Содержит список всех доступных принтеру шрифтов | TPrinterOrientation = (poPortrait, poLandscape) ; property Orientation: TPrinterOrientation; | Определяет ориентацию листа бумаги: poPortrait вертикальная; poLandscape - горизонтальная | property PageHeight: Integer; | Содержит высоту листа бумаги в пикселях принтера | property PageNumber: Integers; | Содержит номер печатаемой страницы документа (начинается с 1) | property PageWidth: Integer; | Содержит ширину листа бумаги в пикселях принтера | property Printerlndex: Integer; | Содержит индекс умалчиваемого принтера в списке Printers | property Printers: TStrings; | Содержит список всех доступных принтеров | property Printing: Boolean; | Содержит True, если принтер занят печатью документа | property Title: String; | Содержит имя задания на печать | Методы объекта printer: | procedure Abort; | Досрочно прекращает печать документа | procedure BeginDoc; | Начинает печать документа | procedure EndDoc; | Завершает печать документа | procedure NewPage; | Начинает печать новой страницы документа |
Вот как, например, можно напечатать текст, содержащийся в редакторе Memo 1:
procedure TForm1.Button1Click(Sender: TObject); var Y,dY,k: Integer; begin if Memol.Lines.Count=0 then Exit; Screen.Cursor := crHourGlass; with Printer do begin BeginDoc; with Printer.Canvas do begin Font := Memol.Font; dY := TextHeight('1'); // Определяем высоту строки Y := 2*dY; // Отступ от верхнего края листа for k := 0 to Memol.Lines.Count-1 do begin //Выводим очередную строку TextOut(О,Y,Memol.Lines[k]); //Смещаемся на следующую строку листа inc(Y,dY) ; if PageHeight-Y<2*dY then // Нижний край листа? begin //Да NewPage; //Переход на новый лист // Выводим номер страницы TextOut(0,0,'с.'+IntToStr(PageNumber)) ; Y := 2*dY end; end; end; EndDoc; end; Screen.Cursor := crDefault; end;
Замечу, что до обращения к BeginDoc программа не имеет никаких сведений о принтере, и поэтому широко распространенной ошибкой будет объединение такого рода:
with Printer, Printer.Canvas do begin BeginDoc; Font.Size := 12; end;
В этом фрагменте шрифт принтера вряд ли окажется нужного размера, т. к. относится к умалчиваемой канве некоторого абстрактного принтера. Лишь после обращения к BeginDoc канва получит истинные представления о возможностях принтера и сможет правильно управлять его свойствами. Нужно так:
Printer.BeginDoc; //Обращаемся к драйверу принтера //и настраиваем нужным образом канву
with Printer.Canvas do begin Font.Size := 12; end;
Во многих случаях для печати документа гораздо проще использовать специальные компоненты, расположенные на странице QRe-port галереи компонентов Delphi. Эти компоненты разработаны для создания отчетов по материалам, хранящимся в базах данных, но могут с успехом использоваться и для печати обычных документов. Центральный компонент QuickRep имеет метод preview, с помощью которого можно просмотреть образ печатного документа и при желании напечатать документ.
Методику использования компонентов QReport поясню на следующем примере. Пусть на форме Form1 имеется текстовый редактор Memol, просмотр содержимого которого в виде образа печатного документа открывает нажатие кнопки Button1. Создайте в проекте новую пустую форму Form2 и положите на нее компонент QuickRepl.
На этот компонент положите QRBand1, а на него - QRMemo1. Напишите такой обработчик нажатия кнопки Button1:
procedure TFormI.ButtonlClick(Sender: TObject); begin with Form2 do begin //Копируем содержимое Memol в QRMemo1: QRMemoi.Lines.Assign(Memol.Lines); //Используем установленный в Memol шрифт: QRMemoi.Font := Memol.Font; //Вызываем окно просмотра и печати документа: QuickRepl.Preview end; end;
Окно просмотра образа печатного документа, появляющееся после щелчка по кнопке Buttoni, показано на рис. 20.1. Инструментальная кнопка В позволяет напечатать документ, а кнопка В - выбрать нужный принтер и настроить его параметры. При печати будут автоматически формироваться страницы документа, при необходимости они могут снабжаться заголовками, нумероваться и т. д.
Рис. 20.1. Окно просмотра печатного документа
8 8 8
| |