* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Расширение QuickReport
19 февраля 2009
Насчет дополнений к QuickReport QuickReport разработан с учетом возможности расширения с помощью нескольких различных путей. Дополнения (Add-ons) доступны как от QSD, так и от других производителей. В дополнение вы также можете написать свое собственное дополнение. Данная глава описывает написание четырех различных типов дополнений для QuickReport.
Печатные компоненты Несмотря на то, что QuickReport включает достаточное количество печатных компонент, может быть ситуация когда потребуются некоторые дополнительные. Все печатные компоненты для QuickReport должны быть наследниками TQRPrintable. Вы может создать наследника напрямую или использовать существующий компонент. Создание компонента состоит из следующих шагов: • Создание компонента с базовой функциональностью • Обеспечение доступности компонента в дизайнере • Добавление функциональности по экспорту Фильтры экспорта В дополнение к ASCII текст фильтру экспорта, включенному в состав QuickReport, вы можете создать свои фильтры в другие форматы, например Microsoft Excel, Word, RTF или другие. QuickReport все необходимое для создания дополнительных фильтров. Библиотеки функций Интерпретатор выражений QuickReport также расширяется с помощью библиотек функций, какие вам только могут потребоваться. Математические функции, нижнего уровня доступа к файлам, специальные форматы баз данных не поддержанные в Delphi модели Dataset, расширенные строковые функции, манипулирование датами. QuickReport включает необходимые классы для простого написания своих собственных библиотек. Однажды встроив, вы можете их использовать в своих выражениях, как внутри QuickReport, так и в других частях вашего приложения используя интерпретатор выражений QuickReport. Редакторы отчетов Редактор отчетов конечного пользователя включенный в QuickReport может быть заменен своим собственным. В основном QuickReport использует три уровня редактирования для конечного пользователя. Путем использования встроенного не визуального класса TQRDesigner вы можете создать свой собственный визуальный редактор без использования сообщений Windows, вызовов API и программирования нижнего уровня. Сам редактор TQREditor, из QuickReport построен из всего 200 строк кода. Написание печатных компонент Вероятно, наиболее полезной функцией QuickReport является возможность создания своих собственных печатных компонент. QuickReport не требует знать, как печатать. Он знает, что печатать – это TQRPrintable базовый класс. Вся работа по печати осуществляется субклассами от TQRPrintable. Все печатные компоненты в QuickReport разработаны данным образом. Печатный компонент наследует некоторые свойства из базового класса и может добавить свои собственные. Пример компонента CheckBox В качестве примера выберем CheckBox компонент, в котором добавим свойство Checked. Это требует переписать метод Paint (для редактора отчетов) и метод Print (для просмотра и печати). В методах Paint и Print мы должны рисовать CheckBox и значок отметки в зависимости от состояния свойства Checked. Исходный текст компонента приведен ниже: unit qrcb;
constructor TQRCheckBox.Create(AOwner: TComponent); begin inherited Create(AOwner); FChecked := False; end; procedure TQRCheckBox.SetChecked(Value: Boolean); begin if Value <> FChecked then begin FChecked := Value; Invalidate; end; end; procedure TQRCheckBox.Paint; begin with Canvas do begin Pen.Color := clBlack; Pen.Width := 1; Rectangle(0, 0, Width - 1, Height - 1); if Checked then begin MoveTo(0, 0); LineTo(Width - 1, Height - 1); MoveTo(0, Height - 1); LineTo(Width - 1, 0); end; end; end; procedure TQRCheckBox.Print(OfsX, OfsY: Integer); var CalcLeft, CalcTop, CalcRight, CalcBottom : Longint; begin with ParentReport.QRPrinter do begin Canvas.Pen.Color := clBlack; Canvas.Pen.Width := 1; CalcLeft := XPos(OfsX + Size.Left); CalcTop := YPos(OfsY + Size.Top); CalcRight := XPos(OfsX + Size.Left + Size.Width) CalcBottom := YPos(OfsY + Size.Top + Size.Height) Canvas.Rectangle(Left, Top, Right, Bottom); if Checked then begin MoveTo(Left, Top); LineTo(Right, Bottom); MoveTo(Left, Bottom); LineTo(Right, Top); end; end; end; procedure Register; begin RegisterComponents(‘QReport’, [TQRCheckBox]); end; Компоненты, работающие с базами данных Написание компонент работающих с базами данных является смесью обычных печатных компонент и стандартных и обычных Delphi компонент баз данных. Следует только учесть, что в QuickReport стандартной связью с базой данных является не DataSource, а DataSet. Вероятно вы пожелаете зарегистрировать специальный редактор свойств для вашего свойства типа FieldName, имитируя функциональность редактора свойств Delphi для свойства FieldName, со свойством DataSource – список всех полей данного DataSet. Подобный редактор реализован в модуле QREPORT.