摘要:介绍如何编写自定义的控件,用在报表的窗体上(如Edit,Button等)

 

Writing Custom Common Controls 编写自定义控件

FastReport contains a set of common controls which can be placed on dialogue forms inside reports. They are as follows:

FastReport包含以下控件,用于报表里的对话形式窗体。

TfrxLabelControl

TfrxEditControl

TfrxMemoControl

TfrxButtonControl

TfrxCheckBoxControl

TfrxRadioButtonControl

TfrxListBoxControl

TfrxComboBoxControl

TfrxDateEditControl

TfrxImageControl

TfrxBevelControl

TfrxPanelControl

TfrxGroupBoxControl

TfrxBitBtnControl

TfrxSpeedButtonControl

TfrxMaskEditControl

TfrxCheckListBoxControl

These controls correspond to the Delphi component palette standard controls. If the standard functionality is not sufficient then you can create your own common controls for use in your reports.

这些控件跟DELPHI标准控件一致,如果不能满足需求,可以自己编写控件。

The base class for all common controls is the “TfrxDialogControl” class, declared in the frxClass file:

(使用基类TfrxDialogControl)

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;

 

To create your own control you should inherit from this class and override at least the constructor and the “GetDescription” method. It will be necessary to create the common control and initialize it using the “InitControl” method in the constructor. The GetDescription method is for returning a description of the common control. As you can see the TfrxDialogControl class already has a large number of properties and methods in the public section. Move properties and events into the “published” section of your common control as required and also create new properties that are specific to your control.

编写自定义的控件应该从类TfrxDialogControl继承,并至少要重写constructor 和GetDescription方法。

 

Common control registration and deletion is performed by using the frxObjects global object methods declared in the frxDsgnIntf file:

控件的注册和删除使用全局方法frxObjects,方法在frxDsgnIntf 文件中。

frxObjects.RegisterObject(ClassRef: TfrxComponentClass;ButtonBmp: TBitmap);

frxObjects.Unregister(ClassRef: TfrxComponentClass);

During registration you should specify the control class name and its picture. The ButtonBmp size should be 16x16 pixels.

在注册过程中,你应该指定控制类名称和它的图片。ButtonBmp的尺寸应为16X16像素。

 

Let's look at an example of a common control that simplifies the functionality of the standard Delphi TBitBtn control.

让我们编写一个简单的例子,实现标准的Delphi控件Tbitbtn功能。

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;

{ following 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);   //初始化对象

{ set default size }

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;

it should have already been placed there, of course }

Bmp.LoadFromResourceName(hInstance, 'frxBitBtnControl');

frxObjects.RegisterObject(TfrxBitBtnControl, Bmp);

finalization

frxObjects.Unregister(TfrxBitBtnControl);

Bmp.Free;

end.

[翻译]Writing Custom Common Controls 编写自定义控件的更多相关文章

  1. [翻译]Writing Custom DB Engines 编写定制的DB引擎

    Writing Custom DB Engines  编写定制的DB引擎   FastReport can build reports not only with data sourced from ...

  2. [翻译]Writing Custom Report Components 编写自定义报表组件

    摘要:简单介绍了如何编写一个FastReport的组件,并且注册到FastReport中使用.   Writing Custom Report Components 编写自定义报表组件 FastRep ...

  3. [翻译]Writing Custom Wizards 编写自定义的向导

    Writing Custom Wizards  编写自定义的向导   You can extend FastReport's functionality with the help of custom ...

  4. Qt编写自定义控件二动画按钮

    现在的web发展越来越快,很多流行的布局样式,都是从web开始的,写惯了Qt widgets 项目,很多时候想改进一下现有的人机交互,尤其是在现有的按钮上加一些动画的效果,例如鼠标移上去变大,移开还原 ...

  5. [翻译]Writing Component Editors 编写组件的编辑器

    Writing Component Editors  编写组件的编辑器   All common control editors (opened from a control's context me ...

  6. [翻译] Writing Property Editors 编写属性编辑器

    Writing Property Editors 编写属性编辑器   When you select a component in the designer its properties are di ...

  7. (译)Getting Started——1.3.4 Writing a Custom Class(编写自定义的类)

     在开发IOS应用中,当你编写自定义的类时,你会发现很多的特殊场合.当你需要把自定义的行为和数据包装在一起时,自定义的类非常有用.在自定义的类中,你可以定义自己的存储.处理和显示数据的方法. 例如,I ...

  8. 编写Qt Designer自定义控件(二)——编写自定义控件界面

    接上文:编写Qt Designer自定义控件(一)——如何创建并使用Qt自定义控件 既然是控件,就应该有界面,默认生成的控件类只是一个继承了QWidget的类,如下: #ifndef LOGLATED ...

  9. Delphi编写自定义控件以及接口的使用(做了一个TpgDbEdit)

    写给觉得自己编写Delphi很复杂的人,包括自己. Delphi自己写控件其实并不难,难的在于开发复杂的控件.(其实,编程,很多东西都是会了就不难,因此,我怕自己日后觉得自己写控件很难,特意在这记录自 ...

随机推荐

  1. H.265:高清视频的最佳选择

    H.265技术经过2年发展,我们认为H.265高清监控产品市场化才真正开始.那么H.265的到来,大家又对该技术真正了解多少呢?下面就让我们一起来了解该技术.... HEVC/H.265标准于2013 ...

  2. Spring中使用JDBC

    Spring中的数据库异常体系 使用JDBC(不使用Spring)的时候,我们需要强制捕获SQLException,否则无法使用JDBC处理任何事情.SQLException表示尝试访问数据库的时候出 ...

  3. C语言指针的一些题目

    1.将从键盘输入的每个单词的第一个字母转换成大写字母输入时各单词以空格隔开,用“.”结束输入 解体思路:  把输入的字符存入字符数组中直到输入".",然后调用函数,把字符串的第一个 ...

  4. 检测Python程序的执行效率

    无意中被问到代码执行效率的问题,那就总结一下检测代码执行效率的几种方式: 一.装饰器 在函数上加装饰器,来得到函数的执行时间. def cst_time(func, *args, **kwargs): ...

  5. 7_bootstap之综合案例

    13.综合案例 13.1.案例需求 要求:页面顶部的三部分在PC屏幕上显示为一行,在移动设备屏幕上显示为一部分一行: 导航条在大屏幕展示全部内容,在移动设备上需要将内容能够折叠/展开: 用户名/密码/ ...

  6. 使用Fiddler对IPhone手机的应用数据进行抓包分析

    原文出自: http://www.cr173.com/html/20064_1.html Fiddler能捕获ISO设备发出的请求,比如IPhone, IPad, MacBook. 等等苹果的设备.  ...

  7. maven settings.xml 文件

    指定jdk 的版本: <profile> <id>jdk-1.8</id> <activation> <activeByDefault>tr ...

  8. JQ与JS等价代码

    选择器 //jquery var els = $(".el"); //原生方法 var els = document.querySelectorAll(".el" ...

  9. JSON.parse() 方法解析一个JSON字符串

    JSON.parse() 方法解析一个JSON字符串,构造由字符串描述的JavaScript值或对象.可以提供可选的reviver函数以在返回之前对所得到的对象执行变换. 语法EDIT JSON.pa ...

  10. 学习IIS & MVC的运行原理 (转)

    我一直疑惑于以下问题,从客户端发出一个请求,请求到达服务器端是怎样跟iis衔接起来的,而iis又是怎样读取我发布的代码的,并返回服务器上的文件.这其中是怎样的一个处理过程. 1:当你从浏览器中输入一个 ...