Компонент для палитры Delphi
Первый компонент, который мы должны создать - TfrxIBXComponents
, он будет помещен в палитру компонент FastReport при регистрации движка в среде Delphi. При помещении этого компонента в проект Delphi автоматически добавит ссылку на модуль нашего движка в список uses. На этот компонент удобно возложить еще одну задачу - определить у него свойство DefaultDatabase
, которое ссылается на уже имеющееся в проекте подключение к БД. По умолчанию все компоненты TfrxIBXTable
и TfrxIBXQuery
будут ссылаться на это подключение.
Компонент необходимо наследовать от класса TfrxDBComponents
:
TfrxDBComponents = class(TComponent)
public
function GetDescription: String; virtual; abstract;
end;
Единственная функция должна возвращать описание, например 'IBX Components'. Реализация компонента TfrxIBXComponents
следующая:
type
TfrxIBXComponents = class(TfrxDBComponents)
private
FDefaultDatabase: TIBDatabase;
FOldComponents: TfrxIBXComponents;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function GetDescription: String; override;
published
property DefaultDatabase: TIBDatabase read FDefaultDatabase write FDefaultDatabase;
end;
var
IBXComponents: TfrxIBXComponents;
constructor TfrxIBXComponents.Create(AOwner: TComponent);
begin
inherited;
FOldComponents := IBXComponents;
IBXComponents := Self;
end;
destructor TfrxIBXComponents.Destroy;
begin
if IBXComponents = Self then
IBXComponents := FOldComponents;
inherited;
end;
function TfrxIBXComponents.GetDescription: String;
begin
Result := 'IBX';
end;
Мы определяем глобальную переменную IBXComponents, которая будет ссылаться на экземпляр компонента TfrxIBXComponents
. На случай, если вы несколько раз поместили компонент в проект (хотя это и не имеет смысла), предусмотрено сохранение ссылки на предыдущий компонент и восстановление ее после удаления компонента.
В свойство DefaultDatabase
можно поместить ссылку на уже имеющееся в проекте подключение к БД. Мы напишем компоненты TfrxIBXTable
, TfrxIBXQuery
таким образом, чтобы они могли использовать это подключение по умолчанию (собственно, ради этого нам нужна глобальная переменная IBXComponents).