• [翻译]Writing Custom Common Controls 编写自定义控件


    摘要:介绍如何编写自定义的控件,用在报表的窗体上(如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.

  • 相关阅读:
    基于python实现自动化办公学习笔记一
    [django]上下文管理器
    [django]中间件
    分布式锁实现
    为什么Redis可以方便地实现分布式锁
    索引字段说明
    COUNT 和 IFNULL函数
    占用空间区别
    java排序算法(七):折半插入排序
    java排序算法(六):直接插入排序
  • 原文地址:https://www.cnblogs.com/moon25/p/5530571.html
Copyright © 2020-2023  润新知