ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.04.2024
Просмотров: 95
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Алдымен пішінге оны жабу операциясын енгіземіз. Мұны бірнеше тәсілмен істеуге болады. Батырманы алып, оған « Закрыть» деп жазып, сосын OnClick өңдеуішке былай жазамыз:
Form2.Close; // негізінде жай ғана Close;
Бұл оператор оны пішін менюінен шақырған кезде жұмыс істейді, әрине меню (Standard астарындағы MainMenu компоненті) оған енгізілген жағдайда . Бұл туралы алда әңгімелейтін боламыз.
Бізге енді модальды пішінге жататын пішіндердің жабылу тәсілдерін қарастыруымыз керек. Оның сұхбат жасауға арналған терезелерінде сұрақтарға жауап беруді қажет етеді.
Ол үшін пішінге мына : «Иә», «Жоқ» «Болдырмау» және т.б жауаптарға сәйкес батырмаларды орналастыру қажет. Әр батырманың mrYes, mrNo, mrCansel және басқа мәндерге ие ModalResultқасиеті бар. Мұнда таңдалған батырманың ModalResult мәні пішіннің осы қасиетіне беріледі. Бұл қасиет объектілер инспекторынан көруге болатын пішін қасиетінің тізімінде жоқ, бірақ оны бағдарламалық түрде таба аламыз. («Form2» деп жазып нүкте қой, сосын шыққан тізімнен ізде)
ModalResult қасиетінің mrNone мәнінен бөлек мәні бар батырмасын бассақ ( тіпті батырмада өңдеуші болмаса да) ол пішіннің жабылуына әкеледі. Осыдан кейін пішіннің осы қасиетін таңдау арқылы, тұтынушының қойылған сұраққа қандай жауап бергенін анықтауға болады:
procedure Tform1.Button1Click(Sender: Tobject);
begin
Form2.ShowModal;
if Form2.ModalResult=mrYes then // Бұл оператор Form2 //жабылған соң ғана қолжетімді болады
Form1.Caption:='Тұтынушы оң жауап берді!';
end;
Осы мысалдан көріп отырғанымыздай, бір пішіннен басқа пішіннің қасиеттеріне , сол сияқты олардың компоненттеріне қатынас жасау үшін сол пішіннің аты көрсетілуі қажет екен. Оған қоса біз оның жұмысын сипаттайтын модулде қолданылатын мәліметтерге де қол жеткізе аламыз. Ол үшін де модулдің аты көрсетілуі қажет. Мысалы, Unit2 модуліндегі X айнымалымына қатынас жасау үшін: Unit2.X деп жазамыз.
Көбінесе бағдарламада пішінді жабу сәтінде белгілі бір операциялар орындалуы тиіс. Ол пішіннің OnClose оқиға өңдеуішінде жасалады. Ал енді пішінді жабуды болдырмауды қарастырайық. Осы мақсатта OnCloseQuery оқиға өңдеуішін қолдануға болады. Ол өңдеуіштегі CanClose логикалық айнымалысының қабылдайтын мәніне байланысты. Пішін CanClose:=True; мәнін қабылдағанда ғана жабылады.
Егер біз мынадай код жазсақ:
procedure Tform1.FormCloseQuery(Sender: Tobject; var CanClose: Boolean);
begin
CanClose:=False;
end;
онда тұтынушы бағдарламаны тіпті де жаба алмайды, тек оны Windows-тың Міндеттер Диспетчерін/Диспетчер задач/ қолданып қана орындай алады.
12. Ішкі бағдарламаларды құру және оларды қолдану
Ішкі бағдарламалар – бұл арнайы операцияларды орындау үшін қызмет ететін процедуралар мен функциялар. Delphi-дің көптеген стандартты ішкі бағдарламалары бар, соған қарамастан кейде мәліметтермен жиі қайталанатын операцияларды орындауға арналған, өзгеріп тұруы мүмкін өзіндік бағдарламалар құруға тура келеді.
Жалпылай айтқанда, бағдарламалаудың « жоғарыдан төмен»деген әдісі бар. Бұл әдіс бойынша есеп ішкі бағдарламалар түрінде өрнектеліп, бірнеше қарапайым есептерге бөлінеді.
Бөлінген есептердің өзі қажетіне қарай бағдарламалаушы алдына қойылған міндет қажетті деңгейге дейін жеңілдетілгенше (барынша қарапайым түрге келгенше ) бөліне береді. Осындай ішкі бағдарламалар процедуралар мен функцияларға жатады.
Бұлардың екеуімен де бірдей нәтижеге жетуге болады. Алайда олардың өзара айырмашылықтары бар. Процедура қажетті операцияларды орындап, тізімдегі өз параметрлеріне нәтижелерін қайтарып береді. Функция да осы айтылғандарды орындап, оған қосымша нәтижені өзіне меншіктелген мәнге қайтарады. Сонымен функция неғұрлым әмбебап объект.
Ішкі бағдарламаларды сипаттау Procedure немесе function түйінді сөздерінен басталып, содан соң жақшаға алынған оның параметрлерінің тізімдері жазылады. Функция жағдайында әрі қарай қос нүкте қойылып, қайтарылған мәннің типі көрсетіледі. Соңында ( ; ) міндетті түрде қойылуы қажет. Ал ішкі бағдарламаның коды түгелімен логикалық жақшаның ішіне жазылады. Функция үшін кодта функция арқылы қайтарылған мән меншіктелуі қажет. Ішкі програмаларды жалпы түрде жазайық:
procedure Процедура_аты(параметрлері); begin Процедура коды; end; | function Функция_аты(параметрлері): нәтиже_типі; begin Функция коды; Result:= нәтиже; end; |
Осылай сипатталған ішкі бағдарламалар негізгі бағдарламаға ол орындалуға шақырылғанға дейін орналастырылуы тиіс. Бұл орындалмаған жағдайда компиляция кезінде « белгісіз идентификатор» деген хабарлама шығады. Ал оны бақылап отыру оңай емес. Бұдан шығатын жол – ол ішкі бағдарламалардың тақырыбын бағдарламаның барлық мәліметтерін сипаттайтын орынға орналастыру.
Мұндағы параметрлер - өзара үтірмен ажыратылған, қос нүктеден соң типі көрсетілген идентификаторлар тізімі.
Егер тізімде түрлі типтегі идентификаторлар бірнешеу болса, онда олар бір-бірінен (; ) арқылы ажыратылып жазылады. Бәрі де жалпы мәліметтерді сипаттаудағыдай. Бұларды формальды параметрлер дейді.
Ішкі бағдарлама шақырылғанда олар үтірден кейінгі сол типтегі параметрге ауысады.
Ішкі бағдарламада параметрлер болмауы да мүмкін, ол кезде олар негізгі бағдарламадағы мәліметтердің өзімен операциялар орындай береді.
Енді жергілікті мәліметтер ұғымын енгізу керек. Бұл мәліметтер ішкі програмаларды шақыру кезінде ғана болатын және пайдаланылатын айнымалылар, тұрақтылар мен ішкі бағдарламалар. Олар осы ішкі бағдарламада сипатталуы тиіс. Оның сипатталу орны – тақырып пен Begin түйінді сөзінің арасы. Жергілікті мәліметтердің аты бас тақырыптағы мәліметтер атымен бірдей болуы мүмкін, ол жағдайда жергілікті айнымалы қолданылады, бірақ одан бас тақырыптағы сол атпен берілген айнымалыға өзгеріс жасалмайды.
Жергілікті процедуралар мен функциялар да тек сол ішкі бағдарламаның ішінде ғана сипатталып, қолданыла алады. Айталық, екі санның қосындысын табу бағдарламасын жазу керек болсын дейік. Ол басқан кезде ішкі бағдарлама орындалатын Пішінге енгізілетін батырмадан (Button компоненті) және операндтарды енгізуге арналған екі енгізу жолынан (Edit компоненттері) тұрады.
Енді процедураны жазайық:
var
Form1: TForm1;
A, B, kosyndy: Integer;
procedure kos(A, B: Integer);
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
A:=StrToInt(Edit1.Text);
B:=StrToInt(Edit2.Text);
Kos(A, B);
Caption:=IntToStr(kosyndy);
end;
procedure kos (A, B: Integer);
begin
kosyndy:=A+B;
end;
Мұнда процедура оны шақыруды ұйымдастыратын өңдеуіштен кейін орналасты және процедура тақырыбы мәліметтерді сипаттау блогына енгізілді. Бұл бағдарлама сол себептен орындалады. Бірақ оның орындалуы онша нақты емес сияқты.
Енді осы операцияларды функция көмегімен атқарайық:
var
Form1: TForm1;
A, B, kosyndy: Integer;
function kos (A, B: Integer): Integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
A:=StrToInt(Edit1.Text);
B:=StrToInt(Edit2.Text);
kosyndy=kos(A, B);// бұл жерде ненің, қайдан //алынатындығы әлдеқайда түсінікті сияқты
Caption:=IntToStr(kosyndy);
end;
function kos(A, B: Integer): Integer;
begin
Result:=A+B;
end;
Делфи-де көлемі өте үлкен мәліметтер құрылымымен, мыс, бірнеше мың (одан да көп) элементтерден тұратын жиымдармен жұмыс істеудің ерекшеліктері бар. Міне осындай көлемдегі мәліметтерді ішкі бағдарламаға беру кезінде жүйе бұған көп уақыт пен ресурс шығындайды.
Сондықтан бұл кезде ішкі бағдарламаға олардың элементтерінің өз мәндері емес, айнымалы не тұрақтының атындағы сілтеме жіберілетін болады.
Ол өзіміз аты бойынша жібергіміз келген параметрлердің алдына var түйінді сөзінен бұрын жазу арқылы жүргізіледі.
function Kos(A, B: Integer; var Arr: array[1..1000000] of Integer): Integer;
Біздің ішкі бағдарлама мен батырманы басу өңдеуішінің сипаттамасына зер салсақ, онда өңдеуіштің аты алдында (ButtonClick) Tform1 тұрғанын көреміз. Сонымен Delphi ButtonClick- ті Form1 обьектісінің әдісі ретінде құрып тұр. Ал оның алдындағы Т әрпі оның тек обьект әдісі ғана емес, обьект класының әдісі екенін көрсетеді. Мұны көп тереңдетпей айтсақ, біздер енді процедуралар мен функцияларды Tform1 класының әдісі ретінде сипаттау арқылы класс обьектілерін олардың аттарын көрсетпей-ақ пайдалануға мүмкіндік аламыз, бұл бізге өте ыңғайлы. Сонымен бізге ішкі бағдарламада Пішінде орналасқан қандай да бір компонентті (мыс, Button1) пайдаланғымыз келсе, онда оны Form1.Button1.Width:=100; деп емес, енді былай жазамыз:
Button1.Width:=100; //батырма ені
Мұнда оған қоса оның бірге қондырылған ішкі айнымалыларын (мыс, Sender обьектісі сияқты) пайдалануға мүмкіндік туады. Әрбір өңдеуіште бұл обьект шақырылатын ішкі бағдарлама көзін (біздің мысалда: Sender=Button1 қосынды табу көзін) көрсетеді.
Ішкі бағдарламаны класс әдісі ретінде сипаттай отырып, оны біз Delphi орналастырған – Tform1 класын сипаттау ішіне орналастыруымыз қажет. Button1Click процедурасының сипаттауы қайда орналасқанын қараңыз. Ол үшін Button1Click ішкі бағдарламаның ішіне меңзерді қойып, CTRL+SHIFT және меңзерді басқаратын «жоғары» немесе «төмен» батырмаларын бір уақытта басыңыз. Сонда біз ішкі бағдарламаның сипаттауына көшеміз, ал одан кері қайту үшін сол амалды тағы бір рет орындаңыз. Өз ішкі бағдарламаңыздың сипаттауын жаңа жолдың жанына қойсаңыз, онда TForm1 жазылмайтынын байқайсыз.
13. Delphi – дегі ерекше жағдайлар
Delphi – дегі ерекше жағдайлар тұрақты кездесіп тұрады. Ерекше жағдайлар деп нені айтамыз? Ол нәтижесінде қате пайда болатын және соның негізінде бағдарламаның орындалуы үзілетін жағдай. Мыс, нөлге бөлу – ерекше жағдайдың көп кездесетін түрінің бірі.
Мұндай жағдайдың алдын алу үшін, оған неге тексеру ұйымдастырмасқа, мыс, бөлшек бөлімінің нөлге тең болу шартын тексеретін. Әрине олай етуге болады. Бірақ көп жағдайда ерекше жағдайдың пайда болу көзі анық бола бермейді. Міне сондықтан да барлық жағдай үшін оны енгізе алмаймыз.
Бағдарламалаушы ерекше жағдайды бақылау үшін ол мүмкін болатын үзіндінің нұсқасын да, сол сияқты оның болуы мүмкін емес балама нұсқаны да дайындауы қажет. Сонда ерекше жағдайды бақылайтын оператор былай жазылар еді:
try
үзіндінің негізгі операторлары
excert
үзіндінің балама нұсқасы
end
Мұнда бағдарламаның негізгі бөлімін қамтитын оператордың try/excert бөлімі орындала бастайды. Осы бөлімнің қандай да бір операторында ерекше жағдай туа қалса, онда оның қалған операторлары орындалмай қалдырылады да, бөлімнің балама нұсқасы, яғни excert/end бөлігі орындалады. Ал егер бағдарламада ерекше жағдай байқалмаса, онда оның excert/end бөлігі қалдырылып кетеді.
Ерекше жағдайдың пайда болу/болмауына қарамастан, кодтың үзіндісі орындалуы қажет болған кейбір жағдайларда оны бақылап тексерудің тағы бір нұсқасын енгізуге болады:
try
операторлар
finally
қорытындылаушы әрекеттер
end;
Мұндағы негізгі операторлар дұрыс орындалуы да немесе ерекше жағдай туғызуы да мүмкін. Ал үзіндінің finally бөлігіндегі қорытындылаушы операторлар қандай жағдайда да орындалады.
14. Жолмен жұмыс
Delphi жүйесі жолдан тиісті ақпаратты ала отырып, оны өзімізге керек түрде бейнелеуге мүмкіндік береді. Бұл жүйеде жолды мынадай пішімдерге түрлендіруге болады. Олар:
-
Бүтін және жылжымалы нүктелі бөлшек түріндегі сандық пішім; -
Уақыт мерзім, уақыт-мерзім пішімі; -
Символдарды жоғарғы және төменгі регистрлерге түрлендіру; -
Жолдарды салыстыру, жолдан іздеу жүргізу және ішкі жолдарға көшіру және т.б.
Delphi тікелей жолдармен жұмыста бір ғана, конкатенация, яғни біріктіру операциясын қолдайды. Бұл операция бір жолды басқа жолға біріктіреді:
var S, S1, S2: String;
begin
S:=S1+S2;
end;
Мұндағы S – қорытқы жол, ал S1,S2 – жолдар. Жолдың ұзындығы, яғни саны Length(S: String) ішкі функциясы арқылы қайтарылады.