Написание собственных мастеров

Top  Previous 

Вы можете расширить функциональность FastReport с помощью так называемых мастеров (wizards). FastReport, к примеру, содержит стандартный мастер "Мастер отчета", который вызывается из меню "Файл|Новый...".

 

В FastReport поддерживается 2 типа мастеров. Первый - это уже упомянутые мастера, вызываемые из меню "Файл|Новый...". Второй - это мастера, которые можно вызвать с панели инструментов "Мастера".

 

Базовый класс для любого мастера - это TfrxCustomWizard, определенный в файле frxClass.

 

TfrxCustomWizard = class(TComponent)

public

   constructor Create(AOwner: TComponent); override;

   class function GetDescription: String; virtual; abstract;

   function Execute: Boolean; virtual; abstract;

   property Designer: TfrxCustomDesigner read FDesigner;

   property Report: TfrxReport read FReport;

end;

 

Для того, чтобы написать свой мастер, необходимо наследоваться от этого класса и перекрыть, как минимум, методы GetDescription и Execute. Первый метод возвращает название мастера; второй метод вызывается при запуске мастера и должен вернуть True, если мастер отработал успешно и внес какие-либо изменения в отчет. Во время работы мастера можно обращаться к методам и свойствам дизайнера и самого отчета через свойства Designer и Report.

 

Регистрация и удаление мастера выполняется с помощью процедур, описанных в файле frxDsgnIntf:

 

frxWizards.Register(ClassRef: TfrxWizardClass; ButtonBmp: TBitmap; IsToolbarWizard: Boolean = False);

frxWizards.Unregister(ClassRef: TfrxWizardClass);

 

При регистрации указывается имя класса мастера, его картинку и то, является ли мастер размещаемым на панели инструментов "Мастера". Если мастер надо поместить на панель инструментов, размеры ButtonBmp должны быть 16х16 точек, иначе - 32х32 точки.

 

Рассмотрим примитивный мастер, который регистрируется в меню "Файл|Новый..." и добавляет в отчет новую страницу.

 

uses frxClass, frxDsgnIntf;

 

type

TfrxMyWizard = class(TfrxCustomWizard)

public

   class function GetDescription: String; override;

   function Execute: Boolean; override;

end;

 

class function TfrxMyWizard.GetDescription: String;

begin

Result := 'My Wizard';

end;

 

function TfrxMyWizard.Execute: Boolean;

var

Page: TfrxReportPage;

begin

{ запрещаем любые отрисовки в дизайнере }

Designer.Lock;

 

{ создаем новую страницу в отчете }

Page := TfrxReportPage.Create(Report);

{ создаем уникальное имя для страницы }

Page.CreateUniqueName;

{ устанавливаем размеры и ориентацию бумаги по умолчанию }

Page.SetDefaults;

 

{ обновляем страницы отчета и переключаем фокус на последнюю (добавленную) страницу }

Designer.ReloadPages(Report.PagesCount - 1);

end;

 

var

Bmp: TBitmap;

 

initialization

Bmp := TBitmap.Create;

{ загружаем картинку из ресурса - естественно, вы ее должны предварительно туда поместить }

Bmp.LoadFromResourceName(hInstance, 'frxMyWizard');

frxWizards.Register(TfrxMyWizard, Bmp);

 

finalization

frxWizards.Unregister(TfrxMyWizard);

Bmp.Free;

 

end.