9.
Anchors қасиетінде
cbFiltr,
cbCond және
edFiltr компонеттерінің
орналасуына қол жеткізіңіз, бос орынды
cbFiltr копоненті орналассын,
paBot
компоненті өзінің өлшемдерін өзгертпесін.
10.
cbFiltr копонентінің құрылымын өрістер үшін құру керек,
фильтірдін шарттарын оған қоятындай етіп. Ол өрістер сандық типте болуы
керек, ал екіншіден, экранға берілген тізіммен шығару керек. МҚ – да
олардың шын аттары сәйкес келмеуі де мүмкін.
cbFiltr өндеушісі үшін
OnEnter жағдайын төмендегідей етіп құрамыз:
procedure TfmMain.cbFiltrEnter(Sender: TObject);
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;
Бағдарламаны жібергеннен кейін тізім дұрыс қалыптасуын тексеріңіз.
11.
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;
Бағдарламаны жіберіп, осы компонентаның жұмысын тексеріңіз.
12.
AdoQuery1 компонентасын Filter қасиетінде
Design-Time
орналастырыңыз төмендегідей мәнде:
[Население]>100000000
13.
CheckFiltr компонентасы үшін төмендегі өндеушіні
OnClick
оқиғасына құрыңыз:
14. procedure TfmMain.CheckFiltrClick(Sender: TObject);
begin
AdoQuery1.Filtered := CheckFiltr.Checked;
end;
Бағдарламаны жіберіп оның
CheckFiltr компонентасында ерекшелінген
бүкіл тізімде елдер халықтарымен 100 миллионнан аса тұрғынымен
шығатынын тексеріңіз.
15.
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('Числовое значение слишком велико!');
CheckFiltr.Checked:=False;Exit;__end;__except__on_E:_EConvertError_do_begin'> 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;
16. Қолданушы жаңа фильтірмен қолданғанда ескіні жоюы керек.
cbFiltr,
cbCond и
edFiltr компоненттері OnChange үшін өндеушіні құрып,
оларды келесілерге жазыңыз:
CheckFiltr.Checked:=False;
Әр түрлі фильтірлердің жұмысы мен бағдарламаның орындалуын
тексеріңіз.
17. Фильтірді өзгертткенне кейін қолданушыға кейбір мәліметтерді
енгізуге тура келеді.Оның формасында орын алмау үшін, оның тақырыбын
қолданыңыз.
DataSource1 компонентасының
OnDataChange оқиғасын
қолдану тиімді.: