Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Аршын апай.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.52 Mб
Скачать

Var I:integer;

begin

cbFiltr.Items.Clear;

With ADOQuery1 do begin

for i:=0 to FieldCount-1 do begin

If (Fields[I] is tIntegerField) then

cbFiltr.Items.Add(Fields[i].DisplayLabel);

end;

end;

end;

Бағдарламаны жібергеннен кейін тізім дұрыс қалыптасуын тексеріңіз.

  1. edFiltr компонентасында қолданушы сандық мәліметтерді енгізеді. Қолданушы қате жібермеу үшін, осы өрісте сандардан басқа ештене болмауы керек. Берілген OnKeyPress компонентасына өндеушіні құрамыз:

procedure TfmMain.edFiltrKeyPress(Sender: TObject; var Key: Char);

begin

if (Key=Chr(VK_BACK))or(Key=Chr(VK_DELETE)) then Exit;

if not(Key in ['0'..'9']) then Key:= #0;

end;

Бағдарламаны жіберіп, осы компонентаның жұмысын тексеріңіз.

  1. AdoQuery1 компонентасын Filter қасиетінде Design-Time орналастырыңыз төмендегідей мәнде: [Население]>100000000

  2. CheckFiltr компонентасы үшін төмендегі өндеушіні OnClick оқиғасына құрыңыз:

  3. procedure TfmMain.CheckFiltrClick(Sender: TObject);

begin

AdoQuery1.Filtered := CheckFiltr.Checked;

end;

Бағдарламаны жіберіп оның CheckFiltr компонентасында ерекшелінген бүкіл тізімде елдер халықтарымен 100 миллионнан аса тұрғынымен шығатынын тексеріңіз.

  1. cbFiltr, cbCond және edFiltr компоненттерін қолданып, қолданушы фильтр арқылы өзгерту алуы біздің келесі міндетіміз. Установите в для свойства компонента cbFiltr копонентасында Text қасиетінде Design-Time орналастырып, «Население» мәнін, ал осы қасиетке edFiltr компонентасында 1000000000 (сто миллионов). CheckFiltr компонентасында OnClick оқиғаларында өндеушілерімен төмендегідей болуы керек:

procedure TfmMain.CheckFiltrClick(Sender: TObject);

Var s,sf:string;I,j:longint;

begin

//Перекодировка и проверка числового значения:

try

i:=StrToInt(Trim(edFiltr.Text));

if i>2000000000 then begin

ShowMessage('Числовое значение слишком велико!');

AdoQuery1.Filtered :=False;CheckFiltr.Checked:=False;Exit;

end;

except

on E: EConvertError do begin

ShowMessage('Неверное числовое значение !');

AdoQuery1.Filtered :=False;CheckFiltr.Checked:=False;Exit;

end;

end;

//Поиск FieldName по значению DisplayLabel из cbFiltr.Text:

with ADOQuery1 do begin

for j:=0 to FieldCount-1 do begin

if Fields[j].DisplayLabel = cbFiltr.Text then begin

sf:=Fields[j].FieldName; Break;

end;

end;

end;

//Формирование значения свойства Filter для AdoQuery1:

If CheckFiltr.Checked then begin

s:='['+cbFiltr.Text +']';

if cbCond.Text='Больше' then s:=s+'>' else s:=s+'<';

s:=s+IntToStr(i);AdoQuery1.Filter:=s;

end;

AdoQuery1.Filtered := CheckFiltr.Checked;

end;

  1. Қолданушы жаңа фильтірмен қолданғанда ескіні жоюы керек. cbFiltr, cbCond и edFiltr компоненттері OnChange үшін өндеушіні құрып, оларды келесілерге жазыңыз:

CheckFiltr.Checked:=False;

Әр түрлі фильтірлердің жұмысы мен бағдарламаның орындалуын тексеріңіз.

  1. Фильтірді өзгертткенне кейін қолданушыға кейбір мәліметтерді енгізуге тура келеді.Оның формасында орын алмау үшін, оның тақырыбын қолданыңыз. DataSource1 компонентасының OnDataChange оқиғасын қолдану тиімді.:

procedure TfmMain.DataSource1DataChange(Sender: TObject; Field: TField);

begin

Caption :='Страны мира ('+IntToStr(AdoQuery1.RecordCount)+')';

end;

Бағдарламаны орындалу үшін жіберіңіз және де оның жұмысын тексеріңіз.