![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Визуальные компоненты для работы с данными [D5, D6, Informix]
SB.John © (2002-04-10 08:15:00)Эти компоненты меняют свое состояние в зависимости от состояния DataSet"а к которому они привязаны. Например, при достижении конца таблицы, становятся недоступными некоторые кнопки DBNavigator"a. Как это реализуется. Просто не хочется писать код на событие в Table1 который делает например if Table1.Eof then TButton1.Enabled:=false. Таблица сама лежит в Датамодуле, а привязаные к ней кнопочки и пр. - в куче разных других форм. И вообще, мне кажется неправильно делать изменение визуальных компонентов в событиях компонента доступа к данным. Спасибо.
SB.John (2002-04-10 14:13:00) [1]Виктор Щербаков ©
Пока я корябал свой ответ как раз пришел Ваш. Как раз то что нужно. Спасибо. Все, я полез копаться в хелпах.
SB.John (2002-04-10 14:08:00) [2]Вот код выдранный из исходника TDBNavigator:
procedure TDBNavigator.DataChanged;
var
UpEnable, DnEnable: Boolean;
begin
UpEnable := Enabled and FDataLink.Active and not FDataLink.DataSet.BOF;
DnEnable := Enabled and FDataLink.Active and not FDataLink.DataSet.EOF;
Buttons[nbFirst].Enabled := UpEnable;
Buttons[nbPrior].Enabled := UpEnable;
Buttons[nbNext].Enabled := DnEnable;
Buttons[nbLast].Enabled := DnEnable;
Buttons[nbDelete].Enabled := Enabled and FDataLink.Active and
FDataLink.DataSet.CanModify and
not (FDataLink.DataSet.BOF and FDataLink.DataSet.EOF);
end;
Думаю все понятно. Когда набор данных каким-либо образом меняется навигатор (не DataSet и не DataSource) сам меняет доступность своих кнопок. Вопрос: как он узнает что данные изменились??? Наверняка отлавливает какие-то сообщения. Дальнейшая возня с исходными кодами ничего не дала по причине малой моей компетентости.
Виктор Щербаков (2002-04-10 13:53:00) [3]Смотри в хэлпе Making a control data-aware в разделе Creating Custom Components.
Johnmen (2002-04-10 13:44:00) [4]>Yuvich © : Позволю себе не согласиться ! Покольку
1. не только события DataSource могут менять некую визуализацию и
2. не всегда удобно держать кучу DataSource на один НД.
Yuvich (2002-04-10 12:24:00) [5]>SB.John
Правильно! Не надо делать "изменение визуальных компонентов в событиях компонента доступа к данным."
Надо делать это (изменение визуальных компонентов) в событиях DataSource, привязанного к данному компоненту. При этом лучше всего DataSource положить рядом с компонентом (в форму).
Johnmen (2002-04-10 09:18:00) [6]>...мне кажется неправильно делать изменение визуальных
>компонентов в событиях компонента доступа к данным...
А где же еще их делать, ведь присутствует жесткая логическая связь - изменение параметров и свойств объектов доступа к данным приводит к некоей визуализации этого !