Delphi вывод на печать

Содержание

Обзор

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

  • Печать в текстовом режиме
  • Если Вам нужно напечатать на принтере документ в текстовом режиме, то это делается следующим образом. С принтером Вы работаете, как с обычным текстовым файлом, за исключением того, что вместо процедуры AssignFile нужно вызывать процедуру AssignPrn. В примере на принтер выводится одна строка текста :

    procedure TForm1.Button1Click(Sender: TObject);
    var
    To_Prn : TextFile;
    begin
    AssignPrn(To_Prn);
    Rewrite(To_Prn);
    Writeln(To_Prn, ‘Printer in Text Mode’);
    CloseFile(To_Prn);
    end;

    Здесь необходимо, видимо, пояснить, что по сравнению с BP 7.0 в Delphi изменены названия некоторых функций и переменных в модуле System :

      • AssignFile вместо Assign
      • CloseFile вместо Close
      • TextFile вместо Text
          1. Вывод содержимого формы на печать

          Иногда в программе требуется просто получить твердую копию экранной формы. В Delphi это делается более, чем просто – у объекта TForm есть метод Print , который и нужно вызвать в нужный момент.

        1. Графическая печать (объект TPrinter )
        2. И все же, более интересно, как из программы созданной в Delphi можно вывести на печать графическую информацию. Для этого есть специальный объект Printer ( класса TPrinter). Он становится доступен, если к программе подключить модуль Printers ( т.е. добавить имя модуля в разделе uses) . С помощью этого объекта печать на принтере графической информации становится не сложнее вывода этой информации на экран. Основным является то, что Printer предоставляет разработчику свойство Canvas ( работа с канвой описана в предыдущем уроке) и методы, выводящие содержание канвы на принтер. Рассмотрим подробнее свойства и методы объекта Printer.

          Свойства Printer: Aborted – тип булевский ; показывает, прервал ли пользователь работу принтера методом Abort.

          Canvas канва, место для вывода графики ; работа с Canvas описана в Уроке 5.

          Fonts – список доступных шрифтов.

          Handle используется при прямых вызовах Windows API.

          Orientation – ориентация страницы, вертикально или горизонтально.

          PageWidth , PageHeight, PageNumber соответственно ширина, высота и номер страницы.

          Printers перечисляет все установленные в системе принтеры, а

          PrinterIndex указывает, какой из них является текущим. Чтобы печатать на принтере по умолчанию здесь должно быть значение -1.

          Читайте также:  Amd radeon r6 m340dx драйверы

          Printing тип булевский ; показывает, начата ли печать (методом BeginDoc ).

          Title заголовок для Print Manager и для заголовка перед выводом на сетевом принтере.

          Abort – прерывает печать, начатую методом BeginDoc BeginDoc вызывается перед тем, как начать рисовать на канве.

          EndDoc вызывается когда все необходимое уже нарисовано на канве, принтер начинает печатать именно после этого метода.

          NewPage переход на новую страницу. Остальными методами объекта в обычных случаях пользоваться не нужно.

          Итак, начнем рассмотрение этих способов.

          Печать с помощью функций файлового ввода/вывода

          Здесь мы будем использовать простейшие функции ввода/вывода в файл, только свяжем выходной поток не с файлом, а с принтером. Рассмотрим пример печати текста, содержащегося в компоненте TEdit:

          var P:TextFile;
          begin
          AssignPrn(P);
          Rewrite(P);
          Writeln(P, Edit1.text);
          CloseFile(P);
          End;

          Здесь мы объявляем переменную P типа TextFile. Процедура AssignPrn является разновидностью процедуры Assign. Она настраивает переменную P на порт принтера и позволяет работать с ним как с файлом. Rewrite открывает порт для работы, а WriteLn – выводит информацию на печать. Важно закрыть порт принтера командой CloseFile.

          Этот способ можно использовать для распечатки строк списка или каких-нибудь других данных, по мере их поступления в программу.

          Печать текстов в обогащенном формате методом Print

          Если Вы пытались попробовать распечатать тексты из Вашего приложения, то , наверно, Вам известно, что компонент TRichEdit имеет метод Print, позволяющий печатать текст, хранящийся в этом компоненте. Этот метод имеет только один параметр – строку, которая при просмотре в Windows очереди печатаемых заданий является именем задания. Приведу пример использования (хотя он очевиден 🙂

          RichEdit1.Print(‘Print of our RichEdit1’);

          Следует заметить, что печать воспроизводит все особенности форматирования текста, так же происходит автоматический перенос строк и разбиение текста на страницы. При этом длина строк ни как не связана с размерами компонента RichEdit.

          Печать с помощью объекта Printer

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

          Модуль Дельфи Printers, содержит переменную Printer, которая является объектов типа TPrinter. Поэтому для использования этой переменной в Ваших программах, надо подключить модуль Printers в оператор Uses (к сожалению автоматически этого не делается)

          Рассмотрим подробнее некоторые свойства и методы объекта TPrinter:

          Свойство, метод Описание
          Canvas Канва – место в памяти, в котором формируется страница или документ перед печатью.
          TextOut Метод канвы, позволяющий посылать в нее текст
          BeginDoc Используется для начала задания печати
          EndDoc Используется для завершения задания печати. При этом печать начинается только после вызова этого метода!
          PageHeight Возвращает высоту страницы в пикселах
          NewPage Принудительно начинает новую страницу
          PageNumber Возвращает номер печатаемой страницы
          Читайте также:  Игры драки на прохождение на пк

          Приведу два примера печати с помощью объекта TPrinter текста и изображения.

          Печать текста можно осуществить так:

          Printer.BeginDoc;
          Printer.Canvas.TextOut(10,10,’Печатаем с помощью объекта Printer’);
          Printer.EndDoc;

          Если Вы хотите напечатать изображение, находящееся, например, в компоненте Image1, то код может быть таким: Printer.BeginDoc;
          with Image1.Picture.Bitmap do Printer.Canvas.CopyRect(Rect(0,0,Height,Width),Canvas,Rect(0,0,Height,Width));
          Printer.EndDoc;

          Казалось и бы и здесь все просто, но у объекта Printer есть существенный недостаток: он не производит автоматическое разбиение на строки и страницы, поэтому печатать длинные тексты предпочтительнее с помощью компонента RichEdit или Memo.

          Печать форм

          У форм в Delphi есть метод Print, который печатает всю клиентскую область формы. При этом полоса заголовка и полоса главного меню формы не печатаются.

          Свойство PrintScale определяет опции масштабирования изображения формы при печати:

          poNone Масштабирование не используется. Размер изображения может изменяться в зависимости от используемого принтера
          poPrintToFit Делается попытка напечатать изображение формы того же размера, который виден на экране
          poProportional Увеличивает или уменьшает размер изображения, подгоняя его под размер страницы.

          На этом мы заканчиваем обзор способов печати данных из Ваших приложений. Надеюсь, что еще одним вопросом у Вас стало меньше :))

          Урок 6: Печать текстовая и графическая


            Содержание урока 6:
            Обзор
            Печать в текстовом режиме
            Вывод содержимого формы на печать
            Графическая печать (объект TPrinter)
            Пример ex06.zip

          В данной статье рассказывается о возможных способах вывода информации на печать из программы, созданной в Delphi. Рассматривается вывод документа в текстовом режиме принтера, вывод графики с помощью объекта TPrinter и печать содержимого формы. О выводе на печать отчетов с помощью генератора отчетов ReportSmith рассказывается ниже.

        3. Печать в текстовом режиме
        4. Если Вам нужно напечатать на принтере документ в текстовом режиме, то это делается следующим образом. С принтером Вы работаете, как с обычным текстовым файлом, за исключением того, что вместо процедуры AssignFile нужно вызывать процедуру AssignPrn. В примере на принтер выводится одна строка текста :

          procedure TForm1.Button1Click(Sender: TObject);
          var
          To_Prn : TextFile;
          begin
          AssignPrn(To_Prn);
          Rewrite(To_Prn);
          Writeln(To_Prn, ‘Printer in Text Mode’);
          CloseFile(To_Prn);
          end;

          Здесь необходимо, видимо, пояснить, что по сравнению с BP 7.0 в Delphi изменены названия некоторых функций и переменных в модуле System :

            • AssignFile вместо Assign
            • CloseFile вместо Close
            • TextFile вместо Text
                1. Вывод содержимого формы на печать
                Читайте также:  Мегафон модем закончился трафик

                Иногда в программе требуется просто получить твердую копию экранной формы. В Delphi это делается более, чем просто – у объекта TForm есть метод Print , который и нужно вызвать в нужный момент.

              1. Графическая печать (объект TPrinter )
              2. И все же, более интересно, как из программы созданной в Delphi можно вывести на печать графическую информацию. Для этого есть специальный объект Printer ( класса TPrinter). Он становится доступен, если к программе подключить модуль Printers ( т.е. добавить имя модуля в разделе uses) . С помощью этого объекта печать на принтере графической информации становится не сложнее вывода этой информации на экран. Основным является то, что Printer предоставляет разработчику свойство Canvas ( работа с канвой описана в предыдущем уроке) и методы, выводящие содержание канвы на принтер. Рассмотрим подробнее свойства и методы объекта Printer.

                Свойства Printer: Aborted – тип булевский ; показывает, прервал ли пользователь работу принтера методом Abort.

                Canvas канва, место для вывода графики ; работа с Canvas описана в Уроке 5.

                Fonts – список доступных шрифтов.

                Handle используется при прямых вызовах Windows API.

                Orientation – ориентация страницы, вертикально или горизонтально.

                PageWidth , PageHeight, PageNumber соответственно ширина, высота и номер страницы.

                Printers перечисляет все установленные в системе принтеры, а

                PrinterIndex указывает, какой из них является текущим. Чтобы печатать на принтере по умолчанию здесь должно быть значение -1.

                Printing тип булевский ; показывает, начата ли печать (методом BeginDoc ).

                Title заголовок для Print Manager и для заголовка перед выводом на сетевом принтере.

                Abort – прерывает печать, начатую методом BeginDoc BeginDoc вызывается перед тем, как начать рисовать на канве.

                EndDoc вызывается когда все необходимое уже нарисовано на канве, принтер начинает печатать именно после этого метода.

                NewPage переход на новую страницу. Остальными методами объекта в обычных случаях пользоваться не нужно.

                Итак, порядок вывода на печать графической информации выглядит следующим образом :

                • выполняется метод BeginDoc
                • на канве ( Canvas) рисуем все, что нужно
                • при необходимости разместить информацию на нескольких листах вызываем метод NewPage
                • посылаем нарисованное на принтер, выполняя метод EndDoc
                    1. Примерex06.zip

                    В примере (проект PRINTS.DPR , рис.1 ) реализованы все три вышеописанных ситуации.

                    Добавить комментарий

                    Ваш адрес email не будет опубликован. Обязательные поля помечены *

                    Adblock detector