报表控件如何组件编辑器写做

本文介绍了FastReport VCL组件编辑器写做。默认状况下,任何通用控件编辑器(能够从元素上下文菜单或经过双击调用)都会建立 OnClick 空白事件处理程序。

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

下载FastReport VCL v6.9最新版【慧都控件】ide

默认状况下,任何通用控件编辑器(能够从元素上下文菜单或经过双击调用)都会建立 OnClick 空白事件处理程序。这种行为能够经过编写自定义编辑器来代替。此外,编辑器容许将您本身的项目添加到组件上下文菜单中。函数

全部编辑器的基本类在 frxDsgnIntf 文件中声明:网站

TfrxComponentEditor = class(TObject)
  protected
    function AddItem(Caption: String; Tag: Integer;
      Checked: Boolean = False): TMenuItem;
  public
    function Edit: Boolean; virtual;
    function HasEditor: Boolean; virtual;
    function Execute(Tag: Integer; Checked: Boolean): Boolean; virtual;
    procedure GetMenuItems; virtual;
    property Component: TfrxComponent readonly;
    property Designer: TfrxCustomDesigner readonly;
  end;

若是您的编辑器没有在上下文菜单中建立本身的项目,您将须要覆盖两个方法,即Edit和HasEditor。第一个方法执行必要的操做(例如,显示对话框)并返回“True”,若是组件状态被修改。HasEditor若是你的组件有编辑器,方法应该返回“True”。若是它返回“False”或者您没有覆盖此方法,则不会调用编辑器。若是您的组件没有编辑器而且您但愿将项目添加到组件上下文菜单中,这将是必要的。ui

 

若是编辑器将项目添加到上下文菜单中,则应覆盖GetMenuItems(在此方法中,您能够借助调用AddItem函数建立菜单)和Execute(调用此方法,当您在组件菜单中选择一项时;响应所选菜单项应该在这里描述)方法。this

编辑器注册经过“frxDsgnIntf”文件中描述的过程执行:设计

frxComponentEditors.Register(ComponentClass: TfrxComponentClass; ComponentEditor: TfrxComponentEditorClass);

第一个参数是类名,要为其建立编辑器。第二个参数是编辑器类名。code

 

让咱们来看看咱们的共同控制简单的编辑器,它会显示一个窗口,咱们的元素名称并添加“已启用”和“可见”项目元素上下文菜单(选择项目时,Enabled和Visible性质会发生变化)。编辑器代码,根据FastReport的要求,能够放在与组件代码文件同名的文件中,添加Editor后缀(例如本例中的frxBitBtnEditor.pas)。component

uses frxClass, frxDsgnIntf, frxBitBtn;

type
  TfrxBitBtnEditor = class(TfrxComponentEditor)
  public
    function Edit: Boolean; override;
    function HasEditor: Boolean; override;
    function Execute(Tag: Integer; Checked: Boolean): Boolean; override;
    procedure GetMenuItems; override;
  end;

function TfrxBitBtnEditor.Edit: Boolean;
var
  c: TfrxBitBtnControl;
begin
  Result := False;
  {  Component property is edited component. In this case, it is TfrxBitBtnControl }
  c := TfrxBitBtnControl(Component);
  ShowMessage('This is ' + c.Name);
end;

function TfrxBitBtnEditor.HasEditor: Boolean;
begin
  Result := True;
end;

function TfrxBitBtnEditor.Execute(Tag: Integer; Checked: Boolean): Boolean;
var
  c: TfrxBitBtnControl;
begin
  Result := True;
  c := TfrxBitBtnControl(Component);
  if Tag = 1 then
    c.Enabled := Checked
  else if Tag = 2 then
    c.Visible := Checked;
end;

procedure TfrxBitBtnEditor.GetMenuItems;
var
  c: TfrxBitBtnControl;
begin
  c := TfrxBitBtnControl(Component);
  {  AddItem method parameters: menu item name, its tag and Checked/Unchecked condition }
  AddItem('Enabled', 1, c.Enabled);
  AddItem('Visible', 2, c.Visible);
end;

initialization
  frxComponentEditors.Register(TfrxBitBtnControl, TfrxBitBtnEditor);

end.

若是您对 FastReport 感兴趣,欢迎加入 FastReport QQ 交流群:702295239事件

相关文章
相关标签/搜索