Написание собственных мастеров |
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.
|