Иерархия классов 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
- возвращает описание объекта.
Следующие методы вызываются при изменении соответствующих свойств. Вы можете перекрыть их, если вам нужна дополнительная обработка:
SetParent
SetLeft
SetTop
SetWidth
SetHeight
SetFont
SetParentFont
SetVisible
FontChanged
В классе 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
- должен отрисовать очередную порцию данных, которые помещаются в объекте. Возвращаемое значение - это величина неиспользованного пространства, на котором не удалось вывести данные.