Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Pascal и Delphi / Иллюстрированный самоучитель по Delphi 6 / Часть III. Компоненты и программы / Глобальные объекты и настройка программ /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Printer - Программирование от RIN.RU
Printer

Объект 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  Обсудить в чате

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь