Форум: "Компоненты";
Текущий архив: 2005.10.30;
Скачать: [xml.tar.bz2];
ВнизКак повесить обработчик на открытие/закрытие DataSet a у компонен Найти похожие ветки
← →
Aleksandr. (2005-01-18 12:55) [0]Моему компоненту требуется при открытии заданного ему датасета заполнить некоторые данные с него, а при закрытии эти данные сбросить. Я сначала пошел по простому пути - при присваивании свойства DataSet его обработчики AfterOpen, AfterClose сохраняются, а ему назначаются свои внутренние, в теле которых выполняются и его обработчики. Но потом убедился, что последствия этого самые неприятные - в DT на форму кладу экземпляр TDataSet, назначаешь ему обработчики, кладу свой компонент, назначаю его DataSet вышеуказанный - и у того пропадают обработчики. Как можно по-умному сделать это отслеживание активности DataSet"a?
← →
Юрий Зотов © (2005-01-18 13:02) [1]> Aleksandr. (18.01.05 12:55)
> Но потом убедился, что последствия этого самые неприятные
Очевидно. Есть железное правило - компонент не имеет права использовать события, доступные юзеру. Причину и последствия Вы уже видели.
> Как можно по-умному сделать это отслеживание активности
> DataSet"a?
Через внутренний объект TDataLink. Посмотрите, как это сделано, например, у TDBEdit.
← →
Aleksandr. (2005-01-18 13:22) [2]Понял. Даже не знал этого правила...
Млин, есть в Инете статьи по использованию TDataLink? Что-то я сути в DBEdit не улавливаю...
← →
Юрий Зотов © (2005-01-18 13:35) [3]
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:36) [4]Такие сложности ради того, чтобы поиметь RecNo и RecordCount с TDataSet...
Страницы: 1 вся ветка
Форум: "Компоненты";
Текущий архив: 2005.10.30;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.035 c