FastReport使用交流,FastReport中国社区FastReport联系电话 联系电话:17347785263

FastReport VCL开发人员手册:组件编辑器写作

来源:   发布时间:2021-07-07   浏览:次

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

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

默认情况下,任何通用控件编辑器(可以从元素上下文菜单或通过双击调用)都会创建 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”或者您没有覆盖此方法,则不会调用编辑器。如果您的组件没有编辑器并且您希望将项目添加到组件上下文菜单中,这将是必要的。

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

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

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

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

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

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

还想要更多吗?您可以点击阅读【FastReport报表2021最新资源盘点】,查找需要的教程资源。上是FastReport .NET慧正在网火热销售中!>>查看价格详情

本站文章除注明转载外,均为本站原创或翻译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明:文章转载自:FastReport控件中文网 [https://www.fastreportcn.com/]
本文地址:https://www.fastreportcn.com/post/3142.html

联系我们
  • 重庆总部 17347785263
购买
  • sales@evget.com
合作
  • business@evget.com


在线
客服
在线
QQ
电话
咨询
023-68661681
返回
顶部