Иерархия классов FastReport

Базовым классом для всех компонентов FastReport является класс TfrxComponent. Объекты этого типа имеют координаты, размеры, шрифт, признак видимости, а также список подчиненных объектов. Класс также содержит методы для сохранения/восстановления состояния объекта в поток.
TfrxComponent = class(TComponent)
protected
procedure SetParent(AParent: TfrxComponent); virtual;
procedure SetLeft(Value: Extended); virtual;
procedure SetTop(Value: Extended); virtual;
procedure SetWidth(Value: Extended); virtual;
procedure SetHeight(Value: Extended); virtual;
procedure SetFont(Value: TFont); virtual;
procedure SetParentFont(Value: Boolean); virtual;
procedure SetVisible(Value: Boolean); virtual;
procedure FontChanged(Sender: TObject); virtual;
public
constructor Create(AOwner: TComponent); override;
procedure Assign(Source: TPersistent); override;
procedure Clear; virtual;
procedure CreateUniqueName;
procedure LoadFromStream(Stream: TStream); virtual;
procedure SaveToStream(Stream: TStream); virtual;
procedure SetBounds(ALeft, ATop, AWidth, AHeight: Extended);
function FindObject(const AName: String): TfrxComponent;
class function GetDescription: String; virtual;
property Objects: TList readonly;
property AllObjects: TList readonly;
property Parent: TfrxComponent;
property Page: TfrxPage readonly;
property Report: TfrxReport readonly;
property IsDesigning: Boolean;
property IsLoading: Boolean;
property IsPrinting: Boolean;
property BaseName: String;
property Left: Extended;
property Top: Extended;
property Width: Extended;
property Height: Extended;
property AbsLeft: Extended readonly;
property AbsTop: Extended readonly;
property Font: TFont;
property ParentFont: Boolean;
property Restrictions: TfrxRestrictions;
property Visible: Boolean;
end;
Clear- очищает содержимое объекта и удаляет все его дочерние объекты.CreateUniqueName- создает уникальное имя для объекта, который помещен в отчет.LoadFromStream- считывает содержимое объекта и всех его дочерних объектов из потока.SaveToStream- сохраняет объект в поток.SetBounds- устанавливает координаты и размеры объекта.FindObject- ищет объект с заданным именем среди дочерних объектов.GetDescription- возвращает описание объекта.
Следующие методы вызываются при изменении соответствующих свойств. Вы можете перекрыть их, если вам нужна дополнительная обработка:
SetParentSetLeftSetTopSetWidthSetHeightSetFontSetParentFontSetVisibleFontChanged
В классе TfrxComponent определены следующие свойства:
Objects- список дочерних объектов;AllObjects- список всех подчиненных объектов;Parent- ссылка на родительский объект;Page- ссылка на страницу отчета, которой принадлежит объект;Report- ссылка на отчет, которому принадлежит объект;IsDesigning- истина, если запущен дизайнер;IsLoading- истина, если объект в процессе загрузки из потока;IsPrinting- истина, если объект печатается на принтере;BaseName- базовое имя объекта. Это значение используется в методеCreateUniqueName, который добавляет к базовому имени первую свободную цифру;Left- координата X объекта (относительно родителя);Top- координата Y объекта (относительно родителя);Width- ширина объекта;Height- высота объекта;AbsLeft- абсолютная координата X объекта;AbsTop- абсолютная координата Y объекта;Font- шрифт объекта;ParentFont- если истина, то использовать установки шрифта родительского объекта;Restrictions- набор флагов, запрещающих те или иные действия над объектом;Visible- видимость объекта.
Следующий основной класс - TfrxReportComponent. Объекты этого типа могут быть помещены в отчет. Класс содержит метод Draw для отрисовки объекта, а также методы BeforePrint/GetData/AfterPrint, которые вызываются при запуске отчета.
TfrxReportComponent = class(TfrxComponent)
public
procedure Draw(Canvas: TCanvas; ScaleX, ScaleY, OffsetX, OffsetY: Extended); virtual; abstract;
procedure BeforePrint; virtual;
procedure GetData; virtual;
procedure AfterPrint; virtual;
function GetComponentText: String; virtual;
property OnAfterPrint: TfrxNotifyEvent;
property OnBeforePrint: TfrxNotifyEvent;
end;
Draw- вызывается при отрисовке объекта. Параметры: Canvas - холст; Scale - масштаб по осям X,Y; Offset - смещение относительно начала холста;BeforePrint- вызывается перед обработкой объекта (в процессе построения отчета). Этот метод должен сохранить состояние объекта;GetData- метод должен загрузить данные в объект;AfterPrint- вызывается после того, как объект обработан. Метод должен восстановить состояние объекта.
Класс TfrxDialogComponent является базовым для написания невизуальных компонентов, которые могут быть помещены на диалоговую форму в отчете.
TfrxDialogComponent = class(TfrxReportComponent)
public
property Bitmap: TBitmap;
property Component: TComponent;
published
property Left;
property Top;
end;
Класс TfrxDialogControl является базовым для написания элементов управления, которые могут быть помещены на диалоговую форму в отчете. Класс содержит большое количество свойств и событий, общих для большинства элементов управления.
TfrxDialogControl = class(TfrxReportComponent)
protected
procedure InitControl(AControl: TControl);
public
property Caption: String;
property Color: TColor;
property Control: TControl;
property OnClick: TfrxNotifyEvent;
property OnDblClick: TfrxNotifyEvent;
property OnEnter: TfrxNotifyEvent;
property OnExit: TfrxNotifyEvent;
property OnKeyDown: TfrxKeyEvent;
property OnKeyPress: TfrxKeyPressEvent;
property OnKeyUp: TfrxKeyEvent;
property OnMouseDown: TfrxMouseEvent;
property OnMouseMove: TfrxMouseMoveEvent;
property OnMouseUp: TfrxMouseEvent;
published
property Left;
property Top;
property Width;
property Height;
property Font;
property ParentFont;
property Enabled: Boolean;
property Visible;
end;
При написании своего элемента управления вам надо наследоваться от этого класса, перенести нужные свойства в раздел published и добавить новые свойства, специфичные для вашего элемента управления. Написание собственных элементов управления будет рассмотрено более подробно в соответствующей главе.
Класс TfrxView является базовым для большинства компонентов, которые могут быть размещены на странице отчета. Объект этого типа имеет рамку и заливку, может подключаться к источнику данных. Практически все стандартные объекты FastReport наследуются от данного класса.
TfrxView = class(TfrxReportComponent)
protected
FX, FY, FX1, FY1, FDX, FDY, FFrameWidth: Integer;
FScaleX, FScaleY: Extended;
FCanvas: TCanvas;
procedure BeginDraw(Canvas: TCanvas; ScaleX, ScaleY, OffsetX, OffsetY: Extended); virtual;
procedure DrawBackground;
procedure DrawFrame;
procedure DrawLine(x, y, x1, y1, w: Integer);
public
function IsDataField: Boolean;
property BrushStyle: TBrushStyle;
property Color: TColor;
property DataField: String;
property DataSet: TfrxDataSet;
property Frame: TfrxFrame;
published
property Align: TfrxAlign;
property Printable: Boolean;
property ShiftMode: TfrxShiftMode;
property TagStr: String;
property Left;
property Top;
property Width;
property Height;
property Restrictions;
property Visible;
property OnAfterPrint;
property OnBeforePrint;
end;
В классе определены следующие методы:
BeginDraw- метод вызывается из методаDrawи вычисляет целочисленные координаты и размеры области отрисовки. Вычисленные значения помещаются в переменные FX, FY, FX1, FY1, FDX, FDY. Также вычисляется толщина рамки (помещается в FFrameWidth);DrawBackground- отрисовка фона объекта;DrawFrame- отрисовка рамки объекта;DrawLine- вспомогательный метод, рисующий линию с заданными координатами и толщиной;IsDataField- возвращает True, если св-ваDataSet,DataFieldсодержат непустые значения.
К следующим свойствам можно обращаться после вызова метода BeginDraw:
FX,FY,FX1,FY1,FDX,FDY,FFrameWidth- координаты, размеры и толщина рамки объекта, вычисленные с учетом масштабирования и смещения;FScaleX,FScaleY- масштаб, копия параметров ScaleX, ScaleY из методаDraw;FCanvas- холст, копия параметра Canvas из методаDraw.
В классе определены следующие свойства, общие для большинства объектов отчета:
BrushStyle- стиль заливки объекта;Color- цвет заливки объекта;DataField- имя поля данных, к которому подключен объект;DataSet- источник данных;Frame- рамка объекта;Align- выравнивание объекта относительно его родителя;Printable- определяет, надо ли печатать данный объект на принтере;ShiftMode- режим смещения объекта в случае, когда над данным объектом расположен растягиваемый объект;TagStr- вспомогательное поле для хранения различной информации.
Класс TfrxStretcheable является базовым для написания компонентов, которые могут менять свою высоту в зависимости от находящихся в них данных.
TfrxStretcheable = class(TfrxView)
public
function CalcHeight: Extended; virtual;
function DrawPart: Extended; virtual;
procedure InitPart; virtual;
published
property StretchMode: TfrxStretchMode;
end;
Объекты данного класса могут не только растягиваться. Они также могут быть "разорваны" на части в случае, когда объект не помещается на страницу целиком. При этом объект выводится по частям до тех пор, пока все его данные не будут выведены.
В классе определены следующие методы:
CalcHeight- должен вычислить и вернуть высоту объекта с учетом хранящихся в нем данных;InitPart- вызывается перед началом разбиения объекта;DrawPart- должен отрисовать очередную порцию данных, которые помещаются в объекте. Возвращаемое значение - это величина неиспользованного пространства, на котором не удалось вывести данные.