Компонентің
қасиеті
Қасиеттің
мәні
Name
CheckFiltr
Left
1
Top
3
Caption
Фильтр по:
6. Сізде суреттегідей шығу керек:
7. Бағдарлама барысында қолданушы ешқандай жаңа мәндерді
қоспайды және де өшірмейді, сондықтан да
DBNavigator1 – дың бүкіл батырмаларын экранға
қоюдың еш қажеті жоқ. Навигатордың сыртқы түрін
өзгертеміз. ShowHint қасиетінде True копонентасын
қоямыз, содан кейін
Hints қасиетінде тік
төртбұрышты батырманы шертіңіз. Экранда
ағылшын тіліндегі сөздер суретте көрсетілгендей
шығады, оларды қазақшаға аударыңыз. Бағдарламаны
іске қосып сөздер дұрыс және мағыналы шығатынына көз жеткізіңіз. Содан
кейін VisibleButtons қасиетінің ішіндегі қасиетіне навигатордың 4
батырмаларын қалдырыңыз – 1-ші көшу, ақырғысын, алдындағысын және
келесісін. paBot. тақтасының оң жағына навигаторды кішірейтіңіз.
8. cbCond және edFiltr аттарын меншіктеп, paFiltr панеліне 2
компонентаны TComboBox және Tedit – та қосамыз. cbCond копонентінің
қасиетінде Items-та төртбұрышты батырманы шертіп оған «Больше» және
«Меньше» мәнін беріңіз. Внешний вид панели paFiltr панелінің сыртқы
көрінісі суретке сәйкес болуы:
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 оқиғасын
қолдану тиімді.:
Достарыңызбен бөлісу: |