FastReport VCL是用于 Delphi、C++ Builder、RAD Studio 和 Lazarus 的报告和文档创建 VCL 库。它提供了可视化模板设计器,可以访问 30 多种格式,并可以部署到云、网站、电子邮件和打印中。
FastReport 包含一组常用控件,可以放置在报表内的对话表单上。它们如下:
TfrxLabelControl
 TfrxEditControl
 TfrxMemoControl
 TfrxButtonControl
 TfrxCheckBoxControl
 TfrxRadioButtonControl
 TfrxListBoxControl
 TfrxComboBoxControl
 TfrxDateEditControl
 TfrxImageControl
 TfrxBevelControl
 TfrxPanelControl
 TfrxGroupBoxControl
 TfrxBitBtnControl
 TfrxSpeedButtonControl
 TfrxMaskEditControl
 TfrxCheckListBoxControl
 这些控件元素对应于 Delphi 组件面板标准控件。如果标准功能不能满足您的要求,您可以创建自己的通用控件并在报告中使用它。
 所有公共控件的基本类是TfrxDialogControl在 frxClass 文件中声明的类:
TfrxDialogControl = class(TfrxReportComponent)
 protected
 procedure InitControl(AControl: TControl);
 public
 constructor Create(AOwner: TComponent); override;
 destructor Destroy; override;
 class function GetDescription: String; virtual;
 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;
 要创建您自己的控制元素,您应该从此类继承并至少覆盖构造函数和GetDescription方法。有必要创建公共控件并通过InitControl构造函数中的方法对其进行初始化。GetDescription方法是返回公共控件描述。从TfrxDialogControl类描述中可以看出,它已经在公共部分包含了大量的属性和方法。您需要将任何必要的属性/事件传输到公共控件的“已发布”部分,并且还需要创建新的属性,这对于您的元素是典型的。
 公共控件的注册和删除是通过frxObjectsfrxDsgnIntf 文件中声明的全局对象方法执行的:
frxObjects.RegisterObject(ClassRef: TfrxComponentClass; ButtonBmp: TBitmap);
 frxObjects.Unregister(ClassRef: TfrxComponentClass);
 在注册期间,您应该指定控件类名称及其图片。ButtonBmp 大小应为 16x16 像素。
 例如,让我们检查通用控件的示例,它简化了标准 DelphiTBitBtn控件的功能。
uses frxClass, frxDsgnIntf, Buttons;
type
 TfrxBitBtnControl = class(TfrxDialogControl)
 private
 FButton: TBitBtn;
 procedure SetKind(const Value: TBitBtnKind);
 function GetKind: TBitBtnKind;
 public
 constructor Create(AOwner: TComponent); override;
 class function GetDescription: String; override;
 property Button: TBitBtn read FButton;
 published
 { add new properties }
 property Kind: TBitBtnKind read GetKind write SetKind default bkCustom;
 { these properties are already declared in parent class }
 property Caption;
 property OnClick;
 property OnEnter;
 property OnExit;
 property OnKeyDown;
 property OnKeyPress;
 property OnKeyUp;
 property OnMouseDown;
 property OnMouseMove;
 property OnMouseUp;
 end;
constructor TfrxBitBtnControl.Create(AOwner: TComponent);
 begin
 { default constructor }
 inherited;
 { create required common control }
 FButton := TBitBtn.Create(nil);
 FButton.Caption := ‘BitBtn’;
 { initialize it }
 InitControl(FButton);
 { it will have such size by default }
 Width := 75;
 Height := 25;
 end;
class function TfrxBitBtnControl.GetDescription: String;
 begin
 Result := ‘BitBtn control’;
 end;
procedure TfrxBitBtnControl.SetKind(const Value: TBitBtnKind);
 begin
 FButton.Kind := Value;
 end;
function TfrxBitBtnControl.GetKind: TBitBtnKind;
 begin
 Result := FButton.Kind;
 end;
var
 Bmp: TBitmap;
initialization
 Bmp := TBitmap.Create;
 {Load picture from resource. Of course, you should beforehand place it there.}
 Bmp.LoadFromResourceName(hInstance, ‘frxBitBtnControl’);
 frxObjects.RegisterObject(TfrxBitBtnControl, Bmp);
finalization
 frxObjects.Unregister(TfrxBitBtnControl);
 Bmp.Free;
end.
如果您对 FastReport 感兴趣,欢迎加入 FastReport QQ 交流群:702295239
                










