首页 > 技术文章 > 报表自定义常用控件编写

ypldbk 2021-07-01 14:23 原文

FastReport 是用于 Delphi、C++ Builder、RAD Studio 和 Lazarus 的报告和文档创建 VCL 库。它提供了可视化模板设计器,可以访问 30 多种格式,并可以部署到云、网站、电子邮件和打印中。

FastReport 【慧都网免费下载】

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

推荐阅读