zoukankan      html  css  js  c++  java
  • [翻译]Writing Component Editors 编写组件的编辑器

    Writing Component Editors  编写组件的编辑器

    All common control editors (opened from a control's context menu or by double-clicking) create blank OnClick event handlers by default. This behavior can be altered by writing a custom editor. Also, the custom editor can add extra items to the component's context menu.

    The base class for all editors is “TfrxComponentEditor”, declared in the frxDsgnIntf file:

    所有的控件编辑(从一个控件的右键菜单或双击打开)默认创建空白的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;

    If your editor does not create its own items in the contextual menu you will need to override two methods, “Edit” and “HasEditor.” The first method performs essential actions (for example, displays the dialogue box) and returns “True” if the component's content was modified. The “HasEditor” method should return “True” if your component has an editor. If it either returns “False” or the method is not overridden the editor will not be opened. It should return “False” if your component does not have an editor and you wish to add items to the component's context menu.

    如果你的编辑器不创建项目右键菜单,你需要重写方法“Edit”和“HasEditor”。第一个方法执行必要的行动(例如,显示对话框并返回“True”,如果组件的内容被修改)。如果你的组件有一个编辑器,“HasEditor”方法应该返回“True”否则返回“假”或方法不重写编辑器将不被打开。

    如果你的组件没有编辑器并且你希望将项目添加到组件的右键菜单中,则应该返回“False”。

    If the editor adds items to the context menu you should override “GetMenuItems” (where you can create a menu using the AddItem function) and “Execute” (where you can create the actions initiated by selecting the items in the component menu).

    如果编辑器添加项目到上下文菜单应该重写”GetMenuItems”(在那里你可以创建一个菜单使用AddItem函数)和“Execute”(在那里你可以创建actions 在构件菜单选择启动)。

    Editor registration is performed using the procedure defined in the “frxDsgnIntf” file:

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

    The first parameter is the class name of the component for which the editor is being created. The second parameter is the class name of the editor.

    编辑器的注册使用frxDsgnIntf单元的以下过程:

    第一个参数是编辑器对应组件的类名,第二个参数是编辑器的类名。

    Let's look at a simple editor for our common control, which will display a window with our element name and also add "Enabled" and "Visible" items to control's context menu (which change the “Enabled” and “Visible” properties). FastReport requires that the Editor code is placed in a file having the same name as the file having the component’s code, with 'Editor' added as suffix (frxBitBtnEditor.pas in our case).

    让我们看一个简单的控件的编辑器,将用我们的元素名称显示一个窗口,还添加“Enabled”和“Visible”的项目,以控制的上下文菜单(改变了“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.

    可以参考 frxRichEditor.pas 等单元。

  • 相关阅读:
    五个问题,三大策略,手把手教你定制App性能监控方案
    Oracle外部表详解 转
    EBS 一揽子采购协议 转载
    xsl特殊符号输出总结 转
    设计模式目录
    控制CPU使用率,让它画一条弧线
    C# 俄罗斯方块
    程序员能力矩阵
    如何在IIS上搭建WAP网站
    利用SQL2005的row_number()重新写了个自定义分页存储过程
  • 原文地址:https://www.cnblogs.com/moon25/p/5531295.html
Copyright © 2011-2022 走看看