报表工具自定义常用控件编写

本文介绍了如何在FastReport VCL中创建自定义控件,包括从TfrxDialogControl类派生新控件,覆盖构造函数和GetDescription方法,以及注册和删除公共控件的方法。示例展示了如何创建一个增强版的TBitBtnControl。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

立即点击下载FastReport VCL v6.9最新版

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

-功能简介-   (1)任意增加、修改、删除报表,而无须改动源程序。   (2)自动生成功能,选择项目后快速生成表格式或自由式等常用报表。   (3)手动设计功能,可以设计出复杂的中国式报表及套打单据。   (4)直线、文本、表达式等对象的位置、大小、字体、颜色可以任意改变。   (5)具有中英翻译功能,表达式可以采用中文,适合中国人使用。   (6)表达式非常灵活,可以是字段、函数、变量组成的复杂表达式。如:取小数位(数量*单价*折扣/100,2)。   (7)表达式具有校验功能,如表达式有错误系统会立即提示。   (8)所有界面完全汉化,直观明了,可交付最终用户使用。   (9)采用动态数据窗口处理,无须调用PB之外的资源。   (10)表头和表体之间的格线,不会出现“裂缝”,改进了PB本身的缺陷。   (11)打印纸张、比例、横向、纵向打印等可以设置。   (12)数据源可以是后台数据库表或共享前台数据窗口数据,满足不同的需要。   (13)自动识别并适应显示分辨率。   (14)调用简便,与其它PB开发系统之接口简单。   (15)可以直接在Orcal,Sybase,Ms-sql等大型数据库下使用而无需任何改动。 (16)调用本系统之前已经设计好的报表,可以选择“原数据窗口格式”生成到本系统,把“死报表”变成“活报表”。 (17)对于下拉数据窗口的数据,可以采用本系统的“后台取数()”函数来实现取数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值