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

Top  Previous  Next

_img1

 

Базовым классом для всех компонентов 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 - должен отрисовать очередную порцию данных, которые помещаются в объекте. Возвращаемое значение - это величина неиспользованного пространства, на котором не удалось вывести данные.