Как пользоваться данным документом
Для наилучшего понимания данного документа, вы должны быть знакомы с механизмом функционирования элементов управления для работы с базами данных и основополагающими принципами создания компонент, такими, как
• создание компонентов на основе существующих
• перекрытие конструкторов и деструкторов
• создание новых свойств
• чтение и запись значений свойств
• назначение обработчиков событий
Основные шаги по созданию компоненты, осуществляющей навигацию по данным
• Создайте или наследуйте компонент, который допускает свое отображение, но не ввод данных. Например, вы могли бы использовать компонент TMemo с установленным в True свойством ReadOnly. В примере, приведенном в данном документе, мы используем TCustomPanel. TCustomPanel позволяет себя отображать, но не вводить данные.
• Добавьте к вашему компоненту data-link object (объект для связи с данными). Данный объект позволяет управлять связью между компонентом и таблицей базы данных.
• Добавьте к компоненту свойства DataField и DataSource.
• Добавьте методы для получения и установления DataField и DataSource.
• Добавьте к компоненту метод DataChange, позволяющий управлять событиями OnDataChange объекта data-link.
• Перекройте конструктор компонента для создания datalink и перехвата метода DataChange.
• Перекройте деструктор компонента для очищения datalink.
Создание TDBPANEL
• Создайте или наследуйте компонент, который допускает свое отображение, но не ввод данных. В качестве отправной точки для нашего примера мы будем использовать TCustomPanel.
Выберите соответствующий пункт меню для создания нового компонента (он меняется от версии к версии Delphi), определите TDBPanel как имя класса, и TCustomPanel в качестве наследуемого типа. Определите любую страницу Палитры компонентов.
• Добавьте DB и DBTables в список используемых модулей.
• Добавьте data-link объект в секцию private вашего компонента. Данный пример отображает данные одного поля, поэтому мы используем TFieldDataLink для обеспечения связи между нашим новым компонентом и DataSource. Имя нового data-link объекта – FDataLink.
{ пример }
private
FDataLink: TFieldDataLink;
• Добавьте к компоненту свойства DataField и DataSource. Мы добавим соответствующий код для методов записи/чтения в последующих шагах.
Примечание: Наш новый компонент будет иметь свойства DataField и DataSource, FDataLink также будет иметь собственные свойства DataField и Datasource.
{ пример }
published
property DataField: string read GetDataField writeSetDataField;
propertyDataSource: TDataSource readGetDataSource write SetDataSource;
• Добавьте частные методы для чтения/записи значений свойств DataField и DataSource, и свойств DataField и DataSource для FDataLink.
{ пример }
private
FDataLink: TFieldDataLink;
functionGetDataField: String;
functionGetDataSource: TDataSource;
procedureSetDataField( ConstValue: string);
procedureSetDataSource(Value: TDataSource);
.
.
implementation
.
.
functionTDBPanel.GetDataField: String;
begin
Result := FDataLink.FieldName;
end;
functionTDBPanel.GetDataSource: TDataSource;
begin
Result := FDataLink.DataSource;
end;
procedureTDBPanel.SetDataField( ConstValue: string);
begin
FDataLink.FieldName := Value;
end;
procedureTDBPanel.SetDataSource(Value: TDataSource);
begin
FDataLink.DataSource := Value;
end;
• Добавьте частный метод DataChange, назначая событие объекта datalink OnDataChange. В методе DataChange добавьте код для отображения данных поля актуальной базы данных, связь с которой обеспечивает объект data-link. В нашем примере мы назначаем значение поля FDataLink заголовку панели.
{ пример }
private
.
.
procedure DataChange(Sender: TObject); = nil thenCaption := '';
implementation
.
.
procedureTDBPanel.DataChange(Sender: TObject);
begin
ifFDataLink.Field
elseCaption := FDataLink.Field.AsString;
end;
• Перекройте метод конструктора компонента Create. При реализации Create, создайте объект FDataLink и назначьте частный метод DataChange событию FDataLink OnDataChange.
{ пример }
public
constructor Create(AOwner: TComponent); override;
.
Читать дальше