報表控件如何組件編輯器寫做

本文介紹了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事件