彩票走势图

FastReport VCL报表控件开发者手册五:编写控件编辑器

原创|其它|编辑:郝浩|2012-11-29 11:03:01.000|阅读 537 次

概述:默认情况下,所有常用控件编辑器创建的是空白OnClick事件处理程序。可以通过编写自定义编辑器来更改该行为。因此,本文将主要介绍如何编写自定义编辑器。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

默认情况下,所有常用控件编辑器创建的是空白OnClick事件处理程序。可以通过编写自定义编辑器来更改该行为。此外,自定义编辑器可以添加额外的项目到控件的上下文菜单。

“TfrxComponentEditor”是所有编辑器的基类,在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”,或者方法为被重写时,编辑器将无法打开。如果你的控件没有编辑器,且你希望添加项目到控件的上下文菜单中,便返回“False”。

如果,编辑器添加项目到上下文菜单中,你应该重写“GetMenuItems”和“Execute”方法。

根据 “frxDsgnIntf” 文件中所定义的过程进行编辑器注册。

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

第一个参数是创建编辑器的控件类名。第二个参数是编辑器的类名。

接下来,一起来看看常用控件的一个简单编辑器。

FastReport VCL 报表控件要求编辑器代码存放在一个与组件代码文件夹同名的文件夹中,其后缀名为'Editor'。

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.

 

 


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:慧都控件网

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP