![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как повесить обработчик на открытие/закрытие DataSet'a у компонен [D7, WinXP]
Aleksandr. © (2005-01-18 12:55:00)Моему компоненту требуется при открытии заданного ему датасета заполнить некоторые данные с него, а при закрытии эти данные сбросить. Я сначала пошел по простому пути - при присваивании свойства DataSet его обработчики AfterOpen, AfterClose сохраняются, а ему назначаются свои внутренние, в теле которых выполняются и его обработчики. Но потом убедился, что последствия этого самые неприятные - в DT на форму кладу экземпляр TDataSet, назначаешь ему обработчики, кладу свой компонент, назначаю его DataSet вышеуказанный - и у того пропадают обработчики. Как можно по-умному сделать это отслеживание активности DataSet'a?
Aleksandr. (2005-01-18 13:36:00) [1]Такие сложности ради того, чтобы поиметь RecNo и RecordCount с TDataSet...
Юрий Зотов (2005-01-18 13:35:00) [2]
constructor TDBEdit.Create(AOwner: TComponent);
begin
...
FDataLink := TFieldDataLink.Create;
FDataLink.Control := Self;
FDataLink.OnDataChange := DataChange; // 1
FDataLink.OnEditingChange := EditingChange; // 2
FDataLink.OnUpdateData := UpdateData; // 3
FDataLink.OnActiveChange := ActiveChange; // 4
end;
1..4 - вот это и есть те самые обработчики, которых Вам не хватало. Подробности см. в коде TDBEdit.
Aleksandr. (2005-01-18 13:22:00) [3]Понял. Даже не знал этого правила...
Млин, есть в Инете статьи по использованию TDataLink? Что-то я сути в DBEdit не улавливаю...
Юрий Зотов (2005-01-18 13:02:00) [4]> Aleksandr. (18.01.05 12:55)
> Но потом убедился, что последствия этого самые неприятные
Очевидно. Есть железное правило - компонент не имеет права использовать события, доступные юзеру. Причину и последствия Вы уже видели.
> Как можно по-умному сделать это отслеживание активности
> DataSet'a?
Через внутренний объект TDataLink. Посмотрите, как это сделано, например, у TDBEdit.