На странице QReport
палитры компонентов Delphi имеется множество элементов (см. таблицу 4.2), предназначенных для подготовки и печати отчетов с помощью системы QuickReport.
Пикто- грамма | Компонент | Описание |
QuickRep (отчет) | Используется для введения в приложение средств печати отчетов QuickReport | |
QRSubDetail (детали) | Используется для компоновки в отчет дополнительных данных | |
QRStringsBand (полоса текста) | Используется для компоновки в отчет дополнительных текстов | |
QRBand (полоса) | Используется для построения отчетов путем размещения на нем печатаемых компонентов | |
QRChildBand (дочерняя полоса) | Используется для создания дочерних полос, которые могут содержать другие компоненты QuickRep и полосы | |
QRGroup (группировка) | Используется для группировки данных | |
QRLabel (метка) | Используется для размещения текста в отчете | |
QRDBText (текст из базы данных) | Представляет собой ориентированный на данные компонент для размещения текста в отчете | |
QRExpr (математические выражения) | Позволяет вам строить и отображать выражения над полями данных и системными величинами (такими, как время и дата). Свойство Expression компонента включает диалоговое окно Построителя Выражений (Expression Builder), дающее возможность графического построения выражений | |
QRSysData (системные данные) | Используется для отображения системных данных | |
QRMemo (многострочный текст) | Используется для размещения в отчете многострочных текстов | |
QRExprMemo (тексты с математическими выражениями) | Используется для размещения в отчете текстов с математическими выражениями | |
QRRichText (многострочный текст RTF) | Используется для размещения в отчете текста в обогащенном формате | |
QRDBRichText (многострочный текст RTF базы данных) | Используется для размещения в отчете текста из базы данных в обогащенном формате | |
QRShape (форма) | Используется для рисования в отчете графических форм | |
QRImage (изображение) | Используется для печати изображений в отчете | |
QRDBImage (изображение из базы данных) | Используется для печати изображений из баз данных в отчете | |
QRCompositeReport (составной отчет) | Используется для построения составных отчетов | |
QRPreview (предварительный просмотр) | Используется для предварительного просмотра на экране подготовленного к печати отчета | |
QRTextFilter (фильтр текста) | Используется для установки фильтра текста | |
QRCSVFilter (разделитель) | Используется для установки разделителя текста | |
QRHTMLFilter (фильтр HTML) | Используется для установки фильтра HTML | |
QRChart (диаграммы, графики) | Используется для печати в отчете диаграмм, построенных на основе баз данных |
В данном разделе мы коротко рассмотрим принципы создания отчетов с помощью QuickReport. Конечно, рассмотреть в деталях все компоненты QuickReport невозможно — это потребовало бы отвести под эту тему целую главу, а, возможно, и несколько. К тому же отчеты обычно строятся для того, чтобы распечатывать информацию из баз данных. А рассмотрение компонентов, связанных с данными, выходит за рамки данной книги. Поэтому ограничимся только самыми общими принципами построения отчетов, не связанных с базами данных.
QuickReport — это система, позволяющая визуально проектировать отчеты и связывать их с кодом приложения. QuickReport генерирует отчеты, представляемые в виде полос различных типов. Именно для размещения в отчете полос предназначены такие компоненты, как QRSubDetail, QRStringsBand, QRBand, QRChildBand, QRGroup. Однако, понятие полосы тесно связано с отображением информации из баз данных. С этим же связаны такие компоненты, как QRDBTest, QRDBRichText, QRDBImage. Все они в совокупности позволяют строить отчеты, в которых автоматически просматриваются базы данных и отображается их текущее состояние. Но в данном разделе мы сосредоточимся на основном компоненте QuickRep и на компонентах, не связанных с данными. При этом можно строить только простые отчеты, содержащие тексты и рисунки, как показано на рис. 4.16.
Рис. 4.16 Пример отчета |
Основным компонентом, на котором строится весь отчет, является QuickRep. Он предоставляет ряд возможностей по управлению создаваемым отчетом, включая формирование заголовка, полос, шрифтов, установок принтера и др. Этот компонент является визуальным и после его соединения с базой данных может использоваться как контейнер полос, составляющих отчет.
Компонент QuickRep имеет ряд свойств, определяющих характеристики печати отчета:
PrinterSetting | Задает число копий отчета и диапазон печатаемых страниц. |
Page | Задает размер страницы PaperSize (можно установить заказной размер — Custom и определить длину и ширину страницы свойствами Length и Width), ее ориентацию и поля. |
Options | Определяет, надо ли печатать верхний колонтитул первой страницы (FirstPageHeader) и нижний колонтитул последней (LastPageFooter). |
Units | Задает единицу измерения размеров страницы, полей и т.п.: миллиметры, дюймы, пиксели и т.д. |
Zoom | Масштаб печати в процентах. |
ReportTitle | Заголовок окна предварительного просмотра. |
Перенесите на форму компонент QuickRep и посмотрите перечисленные и иные его свойства в Инспекторе Объектов. Одно из основных свойств — Bands. Оно имеет ряд подсвойств. Отметим из них следующие: HasTitle — имеется полоса заголовка отчета, HasDetail — имеется полоса детализации, HasPageHeader — имеется верхний колонтитул (заголовок) на каждой странице отчета, HasPageFooter — имеется нижний колонтитул на каждой странице отчета. Для дальнейшего рассмотрения компонентов установите в true свойство HasDetail. На компоненте QuickRep появится слабо видимая полоса с надписью «Detail
». На этой полосе, увеличив при необходимости ее размеры, можно размещать компоненты, которые отображают ту или иную информацию: QRLabel, QRExpr, QRSysData, QRMemo, QRRichText, QRShape, QRImage.
Компонент QuickRep имеет два основных метода: Preview — предварительный просмотр, и Print — печать. Предварительный просмотр и даже печать отчета можно осуществлять и в процессе проектирования. Для этого надо щелкнуть правой кнопкой мыши на компоненте QuickRep и из всплывшего меню выбрать команду Preview
. Перед вами откроется окно предварительного просмотра, в котором, в частности, имеется кнопка печати.
Компоненты QRLabel, QRMemo, QRRichText, QRShape, QRImage, размещаемые на полосах отчета, являются аналогами обычных компонентов — Label, Memo, RichEdit, Shape, Image, которые уже рассматривались ранее. Основной особенностью соответствующих компонентов QuickReport является их способность печататься в тех полосах отчета, в которых они размещены. Компоненты имеют два свойства, отсутствующих в обычных компонентах: Frame и Size.
Свойство Frame имеет ряд подсвойств, определяющих рамку вокруг компонента: Color — цвет, Style — стиль, Width — ширина, DrawBottom, DrawLeft, DrawRight, DrawTop — определяют наличие рамки соответственно внизу, слева, справа и вверху компонента.
Свойство Size имеет подсвойства, определяющие размер и место размещения компонента при печати. Все определяется в единицах измерения, заданных свойством Units компонента QuickRep.
Некоторые компоненты имеют свойство AlignToBand — выравнивание в полосе. Если это свойство установить в true, то компонент будет выровнен по краю полосы, заданному свойством Alignment: taLeftJustify — влево, taCenter — по центру, taRightJustify — вправо.
Остановимся теперь на свойствах отдельных компонентов. Интересное свойство имеет компонент QRRichText — ParentRichEdit. Это свойство указывает на обычный компонент RichEdit, текст из которого автоматически передается в компонент QRRichText. Вы можете, например, ввести в свое приложение компонент RichEdit и предоставить пользователю возможность вводить в него нужный текст, форматируя соответствующим образом слова и абзацы. Этот текст будет автоматически переноситься в отчет — в размещенный в нем компонент QRRichText. Впрочем, и в другие компоненты QuickReport можно программно заносить тексты и изображения, задаваемые пользователем. Например, вы можете ввести в свое приложение компонент Edit и предоставить пользователю возможность вводить в него нужный текст. А перед предварительным просмотром или печатью отчета вы можете перенести этот текст, например, в метку QRLabel, оператором
QRLabel1.Caption:=Edit1.Text;
Компонент QRExpr позволяет отображать в отчете результаты каких-то вычислений. Основное свойство этого компонента — Expression. Нажав на кнопку с многоточием около этого свойства в Инспекторе Объектов, вы попадете в окно, представленное на рис. 4.17 а. В этом окне вы можете ввести выражение, результаты которого должны отображаться в отчете на месте расположения компонента QRExpr. Элементами выражения могут быть поля базы данных (Database field
), такие переменные (Variable
), как текущее время, дата, номер страницы и др., функции (Function
). Кнопка Validate
позволяет вам проверить синтаксическую правильность введенного выражения и посмотреть результат вычисления. Поэкспериментируйте с этим компонентом и вы легко поймете принципы работы с ним.
Пусть, например, вы хотите отобразить текущую дату, включая месяц и год, но не включая числа. Обычно дата отображается в формате «дд.мм.гг». Значит вам надо убрать из этого формата первые три символа, отображающие день. Это можно сделать с помощью функции копирования фрагмента строки COPY(DATE, 4, 5), в которой первый аргумент указывает строку, второй — индекс первого копируемого символа, третий — число копируемых символов. В приведенном примере DATE — функция, возвращающая текущую дату в виде строки.
Рис. 4.17 Окна ввода выражений компонента QRExpr: основное окно (а), окно выбора функции (б) и окно ввода параметров (в) | а) | |
б) | ||
в) |
Вы можете просто написать приведенную выше функцию COPY с соответствующими аргументами в свойстве Expression. Но если вы хотите воспользоваться окном ввода выражений, то вам надо выполнить следующее. Нажмите кнопку Function
. Перед вами откроется окно выбора функции, представленное на рис. 4.17 б. В левом списке вы видите категории функций, а в правом — доступные функции. В нашем примере вам надо выбрать в правом списке функцию COPY. При этом под списками вы видите пояснение функции и ее синтаксис. Нажмите кнопку Continue
(продолжить). Вы попадете в окно ввода параметров, представленное на рис. 4.17 в. Может в его окнах непосредственно писать значения аргументов. Но если в качестве аргумента выступает другая функция (в нашем примере первый аргумент — функция DATE), то можете нажать кнопку с многоточием около окна соответствующего аргумента. Вы опять попадете в окно 4.17 а, можете в нем опять нажать Function
и выбрать в появившемся окне рис. 4.17 б функцию DATE. После этого вы вернетесь в окно рис. 4.17 в, но в качестве аргумента в нем уже будет занесена функция. Таким образом просто вводить выражения, содержащие вложенные функции.
Когда вы ввели все аргументы, щелкните на ОК
и вернетесь в основное окно рис. 4.17 а, в котором будет сформировано требуемое выражение. Щелкните в нем на OK
и сформированное выражение занесется в свойство Expression.
Компонент QRSysData позволяет отображать в отчете системные данные. Его основное свойство Data, которое может принимать следующие значения:
qrsDate | текущая дата |
qrsDateTime | текущие дата и время |
qrsDetailCount | число записей в базе данных |
qrsDetailNo | текущий номер записи в базе данных |
qrsPageNumber | номер текущей страницы |
qrsReportTitle | заголовок отчета |
qrsTime | текущее время |
Свойство Text компонента QRSysData определяет текст, предшествующий отображаемой величине.
Давайте в качестве примера использования всех этих компонентов рассмотрим создание простого отчета вида, представленного на рис. 4.16. Он содержит некоторый текст и рисунки, имеет нижние колонтитулы, в которых печатается название отчета и номер страницы. Кроме того, мы хотим, чтобы на первой странице над нижним колонтитулом было написано «МОСКВА» и дата создания отчета.
Detail» и «
Page Footer».
SubDetailкомпонент QRLabel, написав в его свойстве Caption текст «МОСКВА».
Page Footer» компонент QRLabel, задайте в его свойстве Caption текст (например, «
Отчет по изучению Delphi»). Установите свойство Alignment в taLeftJustify и AlignToBand в true. Это обеспечит выравнивание метки по левому краю страницы. Установите в свойстве Frame подсвойство DrawTop в true. Это обеспечит появление линии, отделяющей колонтитул от текста.
Page Footer» компонент QRSysData. В его свойстве Data установите значение qrsPageNumber. Этот компонент будет отображать номер страницы. Установите свойство Alignment в taRightJustify и AlignToBand в true. Это обеспечит выравнивание номера по правому краю страницы,
Preview. Перед вами откроется окно предварительного просмотра, в котором вы увидите свой отчет. Подберите размещение компонентов и размеры шрифтов в них так, чтобы все выглядело прилично.
Рис. 4.18 Окно формы, управляющей подготовкой отчета |
File | New Formновую форму.
Project | Options, в открывшемся окне Опций проекта перейдите на страницу
Formsи в списке
Main Formвыберите главной текущую форму Form1. Форма FRep должна быть вспомогательной.
Отчетс подразделами
Показатьи
Печать, и раздел
Шрифт. В свойство Lines компонента RichEdit введите некоторый начальный текст, например, тот, который вы ранее вводили в QRRichText. В окно редактирования Edit введите текст заголовка вашего отчета.
uses URep1;Этот оператор позволит ссылаться из модуля отчета на компоненты главной формы.
uses URep;Этот оператор позволит ссылаться из модуля главной формы на компоненты модуля отчета.
FRep.QRLTitle.Caption := Edit1.Text;Он обеспечит пересылку в метку заголовка отчета QRLTitle текста, который пользователь ввел в окно Edit1.
Шрифтвставьте операторы
if FontDialog1.Execute then RichEdit1.SelAttributes.Assign(FontDialog1.Font); RichEdit1.SetFocus;Эти операторы, обеспечивающие форматирование в окне RichEdit1, уже рассматривались в разделе 3.3.4.
Просмотрвставьте оператор
FRep.QuickRep1.Preview;
Приложение закончено. Запустите его на выполнение. Отформатируйте текст в окне (см. пример на рис. 4.18). Выполните команду Просмотр
. Вы увидите окно предварительного просмотpa, показанное на рис. 4.19.
Рис. 4.19 Предварительный просмотр отчета | |
В этом окне вы можете просматривать отчет, изменяя размер изображения, переходить со страницы на страницу (ваш отчет имеет всего одну страницу, так что переходы в нем невозможны), сохранять отчет в файле, проводить установку принтера, печатать отчет, сохранять его в файле, чтобы в каких-то будущих сеансах можно было загрузить его опять из файла. Словом, возможностей много. Опробуйте их все.