шожения для работы с локальными базами данных________________511

CBDep->ItemIndex = 0;

Этот оператор задает начальное значение индекса выпадающего списка
CBDep. Если бы этого оператора не было, то в начале выполнения приложения по-
льзователь не увидел бы текста в списке, поскольку по умолчанию индекс равен
-1. Задать же значение индекса в процессе проектирования невозможно, посколь-
ку Itemlndex — свойство, доступное только во время выполнения.

Теперь остановимся на основной процедуре приложения — RGFClick, которая
осуществляет фильтрацию и упорядочивание данных. Обращение к этой процеду-
ре делается при событиях OnClick компонента RGF — группы радиокнопок, и
кнопки Обновить. Эта кнопка введена в приложение, чтобы можно было, не пере-
ключая радиокнопок, обновлять отображение данных после изменения пользова-
телем имени подразделение или диапазона возраста. Удобно также сделать обраще-
ние к процедуре RGFClick при событии OnChange выпадающего списка отделов.

Первый оператор процедуры RGFClick задает индекс depfio, обеспечивающий
упорядочивание данных по подразделениям и алфавиту. Следующий оператор ана-
лизирует индекс группы радиокнопок, т.е. анализирует заданный пользователем
способ фильтрации. Если индекс равен нулю (отсутствие фильтрации), то фильтр
отключается установкой свойства Filtered в false. При других значениях индекса
это свойство устанавливается в true. Если индекс равен 2 (фильтрация по отде-
лам), то значение свойства Filter формируется равным Dep='...', где вместо точек
фигурирует текст, отображаемый в выпадающем списке CBDep. Если индекс равен
3 (фильтрация по возрасту), то значение свойства Filter формируется равным
(Year_b<==...)and(Year_b>=...), где вместо точек подставляются данные, введенные
пользователем в компонентах SEmin и SEmax. При этом приходится пересчиты-
вать заданный пользователем диапазон возраста в диапазон годов рождения, по-
скольку наложить ограничения непосредственно на вычисляемое поле возраста
Age невозможно.

Обратите внимание на то, что в аргументах функций IntToStr применено яв-
ное приведение типа к int. Без такого явного приведения типа компилятор C+4-Bu-
ilder выдает ошибку вида: «Ambiguity between '_fastcall Sysutils::lntToStr(__int64)' and
'_fastcall Sysutils::lntToStr(int)'>>, которая означает, что компилятор не может осуще-
ствить выбор между двумя перегруженными функциями с аргументами ти-
пов_int64 и int. Подробнее об этом см. в разделе12.2 главы 12.

Имеется еще один способ проводить фильтрацию — использовать обработку
события OnFilterRecord. Это событие происходит каждый раз при смене текущей
записи, если свойство Filtered установлено в true. В обработчик события передает-
ся по ссылке параметр Accept булева типа. Если проверка полей показывает, что
запись удовлетворяет фильтру, то Accept должен быть установлен в true. Если
условия фильтрации не выполнены, параметру Accept должно быть присвоено
значение false. Обработчик события OnFilterRecord, обеспечивающий те же функ-
ции, что и процедура RGFClick в приведенном выше примере, может иметь вид

void_fastcall TFormI::TablelFilterRecord(TDataSet *DataSet,

bool SAccept)
(

Accept = (RGF-> Itemlndex ==0) II

((RGF->ItemIndex == 2) && (TablelDep->Value==CBDep->Text)) || '
((RGF->ItemIndex == 3) &&

(TablelYear_b->Value <= (Year-SEmin->Value)) &&
(TablelYear_b->Value >= (Year-SEmax->Value))) ||
((TablelDep->Value == CBDep->Text) &&
(TablelYear_b->Value <= (Year-SEmin->Value)) &&
(TablelYear b->Value >= (Year-SEmax->Value)));