Встаньте на компонент chbOKP - TCheckBox ("включая код"), и в инспекторе свойств перейдите на закладку Events. Дважды щелкните напротив события OnClick, будет создана соответсвтующая процедура chbOKPClick. Введите в тело процедуры следующие строки:
procedure TfmPCFindDetails.chbOKPClick(Sender: TObject);
begin
inherited;
if Self.chbOKP.Checked then
// если флажок установлен
begin
Self.edOKP.Enabled:=True;
// включить доступ к полю редактирования условия поиска по коду ОКП
Self.sbtOKP.Enabled:=True;
// включить доступ к кнопке вызова справочника ОКП для выбора кода
Self.edOKP.Color:=clWindow;
// изменить цвет поля редактирования условия посика по коду ОКП
end
else
// если флажок не установлен
begin
Self.edOKP.Enabled:=False;
// выключить доступ к полю редактирования условия поиска по коду ОКП
Self.sbtOKP.Enabled:=False;
// выключить доступ к кнопке вызова справочника ОКП
Self.edOKP.Color:=clBtnFace;
// изменить цвет поля редактирования условия посика по коду ОКП
end;
end;
Представленная выше процедура позволяет включить в условия поиска деталей в базе данных дополнительное условие поиска по значению атрибута Код ОКП. Собственно код (или его фрагмент) можно ввести вручную в соответсвующее поле. Кроме этого можно с помощью специальной кнопки загрузить модальную форму с деревом классификатора ОКП и выбрать код в визуальном режиме. Построение вспомогательного модального окна для выбора кода ОКП будет описано в следующем уроке (оно носит универсальный характер и может пригодится в будущем для других модулей приложения). На данном уроке ограничимся ручнымм вводом фрагмента кода в поле edOKP.
Для включения дополнительного условия поиска в наш алгоритм внесем следующие изменения в процедуру sbtFindClick, описанную выше:
procedure TfmPCFindDetails.sbtFindClick(Sender: TObject);
begin
inherited;
if Self.chbOKP.Checked then
// если флажок поиска по коду ОКП установлен
begin
if Self.edOKP.Text<>'' then Self.vlftv.stAttrCondition:='Код ОКП:Код ОКП Like '+QuotedStr(Self.edOKP.Text+'%')
// если в поле условия поиска по коду ОКП есть текст
// сформировать условие поиска и поместить его в компонент TVLFindTableView
else Self.vlftv.stAttrCondition:='';
// если в поле условия поиска по коду ОКП нет текста
// обнулить условие поиска в компоненте TVLFindTableView
end
else
// если флажок поиска по коду ОКП не установлен
begin
Self.vlftv.stAttrCondition:='';
// обнулить условие поиска в компоненте TVLFindTableView
end;
Self.vlftv.stProductName:=Self.edShifr.Text+'%';
// поместить в качестве условия поиска по ключевому атрибуту
// содержимое поля edShifr + "%"
Self.vlftv.RefreshControl;
// регенерировать таблицу поиска
end;
Обратите внимание на алгоритм формирования условия поиска объектов в базе данных по атрибуту. Более подробное описание смотрите TVLFindTableView.
Скомпилируйте проект, загрузите приложение, загрузите окно поиска деталей в базе данных, оставьте поле поиска по ключевому атрибуту не заполненным, включите режим поиска по атрибуту Код ОКП, введите в поле поиска кода ОКП значение "31" и нажмите кнопку - sbtFind. Результат поиска отображен на рисунке 8.9.
Рис. 8.9.
Далее...