Вниз
Скачать: CL | DM;

Визуальные компоненты для работы с данными   Найти похожие ветки 

← →
SB.John   (2002-04-10 08:15) [0]

Эти компоненты меняют свое состояние в зависимости от состояния DataSet"а к которому они привязаны. Например, при достижении конца таблицы, становятся недоступными некоторые кнопки DBNavigator"a. Как это реализуется. Просто не хочется писать код на событие в Table1 который делает например if Table1.Eof then TButton1.Enabled:=false. Таблица сама лежит в Датамодуле, а привязаные к ней кнопочки и пр. - в куче разных других форм. И вообще, мне кажется неправильно делать изменение визуальных компонентов в событиях компонента доступа к данным. Спасибо.


← →
Johnmen ©   (2002-04-10 09:18) [1]

>...мне кажется неправильно делать изменение визуальных
>компонентов в событиях компонента доступа к данным...

А где же еще их делать, ведь присутствует жесткая логическая связь - изменение параметров и свойств объектов доступа к данным приводит к некоей визуализации этого !


← →
Yuvich ©   (2002-04-10 12:24) [2]

>SB.John
Правильно! Не надо делать "изменение визуальных компонентов в событиях компонента доступа к данным."
Надо делать это (изменение визуальных компонентов) в событиях DataSource, привязанного к данному компоненту. При этом лучше всего DataSource положить рядом с компонентом (в форму).


← →
Johnmen ©   (2002-04-10 13:44) [3]

>Yuvich © : Позволю себе не согласиться ! Покольку
1. не только события DataSource могут менять некую визуализацию и
2. не всегда удобно держать кучу DataSource на один НД.


← →
Виктор Щербаков ©   (2002-04-10 13:53) [4]

Смотри в хэлпе Making a control data-aware в разделе Creating Custom Components.


← →
SB.John   (2002-04-10 14:08) [5]

Вот код выдранный из исходника 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) сам меняет доступность своих кнопок. Вопрос: как он узнает что данные изменились??? Наверняка отлавливает какие-то сообщения. Дальнейшая возня с исходными кодами ничего не дала по причине малой моей компетентости.


← →
SB.John   (2002-04-10 14:13) [6]

Виктор Щербаков ©

Пока я корябал свой ответ как раз пришел Ваш. Как раз то что нужно. Спасибо. Все, я полез копаться в хелпах.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.007 c
1-2587
vcrits
2002-04-19 17:36
2002.05.02
Как можно сделать в Delphi 6 из ActiveX библиотеки


1-2555
Tolstomordik
2002-04-18 15:36
2002.05.02
Программное определение DOS/Windows кодировки текстового файла!


1-2599
lipskiy
2002-04-19 16:28
2002.05.02
Можно ли подменить в системе информацию о текущем активном окне?


1-2506
Ilya2000
2002-04-20 20:36
2002.05.02
Основная


14-2678
fliz
2002-03-27 13:53
2002.05.02
прошу подсказать, какую модель из мониторов Митсубиси брать?




   Наверх