Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_Rab_BD / LAB3 / metod3.doc
Скачиваний:
28
Добавлен:
20.04.2015
Размер:
413.7 Кб
Скачать

2)Отображение информации в отчете:

В отчете можно поместить разнообразную информацию: текст, графические изображения, в том числе геометрические фигуры. В Delphi 3.0 появился ряд новых компонент, и все эти компонент имеют общего предка – класс TQRPrintable. Этот класс является абстрактным и определяет общие характеристики всех отображаемых компонент, используемых в отчетах. Иерархия классов, определяющих отображаемые компоненты, приведена на рисунке.

Иерархия классов отображаемых компонент.

Класс TQRPrintable.

Класс TQRPrintable, потомок класса TCustomControl, задает общие характеристики всех компонент, предназначенных для вывода информации. То, что у всех компонент, отображающих информацию, имеется общий предок, является особенностью QuickReport 2.0.

Класс TQRPrintable в дополнение к наследуемым определяет следующие основные свойства:

Zoom – определяет масштаб в процентах отображения компоненты на экране от ее натуральной величины.

Enabled – определяет, выводит на печать компоненты или нет.

Frame – сложное свойство, определяет рамку компоненты.

Size – сложное свойство, определяет горизонтальную и вертикальную координаты левого верхнего угла компоненты, а также ее высоту и ширину.

Класс TQRCustomLabel.

Класс TQRCustomLabel, потомок класса TQRPrintable, задает общие характеристики компонент, предназначенных для вывода информации без элементов оформления текста. Он также является абстрактным классом.

Метка в отчете (QRLabel).

Метка QRLabel класса TQRLabel предназначена для вывода текста, который не зависит от данных из БД. По назначению она аналогична компоненте Label.

Класс TQRLabel является потомком класса TQRCustomLabel . Он переводит в разряд опубликованных ряд свойств (Alignment, AutoStretch, AutoSize, Caption, Color, Enabled, Font, Frame, ParentFont, Size, WordWrap). Кроме того, в дополнение к наследуемым он определяет следующие свойства:

AlignToBand – свойство логического типа, определяющее размещение метки в секции.

Transparent – свойство логического типа, которое определяет изображение фона метки.

Поле БД в отчете (QRDBText).

Компонента QRDBText класса TQRDBText подобна компоненте DBEdit, за исключением того, что она предназначена лишь для вывода значений. Компонента QRDBText используется для отображения в отчете данных из БД и является основной компонентой для непосредственного отображения данных из БД.

Класс TQRDBText является потомком класса TQRCustomLabel. Он переводит в разряд опубликованных ряд наследуемых свойств (Alignment, AutoStretch, AutoSize, Color, Enabled, Font, Frame, ParentFont, Size, WordWrap). Дополнительно к наследуемым он определяет уже известные нам свойства: AlignToBand, DataSet, DataField, Mask (свойство, определяющее строку шаблона для выводимой информации), Transparent.

Вычисляемое поле в отчете (QRExpr).

Компонента QRExpr класса TQRExpr появилась в версии QuickReport 2.0. Она предназначена для создания вычисляемых полей на основе данных в отчете. Эта компонента используется, как правило, в различных итоговых секциях для определения общих результатов.

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

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

Чтобы включить в выражение константу, нужно в группе элементов управления Constant поместить в строку ввода нужное значение константы, выбрать из комбинированной строки ввода тип этой константы, а затем нажать кнопку Add.

Чтобы ввести в выражение знак опреации, нужно нажать на соответствующую кнопку в группе компонент Operations. Все эти знаки операций аналогичны подобным операциям в языке Object Pascal.

Чтобы ввести в выражение функцию, нужно в группе компонент Function (Функция) выбрать из списка Available functions (Доступные функции) нужную и нажать кнопку Add. Эти функции отличаются от стандартных функций Object Pascal. Функции, которые отображаются в списке, относятся к определенным категориям. Категория может быть задана в комбинированной строке ввода Category (Категории) и ограничивает диапазон функций, из которых выбирается требуемая. Значение All позволяет просмотреть все доступные функции в списке. После выбора функции под списком отображается синтаксис и описание функции.

При работе с функциями сначала выбирается сама функция, затем ее аргументы, наконец, функция помещается в формируемое выражение.

Класс TQRExpr является потомком класса TQRCustomLabel. Он переводит в разряд опубликованных ряд наследуемых свойств (Alignment, AutoStretch, AutoSize, Color, Enabled, Font, Frame, ParentFont, Size, WordWrap). Дополнительно к наследуемым он определяет следующие свойства: AlignToBand, Expression, Mask, Master, Transparent и ResetAfterPrint – определяет, пересчитывать значение вычисляемого поля после печати текущего значения или нет.

Вычисляемое поле в отчете (класс TQRDBCalc).

Класс TQRDBCalc – потомок класса TQRExpr – используется в версии QuickRep 2.0 для совместимости с отчетами, созданными в предыдущей версии. Непосредственно компоненты этого класса в отчете не используются. Следует отметить, что в связи с изменением предка у данной компоненты, в ней определены свойства DataSource и DataField, которые в предыдущей версии наследовались от класса TQRDBText.

Системные данные (QRSysData).

Компонента QRSysData класса TQRSysData предназначена для отображения полезной для оформления отчета системной информации: системных даты и времени, номеров и количества записей и т.п.

Класс TQRSysData, являющийся потомком класса TQRCustomLabel, переводит в разряд опубликованных ряд наследуемых свойств (Alignment, AutoStretch, AutoSize, Color, Enabled, Font, Frame, ParentFont, Size, WordWrap). Дополнительно к наследуемым он определяет следующие свойства:

AlignToBand – свойство логического типа, определяющее размещение компоненты в секции.

Data – свойство типа TQRSysDataType, которое определяет, какая системная информация будет отображена в компоненте. Тип TQRSysDataType определен следующим образом:

type

TQRSysDataType = (qrsDate, qrsDateTime, qrsDetailCount, qrsDetailNo, qrsPageNumber, qrsReportTitle, qrsTime, qrsColumnNo, qrsPageCount);

где qrsDate – текущая системная дата; qrsDateTime – текущая системная дата и время; qrsDetailCount – количество записей в основном наборе данных; qrsDetailNo – номер текущей записи в наборе данных; qrsPageNumber – номер страницы; qrsReportTitle – заголовок отчета определенный в свойстве ReportTitle компоненты QuickRep; qrsTime – текущее системное время; qrsColumnNo – номер текущего столбца; qrsPageCount – всего количества страниц. Последние два значения – qrsColumnNo и qrsPageCount – пока в Delphi недоступны.

Text – свойство типа string, определяет текст, который будет выведен в отчете.

Многостраничный текст в отчете (QRMemo).

Компонента QRMemo класса TQRMemo предназначена для вывода текста в несколько строк. Она аналогична по своему назначению компонентам Memo и DBMemo.

Класс TQRMemo является потомком класса TQRCustomLabel. Он переводит в разряд опубликованных ряд наследуемых свойств (Alignment, AutoStretch, AutoSize, Color, Enabled, Font, Lines, Frame, ParentFont, Size, WordWrap). Дополнительно к наследуемым он определяет следующие уже известные нам свойства: AlignToBand и Transparent.

Геометрические фигуры (QRShape).

Компонента QRShape класса TQRShape предназначена для отображения простейших геометрических фигур в отчете. Такие компоненты используются для оформления отчета.

Класс TQRShape, являющийся потомком класса TQRPrintable, переводит в разряд опубликованных ряд наследуемых свойств (Enabled, Frame, Height, Size, Width). Дополнительно к наследуемым он определяет следующие свойства:

Brush – сложное свойство типа TBrush, которое определяет цвет и стиль заполнения геометрической фигуры.

Pen – сложное свойство типа TPen, которое определяет цвет, режим, стиль и ширину изображения контура геометрической фигуры.

Shape – свойство типа TQRShapeType, определяющее геометрическую фигуру, которая будет отображена. Тип TQRShapeType определен следующим образом:

type

TQRShapeType = (qrsCircle, qrsHorLine, qrsRectangle, qrsRightAndLeft, qrsTopAndBottom, qrsVertLine);

где qrsCircle – круг, вписанный в компоненту; qrsHorLine – горизонтальная линия посередине компоненты; qrsRectangle – прямоугольник; qrsRightAndLeft – вертикальные линии по правой и левой границе компоненты; qrsTopAndBottom – горизонтальные линии по верхней и нижней границе компоненты; qrsVertLine – горизонтальная линия посередине компоненты.

Рисунок (QRImage).

Компонента QRImage класса TQRImage, появившаяся в версии QuickReport 2.0, предназначена для отображения в отчете рисунка, хранящегося в графическом файле.

Класс TQRImage является потомком класса TQRPrintable. Он переводит в разряд опубликованных ряд наследуемых свойств (Enabled, Frame, Height, Size, Width). Дополнительно к наследуемым он определяет следующие свойства:

Center – свойство логического типа, определяет место расположения рисунка в компоненте.

Picture – свойство типа TPicture, определяющее выводимое изображение. Значение nil соответствует пустой компоненте. Чтобы поместить рисунок в компоненту, следует активизировать мышью данное свойство. В результате появится диалоговое окно Picture Editor.

Stretch – свойство логического типа, определяющее заполнение компоненты рисунком.

Рисунок из БД (QRDBImage).

Компонента QRDBImage класса TQRDBImage, появившаяся в версии QuickReport 2.0, предназначена для отображения в отчете рисунка, хранящегося в поле БД.

Класс TQRDBImage является потомком класса TQRPrintable. Он переводит в разряд опубликованных ряд наследуемых свойств (Enabled, Frame, Height, Size, Width). Дополнительно к наследуемым он определяет следующие, уже известные нам свойства: Center, DataField, DataSet и Stretch.

Класс TQRCustomRichText.

Класс TQRCustomRichText является потомком класса TQRCustomLabel. Класс является абстрактным, и компоненты данного класса непосредственно в отчете не используются – он лишь определяет общие свойства своих потомков. Класс TQRCustomRichText переводит в разряд опубликованных ряд наследуемых свойств (Alignment, Color, Font). Дополнительно к наследуемым он определяет еще одно известное нам совйство AutoStretch.

Многостраничный текст с оформлением QRRichText.

Компонента QRRichText класса TQRRichText предназначена для вывода в отчете многостраничного текста в формате RTF. Этот текст может содержать оформленные разным образом фрагменты. Класс TQRRichText является потомком класса TQRCustomRichText и переводит в разряд опубликованных ряд наследуемых свойств (Enabled, Frame, Height, Size, Width). Дополнительно к наследуемым он определяет следующие свойства:

Lines – свойство типа TStrings, которое определяет набор строк, отображаемых в компоненте.

ParentRichEdit – свойство типа TRichEdit, позволяет использовать в компоненте текст редактор класса TRichEdit, помещенного в компоненте старшей по отношению к компоненте QRRichText.

Многостраничный текст из БД с оформлением QRDBRichText.

Компонента QRDBRichText класса TQRDBRichText предназначена для вывода в отчете многостраничного текста в формате RTF из БД. Этот текст может содержать оформленные разным образом фрагменты. Класс TQRDBRichText является потомком класса TQRCustomRichText и переводит в разряд опубликованных ряд наследуемых свойств (Enabled, Frame, Height, Size, Width). Дополнительно к наследуемым он определяет следующие свойства: DataField, DataSet.

Создание отчета в БД:

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

Все это создается с помощью компонент, описанных выше.

Пример № 1: Создание отчета для печати содержимого БД «Телефонная книжка».

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

  1. Откроем стандартной командой проект, находящийся в файле MyExampleDB.dpr и полученный в результате выполнения лабораторной работы № 2. Изменим свойство Caption формы Form1 на «Информация о людях с выводом отчета».

Сохраним все открытые файлы проекта под теми же именами, но только с индексом 2: MyExUnitDB2.pas, MyExampleDB2.dpr, MyExUnitDMDB2.pas.

В исполнительной части модуля формы Form1 изменим раздел USES:

USES MyExUnitDMDB2;

  1. Добавим новую форму в проект с помощью команды главного меню File|New Form. В проекте она получит имя Form2. В этой форме будет создаваться отчет. Изменим свойство Caption формы на «список телефонов».

Сохраним форму в файле с именем myunitReport2.pas.

  1. Установим взаимосвязь между формой Form2 и формой с компонентами, определяющими доступ к БД, - DataModule1. Для этого в секции implementation формы Form2 сразу же после объявления этой секции введем строку

USES MyExUnitDMDB2;

  1. Определим форму Form2 как отчет. Для этого требуется произвести следующие действия:

    1. Перенесем со страницы QReport палитры компонент в форму Form2 компоненту QuickRep. В тексте модуля формы она получит имя QuickRep1. Она изображается в виде прямоугольной области размером с лист формата А4, с координатной сеткой. В этой области также пунктирной линией отмечена граница области, которая будет распечатана. По умолчанию все поля, которые определяют эту область, равны 1 см. Кроме того, у формы Form2 появятся линейки скроллинга.

    2. С помощью инспектора объектов зададим свойству DataSet компоненты QuickRep1 значение DataModule1.Table1. Таким образом определен источник данных для отображения в отчете – это информация из таблице People.db.

  2. Оформим заголовок отчета. Для этого нужно сделать следующее:

    1. Со страницы QReport палитры компонент ф форму Form2 поместим компоненту QRBand (Секция). Эта компонента в тексте модуля формы получит имя QRBand1. Она изображается в виде полосы на всю ширину области печати и используется для вывода заголовка отчета.

    2. Со страницы QReport поместим на компоненту QRBand1 метку QRLabel (Текст в отчете). Эта компонента получит в тексте модуля имя QRLabel1.

    3. Зададим для компоненты QRLabel1 значение свойства Caption, равное «Список телефонов», а в сложном свойстве Font установим размер шрифта (Size), равный 16. Поместим эту компоненту в центральной части компоненты QRBand1.

  3. Определим секцию для основного отчета, в которую будет выводится информация о людях (из источника данных, определенного в QReport):

6.1. Со страницы QReport поместим в Form2 компоненту QRBand. Она получит в тексте модуля имя QRBand2 и будет находиться под компонентой QRBand1. Изменим свойство BandType этой компоненты на rbDetail, используя выпадающий список. Это означает, что с ее помощью будут выводиться конкретные данные.

6.2. Со страницы QReport поместим на компоненту QRBand2 рядом друг с другом 3 компоненты QRDBText (Строка с данными из БД). В тексте модуля эти компоненты получат имена QRDBText1, QRDBText2 и QRDBText3.

Для этих компонент зададим свойству DataSet значение DataModule1.Table1, а их свойству DataField соответственно присвоим значения Family, Name, SecName.

Для всех этих строк зададим свойству AutoSize значение False, чтобы иметь возможность изменять размеры полей. Несколько увеличим размеры компонент по горизонтали, примерно до 4 см каждый, и разместим их в строку, одну рядом с другой, начиная с левого края компоненты QRBand2.

6.3. Изменим высоту QRBand2 так, чтобы она и компоненты QRDBText1, QRDBText2 и QRDBText3 были примерно одинаковой высоты.

  1. Определим секцию подотчета для вывода информации о телефонах:

    1. Со страницы QReport поместим в Form2 компоненту QRSubDetail (Секция подотчета). Она получит в тексте модуля формы имя QRSubDetail1 и находится под компонентой QRBand2.

Зададим свойству DataSet этой компоненты значение DataModule1.Table2. Таким образом определени источник данных для отображения в подотчете – это информация из таблицы БД Tel.db. Отметим, что свойство Master, которое определяет основной отчет для подотчета, уже автоматически установлено в QuickRep1.

    1. Со страницы QReport поместим на компоненту QRSubDetail1 рядом друг с другом 2 компоненты QRDBText (Строка с данными из БД). В тексте модуля эти компоненты получат имена QRDBText4 и QRDBText5.

Для этих компонент зададим свойству DataSet значение DataModule1.Table2, а их свойству DataField соответственно присвоим значения Number и Type.

Для всех этих строк зададим свойству AutoSize значение False. Несколько увеличим размеры компонент по горизонтали, примерно до 3 см каждый, и разместим их в строку, одну рядом с другой, начиная с левого края компоненты QRSubDetail1.

    1. Изменим высоту QRSubDetail1 так, чтобы она и компоненты QRDBText4 и QRDBText5 были примерно одинаковой высоты.

  1. Разместим в отчете дополнительную системную информацию: время, дату и номера страниц отчета. Для этого выполним следующие действия:

    1. Зададим вывод системного времени и даты: выберем компоненту QRBand1 и несколько увеличим ее вертикальный размер. Из страницы QReport перенесем на нее две компоненты QRSysData (Системные данные). В результате в модуле появятся две компоненты, которые получат имена QRSysData1 и QRSysData2. Разместим эти компоненты одну под другой в левом верхнем углу секции QRBand1. Для компоненты QRSysData1 зададим свойству Data значение qrsDate, а свойству Text – значение «Дата ». Для компоненты QRSysData2 зададим свойству Data значение qrsTime, а свойству Text – значение «Время ». Для обеих компонент зададим свойству AutoSize значение False, затем увеличим их несколько по горизонтали.

    2. Выберем компоненту QRShape из палитры компонент и поместим ее так, чтобы внутри нее оказались компоненты QRSySData1 и QRSysData2 (поместить эту компоненту необходимо позади, для чего воспользуемся командой главного меню Edit|Send to back).

    3. Определим вывод номера страницы на каждой странице отчета. Из страницы QReport перенесем на форму Form2 еще одну компоненту QRBand. В тексте модуля она будет иметь имя QRBand3. Зададим ее свойству BandType значение rbPageFooter. Из страницы QReport примерно на середину компоненты QRBand3 поместим компоненту QRSysData. В модуле появится компонента с именем QRSysData3. Для этой компоненты выберем для свойства Data значение qrsPageNumber, а свойству Text зададим значение «Страница ».

  2. Установим взаимосвязь между главной формой проекта Form1 и формы с отчетом Form2. Для этого в тексте модуля формы Form1, в секции implementation, сразу же после ее заголовка заменим строку

USES MyExUnitDMDB2;

на строку

USES MyExUnitDMDB2, MyUnitReport2;

  1. Поместим в форму Form1 кнопки, которые будут использоваться для вывода отчета и закрытия формы. Для этого выполним следующие действия:

    1. Со страницы Standart палитры компонент поместим в правый нижний угол формы Form1 две кнопки Button, предварительно освободив этот угол от компонент. Эти кнопки получат в тексте модуля имена Button1 и Button2.

    2. Выберем кнопку Button2 и установим свойству Caption значение «Выход».

    3. Активизируем эту кнопку мышью и в появившейся заготовке обработчика события OnClick поместим следующий текст:

procedure TForm1.Button2Click (Sender: TObject);

begin

Close;

end;

    1. Выберем кнопку Button1 и установим ее свойству Caption значение «Отчет».

    2. Активизируем эту кнопку и в появившейся заготовке обработчика события OnClick поместим следующий текст:

procedure TForm1.Button1Click (Sender: TObject);

begin

Form2.QuickRep1.Preview;

end;

  1. Сохраним внесенные изменения в проекте.

  2. Запустим программу. Нажмем кнопку «Отчет». В результате будет вызвана утилита QuickReport 2.0, которая отобразит отчет по всем записям в БД «Телефонная книжка». Завершим работу утилиты QuickReport 2.0 нажатием кнопки Close. Завершим работу программы, нажав кнопку «Выход».

Объединенный отчет QRCompositeReport.

Компонента QRCompositeReport класса TQRCompositeReport предназначена для создания объединенных отчетов, т.е. таких отчетов, в которых информация из нескольких отчетов следует одна за другой. Это подход удобен для формирования сводных распечаток из небольших отчетов. Отметим, что свойство Orientation у входящих в объединенный отчет отчетов должно быть одинаково.

Класс TQRCompositeReport является потомком класса TComponent и определяет следующие основные свойства отчета в дополнение к наследуемым (некоторые из них):

Options – свойство типа TQuickReportOptions, используется для задания дополнительных характеристик отчета.

ReportTitle – свойство типа string, определяет краткое описание объединенного отчета, которое соответствует в принтерных очередях заданию на печать данного отчета.

Класс TQRCompositeReport определяет следующие методы в дополнение к наследуемым: Prepare, Preview и Print.

Пример № 2: Создание объединенного отчета для БД «Телефонная книжка».

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

  1. Откроем проект MyExampleDB2.dpr, созданный в предыдущем примере, и сохраним его с именем MyExampleDB3.dpr. Выбирая последовательно формы проекта, сохраним их в следующих файлах: DataModule1 – MyExUnitDMDB3A.pas, Form1 – MyExUnitDB3B.pas, Form2 – MyExUnitDB3C.pas.

известной нам командой добавим к проекту новую форму. В тексте модуля эта форма получит имя Form3. Сохраним ее с именем MyExUnitDB3D.pas.

  1. В тексте модулей, соответствующих формам, входящим в проект, изменим строки, следующие за заголовком секции implementation. Для Form1 заменим имеющуюся строку на:

USES MyExUnitDB3A, MyExUnitDB3C, MyExUnitDB3D;

Для формы Form2 заменим имеющуюся строку на:

USES MyExUnitDMDB3A;

Наконец, в тексте формы Form3 после заголовка секции implementation поместим строку

USES MyExUnitDMDB3A, MyExUnitDB3C, MyExUnitDB3B;

  1. Создадим отчет в форме Form3 для вывода только списка всех фамилий людей, имеющихся в БД:

3.1. Перенесем со страницы QReport палитры компонент в форму Form3 компоненту QuickRep. В тексте модуля формы она получит имя QuickRep1.

3.2. Зададим свойству DataSet компоненты QuickRep1значение DataModule1.Table1.

3.3. Со страницы QReport поместим в Form3 компоненту QRBand. Она получит в тексте модуля имя QRBand1.

3.4. Со страницы QReport поместим в центр компоненты QRBand1 компоненту QRLabel. Она получит в тексте модуля имя QRLabel1. Изменим ее свойство Caption на «Список фамилий», а в свойстве Font установим размер шрифта (Size), равный 16.

3.5. Со страницы QReport поместим в форму Form3 еще одну компоненту QRBand. Она получит в тексте модуля имя QRBand2. Изменим свойство BandType этой компоненты на rbDetail.

3.6. Со страницы QReport поместим на компоненту QRBand2 рядом друг с другом 3 компоненты QRDBText (Строка с данными из БД). В тексте модуля эти компоненты получат имена QRDBText1, QRDBText2 и QRDBText3.

Для этих компонент зададим свойству DataSet значение DataModule1.Table1, а их свойству DataField соответственно присвоим значения Family, Name, SecName.

Для всех этих строк зададим свойству AutoSize значение False, чтобы иметь возможность изменять размеры полей. Несколько увеличим размеры компонент по горизонтали, примерно до 4 см каждый, и разместим их в строку, одну рядом с другой, начиная с левого края компоненты QRBand2.

3.7. Изменим высоту компоненты QRBand2 так, чтобы она и компоненты QRDBText1, QRDBText2, QRDBText3 были примерно одинаковой высоты.

  1. Из страницы QReport поместим на форму Form3 компоненту QRCompositeReport, которая получит в тексте модуля имя QRCompositeReport1. Активизируем ее и в появившемся обработчике событий поместим следующие строки:

procedure TForm3.QRCompositeReport1AddReports (Sender: TObject);

begin

WITH QRCompositeReport1 DO

BEGIN

Reports.Add (Form2.QuickRep1);

Reports.Add (Form3.QuickRep1);

END;

end;

  1. Активизируем кнопку Button1 на форме Form1, имеющую название «Отчет». Несколько изменим существующий текст:

procedure TForm1.Button1Click (Sender: TObject);

begin

Form3.QRCompositeReport1.Preview;

end;

  1. Запустим программу и нажмем кнопку «Отчет». В результате в стандартном окне предварительного просмотра будет выведен отчет, состоящий из двух отчетов.

  2. Закроем окно предварительного просмотра, нажав кнопку “Close”.

  3. Завершим выполнение программы, нажав кнопку «Закрыть».

Панель предварительного просмотра отчета QRPreview:

Компонента QRPreview класса TQRPreview предназначена для отображения отчета в режиме предварительного просмотра. С помощью этой компоненты можно создавать свои, отличные от имеющихся в утилите QuickReport 2.0 средства просмотра отчетов. Вообще говоря, их целесообразно размещать в отдельной форме, т.к. при просмотре отчета важно иметь возможность использовать все пространство экрана.

Класс TQRPreview является потомком класса TScrollBox. В дополнение к наследуемым свойствам класс TQRPreview добавляет следующие:

PageNumber – свойство целого типа, определяющее номер отображаемой страницы отчета.

QRPrinter – свойство типа TQRPrinter, которое определяет объект, формирующий отчет.

Zoom – свойство целого типа, определяющее в процентах отображение внешнего вида отчета на экране.

Методы и свойства класса TQRPreview мы рассматривать не будем [4].

Пример № 3: Создание средства для предварительного просмотра отчетов по БД «Телефонная книжка».

Создадим для уже имеющегося приложения работы с БД простейшее средство просмотра отчета, которое предназначено исключительно для отображения отчета перед печатью.

  1. Откроем проект MyExampleDB2.dpr. Сохраним файлы проекта под теми же именами, но с добавлением цифры “4” в конце имени.

  2. Добавим в проект новую форму. Она получит имя Form3.

Изменим свойство Caption формы Form3 на «Просмотр отчета». Сохраним модуль формы под именем MyUnitPreview4.

  1. Установим связь формы Form1 с переименованным модулем данных и формой с отчетом. Для этого в секции implementation формы Form1 сразу же после объявления этой секции изменим строку на

USES MyExUnitDMDB4, MyExUnitReport4;

  1. Изменим раздел объявления используемых модулей в секции implementation формы Form2. Поэтому строка будет выглядеть так:

USES MyExUnitDMDB4, MyUnitPreview4, Qrprntr;

Модуль Qrprntr здесь требуется только для получения доступа к объекту QRPrinter.

  1. Перенесем со страницы QReport палитры компонент в форму Form3 компоненту QRPreview. В тексте модуля формы она получит имя QRPreview1. Зададим ее свойству Align значение alClient, чтобы отображаемый отчет всегда размещался по всей клиентской области формы. Отметим, что при проектировании данная компонента отображается в виде панели с отображаемой пустой страницей и, если эта страница полностью не размещается в компоненте, у нее появляются необходимые вертикальная или горизонтальная линейка скроллинга.

  2. Перейдем к форме Form2 и выберем в ней компоненту QuickRep1. С помощью инспектора объектов активизируем обработчик событий OnPreview и поместим в него следующие строки:

procedure TForm2.QuickRep1Preview (Sender: TObject);

begin

Form3.QRPreview1.QRPrinter := TQRPrinter (Sender);

Form3.Show;

end;

  1. Запустим программу с помощью главного меню Run|Run.

  2. Нажмем кнопку «Отчет». Должно появиться окно с изображением отчета.

  3. Завершим программу нажатием кнопки «Выход».

  4. Сохраним все изменения в проекте.

Обработка задания на печать. Класс TQRPrinter.

Класс TQRPrinter является потомком класса TPersistent. Компонента этого класса является неотображаемой. Экземпляр этого объекта создается автоматически при выполнении приложения и, вообще говоря, может использоваться независимо от наличия компоненты QuickRep. Именно этот объект , который имеет имя QRPrinter, обеспечивает создание отчета, его предварительный просмотр, распечатку, а также возможность сохранения отчета в файле и последующую работу с ним. В основном эти действия и возможности по просмотру отчета, обеспечиваемые классом TQRPrinter, представлены в стандартной форме для предварительного просмотра утилиты QuickReport 2.0.

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

Название кнопки (Команда)

Описание

Zoom to fit

Разместить страницу отчета полностью на экране

Zoom to 100%

Отобразить страницу отчета так же, как она будет напечатана

Zoom to page width

Разместить страницу, чтобы максимально отобразить ее ширину на экране

First Page

Отобразить первую страницу отчета

Previous Page

Отобразить предыдущую страницу отчета

Next Page

Отобразить следующую страницу отчета

Last Page

Отобразить последнюю страницу отчета

Printer Setup

Определить параметры принтера в стандартном окне

Print

Напечатать отчет

Save

Сохранить отчет в файле после определения в стандартном диалоговом окне его имени с расширением .dpr

Load

Загрузить отчет из файла с расширением .dpr, выбрав с помощью стандартного диалогового окна его имени

Close

Закрыть стандартную форму для предварительного просмотра

Индикатор номера текущей отображаемой страницы с указанием количества страниц находится на строке состояния стандартного окна просмотра. Там же отображается индикатор процесса формирования отчета.

Класс TQRPrinter определяет ряд дополнительных свойств, методов и событий, которые мы рассматривать не будем [4].

Быстрое создание отчета:

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

Следующие операции позволяют создать заготовки соответствующих отчетов для их дальнейшей модификации:

File|New|Forms|QuickReport Labels – создается заготовка отчета для печати почтовых этикеток. Этот отчет состоит из трех колонок, в которых выводятся прямоугольные почтовые этикетки.

File|New|Forms|QuickReport List – создается заготовка отчета, выводящего информацию в виде списка. Он включает в себя секцию заголовка отчета, а также секции заголовка страницы, секцию для вывода данных и секцию окончания страницы.

File|New|Forms|QuickReport Master/Detail – создается заготовка отчета с подотчетом. Он включает в себя секцию заголовка отчета, а также секцию заголовка страницы, секцию для вывода данных основного отчета, секцию для вывода данных подотчета, секцию для подведения итогов в подотчете и секцию окончания страницы.

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

Кроме того, имеется возможность создать форму с пустой заготовкой отчета. Для этого следует воспользоваться операцией File|New|New|Report. В результате получается форма с помещенной в нее компонентой QuickReport.

Report Wizard – эксперт по созданию настраиваемого отчета:

Report Wizard – эксперт, содержащий диалоговые окна, в которых требуется определить, какая информация будет выведена в формируемом отчете. При этом создается отчет, в котором информация выводится списком. Этот эксперт позволяет создавать отчеты на основе локальных БД. На любом шаге работы можно прервать процесс создания отчета, нажав кнопку Cancel, а также из любого диалогового окна (кроме первого) можно вернуться к предыдущему, нажав кнопку <Back. Перемещаться от одного окна эксперта к следующему можно, нажимая кнопку Next>.

Вызвать данный эксперт можно с помощью операции File|New|Bisuness|QuickReport Wizard.

Соседние файлы в папке LAB3