185
ҚАЗАҚСТАН РЕСПУБЛИКАСЫНЫҢ БIЛIМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛIГI СЕМЕЙ ҚАЛАСЫНЫҢ ШӘКӘРIМ АТЫНДАҒЫ МЕМЛЕКЕТТIК УНИВЕРСИТЕТI 3-деңгейлi АӘК құжаты ПОӘК ПОӘК 042-18- 11.1.20.84/01- 2013 ПОӘК «Визуалды бағдарламалау» пәнінен оқу-әдістемелік материалдар №1 баспа 26.08.201 3 ж. «Визуалды бағдарламалау» пәнінен ОҚУ -ӘДІСТЕМЕЛІК КЕШЕНІ 5В070200 - Автоматтандыру және басқару мамандығы үшiн ОҚУ-ӘДІСТЕМЕЛІК МАТЕРИАЛДАР

Ќазаќстан Республикасыныњ бiлiм жєне ѓылым ... · Web viewЖиектемелі фигураларды салғанда тек қарындаш

  • Upload
    others

  • View
    37

  • Download
    0

Embed Size (px)

Citation preview

ҚАЗАҚСТАН РЕСПУБЛИКАСЫНЫҢ БIЛIМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛIГI

СЕМЕЙ ҚАЛАСЫНЫҢ ШӘКӘРIМ АТЫНДАҒЫ МЕМЛЕКЕТТIК УНИВЕРСИТЕТI

3-деңгейлi АӘК құжаты ПОӘКПОӘК 042-18-

11.1.20.84/01-2013ПОӘК «Визуалды бағдарламалау» пәнінен

оқу-әдістемелік материалдар

№1 баспа 26.08.2013 ж.

«Визуалды бағдарламалау» пәнінен ОҚУ -ӘДІСТЕМЕЛІК КЕШЕНІ

5В070200 - Автоматтандыру және басқару мамандығы үшiн

ОҚУ-ӘДІСТЕМЕЛІК МАТЕРИАЛДАР

Семей2013

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 2-сі

Алғы сөз

1. ҚҰРАСТЫРҒАНҚұрастырушы________ Р.С.Бекбаева, техника

ғылымдарының кандидаты, «Автоматика және электротехника» кафедрасының доценті м.а.«_____» ____________________ 2013 ж.

2. ТАЛҚЫЛАНДЫ2.1. Семей қаласының Шәкәрім атындағы мемлекеттік университетінің «Автоматика және электротехника» кафедрасы отырысында қарастырылды.

Хаттама № 1 « 29 » тамыз 2013 ж.Кафедра меңгерушісі __________ А.Д.Золотов

2.2. Факультеттің оқу-әдістемелік бюросы отырысында қарастырылды.

Хаттама № 1 « 11 » қыркүйек 2013 ж.Төрағасы __________ Р.С.Бекбаева

3. БЕКІТІЛДІУниверситеттің Оқу-әдістемелік кеңесі отырысында

баспаға жіберуге ұсынылды және мақұлданды. Хаттама № 1 « 18 » қыркүйек 2013ж.ОӘК төрағасы___________ Г.К.Искакова

4. АЛҒАШ РЕТ ЕНГІЗІЛІП ОТЫР

2

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 3-сі

Мазмұны

1 Дәрістер 42 Практикалық сабақтар 873 Курстық жұмыс 140

3

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 4-сі

1 ДӘРІСТЕР

1 DELPHI ОРТАСЫМЕН ТАНЫСУ1.1 Негізгі ұғымдар. Бағдарлама құру кезінде шешілетін

тапсырмалар

Delphi – Windows операциялық жүйесінде жұмыс істеуге бағытталған бағдарлама құру ортасы. Delphi - дегі бағдарлама қазіргі көркемдік жобалау технологиясының негізінде құрылады, ал олар өз кезегінде объектілі – бағытталған бағдарламалау идеясына сүйенеді (2 – ші бөлімді қараңыздар). Delphi – дегі бағдарлама Object Pascal тілінде жазылады, ол Turbo Pascal тілінің қабылдауышы мен дамушысы болып табылады. Turbo Pascal бағдарламалау тілі мен ол қолданылатын біратты интегралдық құру ортасы кезінде бағдарламалық өнімді құру құралы, соның ішінде бағдарламалауды оқып – үйренетін құрал негізінде кеңінен танымал болған. Бұл танымалдық тілдің қарапайымдылығы, жоғары сапалы компилятор және қолайлы құру ортасына байланысты. Бірақ бағдарламалық технологиялар бір орында тұрмай ары қарай дамиды, сондықтан Borland фирмасы (1998 жылдың сәуір айынан бастап Inprise Corporation) тағы бір жаңалық ашады: Turbo Pascal тілінің орнына Object Pascal тілі келеді, ол объектілі – бағытталған бағдарламалау концепциясына сүйенеді.

Delphi және Object Pascal көп жылғы эволюцияның нәтижесі болып саналады, сондықтан бүгінгі таңда олар қазіргі компьютерлік технологияның өнімі болып табылады. Жеке тұрғыдан алғанда оны былай айтуға болады, Delphi – дің көмегімен бағдарламаның әртүрлі типін – консольді қосымшалардан бастап, деректер базасы мен Internet – те жұмыс істейтін бағдарлама құруға болады.

Delphi бағдарлама құратын және жаңа бағдарламаны даярлайтын бағдарлама құру әдістерінен, сондай-ақ құрауыштар кітапханасынан тұрады. Delphi бағдарламасы – бұл өзара байланысқан бірнеше файлдар. Кез – келген бағдарлама жоба файлы (мұндай файл .dpr кеңейткішінен тұрады) және бір немесе бірнеше модульден тұрады (.pas кеңейткіші бар файлдар). Жоба файлы бағдарламаның жинақтаушы бөлігі болып табылады, ол өте үлкен емес және Delphi бағдарламалау жүйесінде автоматты түрде қалыптасады.

Класс – берілгендер мен оларға әрекет жасайтын арнайы тип. Ол өріс, әдіс және қасиеттерден тұрады. Кластың данасы болып объект табылады.

Объект – белгілі тапсырманы орындауға арналған, екілік бағдарламалық кодтың автономды бөлігі болып саналады. Объектінің барлық құрауыштары объект болып табылады, бірақ керісінше емес.

Құрауыш – Delphi – дің стандартты класы, Delphi ортасында көрнекілік бағдарламаны іске асыруға арналған. Құрауыш болып меню, батырмалар, стандартты диалогтар (мысалы, қаріпті таңдау, файлды сақтау), енгізу терезесі

4

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 5-сі

және редактірлеу терезесі және т.б. табылады. Құрауыштар өріс, әдіс және қасиеттерден тұрады. Қолданушының құрауыштармен жұмысы, оны негізгі терезедегі Құрауыштар палитрасынан таңдап және пішіннің терезесіне орналастырып, олардың қасиеттері мен мазмұнына қарай белгілі оқиғаға ықпалын икемдеу болып табылады. Delphi құрауыштары қолданушымен жылдам қарым – қатынас жасау үшін қолданылады.

Құрауыштар қасиеті – белгілі объекті берілгенде немесе өзгергенде автоматты түрде оның атрибутын өзгертетін құрауыштың өрісі. Құрауыштың функциясын (атқаратын міндетін) анықтайды.

Құрауыштың оқиғасы – құрауыштың қолданушы немесе операциялық жүйемен әрекеттесуінің нәтижесінде пайда болады. Әрбір құрауыш стандартты оқиғалардың жиынынан тұрады.

Құрауыш хабарламаны өңдеу әдісінен тұрады, олардың әрқайсысы құрауыштың белгілі оқиғаға ықпалын анықтайды (пернені басу немесе тышқанды жылжыту).

Оқиғаны өңдеу деп – өрбіген оқиғаға жауап ретінде белсенділік танытатын қосымшаның код бөлімін айтамыз.

Құрауыш пішінге немесе басқа құрауышқа тиісті болуы мүмкін.Пішін деп - Windows терезесінің қасиеттеріне ие және біркелкі

функционалдық тағайындалумен байланысқан, құрауыштарды орналастыруға негіз болатын көрнекілік құрауышты айтамыз.

Қосымшаның пішіні қолданушылық интерфейстің негізі болып саналады. Қосымшада бірнеше пішін болуы мүмкін.

Пішін туралы ақпарат екі типті файлда сақталады: - .dfm және - .pas, файлдың бірінші типі (пішіннің файлы) – екілік – пішіннің кескінін және қасиеттерін сақтайды, екінші тип (пішіннің модульі ) сіздің қосымшаңыздың функциясын іске асыратын кодтардан тұрады және пішін мен оның құрауыштары үшін оқиғаларды өңдеуді қарастырады. Екі файл да автоматты түрде Delphi – де синхрондалады. Әрбір пішінге өзінің модульі сәйкес келеді.

Бағдарламаның сыртқы құрылымыDelphi - дің көмегімен құрылған бағдарламаның құрылымы дәстүрлі

бағдарламаның құрылымынан өзгешелеу болады, ол өз кезегінде мұндай бағдарламаларды құрудың ерекшеліктерін шартты түрде көрсетеді. Мұндай бағдарламаны екі бөлімнен тұрады деп көрсетуге болады: интерфейс – бағдарламаның бөлімі, ол бағдарламаға ақпаратты енгізуге және оны шығаруға, сонымен бірге тікелей тапсырманы шешуге арналған операторларды тағайындауға арналған (есептеу, ақпараттың түрленуі және т.б.). Бағдарлама өз жұмысында операциялық жүйе, әртүрлі сыртқы құрылғылар, деректер базасы, басқа бағдарлама және т.б. әрекеттеседі. Сондықтан бағдарламаның соған қатысты сыртқы құрауыштармен әрекеттесу құрылымын сурет 1.1 көрсетілгендей түрде көруге болады.

5

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 6-сі

Интерфейс бұл объектілердің жиынтығы, оның көмегімен ақпаратты белгілі бағытқа жіберу асырылады, - пішін, қарым – қатынас терезелері, басқару элементтері және т.б. Көптеген жағдайларда таңдап алынған интерфейс барлық бағдарламаның құрылымын анықтайды.

Объектілер бағдарламада жеткілікті түрде автономды болғандықтан, олардың арасында ақпаратты жіберу, сонымен бірге бағдарлама мен операциялық жүйе, бағдарлама мен сыртқы құрылғылар т.б. арасында ақпаратты беру үшін хабарлама жүйесі қолданылады.

Сурет 1.1 Бағдарламаның сыртқы құрылғылармен әрекеттесуіМұндай бағдарламаның жұмысы да өз сипатында. Әдетте ол іске

қосылғаннан кейін келесі хабарламаны күту режимінде тұрады. Хабарлама пайда болғанда бағдарлама оған талдау жасайды, қандай әрекет жасау керек екенін анықтайды, одан кейін сол әрекетті орындап, келесі хабарламаны күтеді. Әртүрлі хабарлама пайда болғаннан кейін бағдарлама шарт бойынша әртүрлі әрекет жасайды, барлық орындалатын операторлар бағыныңқы бағдарламалардың жиынтығын береді, олар әртүрлі объектінің әдістері ретінде бекітіледі (хабарламаны және оқиғаны өңдеу әдістерін қоса алады), немесе өздік бағыныңқы бағдарлама. Нақтылы түрде әртүрлі операциялық жүйелер және оларды баптау, олар белгілі командаларды күтеді, содан кейін оларды өңдеуге кіріседі.

Объект (TApplication класының) болып бағдарламаның өзі саналады. Шынында бұл объектіні программист өзі құрмайды, ол Delphi ортасында автоматты түрде құрылады, бірақ бағдарлама құру кезінде оның әдістері мен қасиеттерін қолдануға болады.Объектілердің классификациясы

Жобаны жоғарыда айтылғандай нақты тағайындалуы анықталған жеке объектілердің жиынтығы ретінде қарастыруға болады. Бұл объектілерді ортақ қасиеттері бар кластарға біріктіруге болады. Мұндай кластардың құрылымы қиынырақ болып келеді, сондықтан оны түгелдей көру үшін Browser бағдарлама элементтерін көру терезесінің көмегімен көруге болады. Мұнда жобаның құрылымын ұйыдастыру үшін қолданылатын тек маңызды кластарды ғана қарастырамыз (сурет 1.2).

6

Енгізу құрылғысы

Операциялық жүйе

Бағдарлама Деректер базасы

Шығару құрылғысы

И н т е р ф е й с

О р ы н д а л а т ы н о п е р а т о р л а р

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 7-сі

Жобада қолданылатын негізгі объект болып қосымша, пішін және құрауыш табылады.

Қосымша келіп түскен хабарламаны өңдеу циклін ұйымдастыратын жобаның негізгі байланыс объектісін көрсетеді.

Пішін интерфейстік элементті көрсетеді, оның арқасында қосымшалар мен сыртқы құрылғылар арасында ақпарат алмасу үрдісі жүреді. Пішін қосымшада орналасады, ал қосымша бір немесе бірнеше пішіннен тұруы мүмкін.

Сурет 1.2 Жобаның құрылымдық құрауыштарының классификациясыҚұрауыштар пішінге орналастырылады және ақпаратты алу, түрлендіру

және бейнелеу үшін операцияларды орындауға қатысты объектілерді сипаттайды. Олардың классификациясы қиындау, сондықтан жиі қолданылатын құрауыштар тобын қарастырайық. Пішін құрауыштардың кез келген санынан тұра алады.

Құрылымдық түрде жоғарыда көрсетілген құрауыштардың бәрі TComponent (Құрауыш) класына, объект жобасында қолданылатын жалпы және көп санды топтарға қарайды. Нақты түрде бұнда тек файлдармен жұмыс істеу, графикалық әдістер, әртүрлі тізімдер мен ағындар және басқа объектілер қатары ғана кірмейді. Қосымша меншік TApplication (Қосымша) класын қалыптастырады, ол тікелей TComponent класының ұрпағы болып саналады.

Кластың басқа элементтері пішіннің өзін қоса алғанда айтарлықтай қиынырақ құрылымды жасайды. Ең алдымен бұл элементтерді екі топқа бөлуге болады:

Жо б а

К л а с с T C o m p o n e n t( қ о с ы м ш а , п і ш і н ,

қ ұ р а у ы ш т а р )

Гр а ф и к а л ы қ қ ұ р а л д а р , т і з і м д е р

ж ә н е а ғ ы н д а р , ф а й л д а р ж ұ м ы с і с т е у қ ұ р а л д а р ы

TA p p l i c a t i o nқ о с ы м ш а с ы

T C o n t r o l б а с қ а р у э л е м е н т і

М е н ю , қ а р ы м -қ а т ы н а с т е р е з е с і т а й м е р ж ә н е т . б .

T W i n C o n t r o lт е р е з е л і к қ ұ р а у ы ш ы

T G r a p h i c C o n t r o lг р а ф и к а л ы қ қ ұ р а у ы ш т а р

7

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 8-сі

- TControl (Басқару) класын қалыптастыратын басқару элементтері.Басқару элементтері (TControl класының ұрпақтары болып келген құрауыштар) – қолданушымен қарым – қатынасты жүзеге асыратын экранда бейнеленетін құрауыштар (көрнекілік құрауыштар) Бағдарламада қолданушы шарт бойынша оларды басқара алады (пернетақтаның көмегімен ақпаратты енгізу, оларға тышқанның көмегімен әсер ету және т.б.). Олар экранда қосымша орындалғанда бейнеленеді.

- Экранда бейнеленбейтін элементтер (бейнеленбейтін немесе көрнекілік емес құрауыштар). Олар жүйелік ресурстарға қатынауға жауап береді: драйвер, деректер базасы, таймер, меню, әртүрлі қиын объектілер, стандартты диалог терезелеріне ұқсас және т.б. Құру кезінде көрнекілік емес құрауыштар пиктограмма түрінде бейнеленеді, ал қосымшаны орындағанда ереже бойынша көрінбейді.

Басқару элементтерін өз кезегінде екі үлкен кластарға бөлуге болады және олардың арасында принциптік айырмашылық бар:

- Терезелік басқару элементтерінің класы TWinControl (Терезелік басқару элементі).Терезелік басқару элементі ( TForm, TButton, TEdit, TMemo, TPanel, TGroupBox және т.б. кластардың құрауыштары) терезелік функциялардан (немесе процедуралар) тұрады, олардың арқасында ол келіп түскен ақпаратқа ықпал етеді және экранда активтенеді.

- Графикалық басқару элементтерінің класы TGraphicControl (Графикалық басқару элементі).Графикалық басқару элементі ( TImage класының құрауышы – кескін, TPaintBox – сурет салуға арналған панель, TShape – геометриялық фигура, TCustomLabel – белгінің тегі) мұндай функцияны басқармайды, тек экранға ақпаратты ғана шығарады, олар тышқан арқылы берілетін хабарламадан басқа белгілі қимылға ықпалын тигізе алмайды. Жеке жағдайларда пішін терезелік басқару элементіне жатады.

Жобаның құрылымдық элементтерінің әрекеттесуіЖанұя деп өзінің ұрпақтарымен қоса алғандағы класты айтамыз.TComponent жанұясының әрбір объектісінің Owner қасиеті бар:

TComponent (Иесі), берілген объекті орналасқан объектіге нұсқағыш. Негізгі объект деп - басқа объект орналасатын объектіні айтамыз.Көмекші объект деп – орналасатын объектіні айтамыз.property ComponentCount: Integer – тек оқу үшін. Негізгі объектінің

көмекші құрауыштарының санын береді (ағымды құрауыштың).

8

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 9-сі

property Components[Index: Integer]: TComponent – тек оқу үшін. Ағымды құрауыштың көмекші құрауыштарының тізімінен тұрады. Құрауыштарды нөмірлеу нөлден басталады.

Кез – келген пішін TApplication класының қосымшасына орналастрылады, қосымша ол үшін негізгі объекті болып саналады.

TControl жанұясының құрауыштарын пішінге екі түрлі жолмен орналастыруға болады:

- тікелей пішінге; - TWinControl жанұясының қосымша топталған бір құрауышына

(TGroupBox – тақырыбы бар панель, TPanel – панель, TTabControl – бетбелгі және т.б.).

TControl жанұясының әрбір құрауышында Parent қасиеті бар: TWinControl (Аталық), онда үлкен құрауышқа нұсқағыш беріледі.

Үлкен құрауыш – тікелей берілген құрауыш орналастырылған құрауыштың өзі.

Кіші құрауыш – орналасатын құрауыш.Бейнеленбейтін құрауыштарда Parent қасиеті болмайды.Пішіннің үлкен құрауышы жоқ (Parent = nil).

Мысал 1.1. Бұл мысал ерікті түрде пішінге орналастырылған келесі құрауыштардан тұрады: радиотоп, екі радиобатырма және батырма. Қосымшаны іске қосқанда, пішіннің OnCreate оқиғасы туындағанда екі радиобатырма RadioGroup1 құрауышына жоғарғы сол жақтың берілген координатасы бойынша орналасады. Button1 батырмасына шерткенде екі радиобатырма пішінге тасымалданады.

procedure TForm1.FormCreate(Sender: TObject);begin RadioGroup1.Caption := 'Радиогруппа';

RadioButton1.Parent := RadioGroup1;

RadioButton1.Caption := 'Первая радиокнопка';

RadioButton1.Top := 15;

RadioButton1.Left := 10;

RadioButton1.Checked := True;

RadioButton2.Parent := RadioGroup1;

RadioButton2.Caption := 'Вторая радиокнопка';

RadioButton2.Top := 35;

RadioButton2.Left := 10;

9

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 10-сі

end;procedure TForm1.Button2Click(Sender: TObject);begin RadioButton1.Parent := Form1;

RadioButton2.Parent := Form1;

end;

property ControlCount: Integer – тек оқу үшін. Басқару элементінің кіші құрауыштарының санын береді (тек терезелік құрауыштарда ғана болады).

property Controls[Index: Integer]: TControl – тек оқу үшін. Ағымды басқару элементінің барлық кіші құрауыштарының тізімін береді (тек терезелік құрауыштарда ғана болады).

«Негізгі » - «Көмекші » деген қарым – қатынасты бейнеленген және бейнеленбеген құрауыштарға қолдануға болады.

«Үлкен» - «Кіші» қарым – қатынасы тек қана бейнеленген құрауыштарға ғана қолданылады.Мысал 1.2. Бір пішіннен тұратын жобаны қарастырамыз. Тікелей пішінге

төмендегілерді орналастырамыз: - Негізгі меню - MainMenu.- Таймер - Timer.- GroupBox – тақырыбы

бар панель.- Button - батырмасы.GroupBox тақырыбы бар

панельге орналастырамыз:- Енгізу жолы - Edit.- Белгі - Label.

Құрауыш ComponentCount

Components Owner ControlCount

Controls Parent

Form1 6 MainMenu1

Timer1

GroupBox1

Button1

Edit1

Label1

Application 2 GroupBox1

Button1

nil

GroupBox1 0 Бос Form1 2 Label1 Edit1

Form1

Button1 0 Бос Form1 0 Бос Form1

Label1 0 Бос Form1 - - GroupBox1

Edit1 0 Бос Form1 0 Бос GroupBox1

10

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 11-сі

MainMenu1 0 Бос Form1 - - -

Timer1 0 Бос Form1 - - -

Бағдарлама құрарда шешілетін тапсырмаларНегізгі болып келесілер табылады:

1) Жобаның түрін анықтауa) бір құжатты интерфейс;b) көп құжатты интерфейс;c) DLL-кітапханасы.

2) Пішінді таңдау3) Құрауыштарды орналастыру4) Менюді құру5) Хабарламаны өңдеу

хабарламаны өңдеудің келесі кезеңдерін ерекшелеуге болады:

a) хабарламаның типін қалыптастыру;b) хабарламаны инициализациялау;c) хабарламаны өңдеу және оқиғаны құру;d) оқиғаны өңдеу;e) хабарламаны өңдеу циклін қалыптастыру.

6) Деректер базасын қалыптастыру.7) Тапсырманы бағдарламалау.8) Қарым – қатынас, ақпарат терезелерін қалыптастыру.9) Ерекше жағдайларды өңдеуді қамтамасыз ету.10) Анықтама жүйесін құру.

Тексеру сұрақтары:1. Көрнекілік бағдарламалау дегеніміз не және оның қарапайым

бағдарламалаудан айырмашылығы неде?2. Жоба дегеніміз не, жаңа жобаны қалай бастаймыз және дайын

жобаны қалай орындайды?3. Пішін дегеніміз не, жаңа пішінді қалай қосамыз, жобада сіздер

пішіннің қандай шаблонын қолдандыңыздар?4. Delphi терезесі қандай элементтерден тұрады?5. Құрал – саймандар панельі дегеніміз не? Құрал – сайман

батырмаларына мысал келтіріңіздер.6. Құрауыш, құрауыштар палитрасы дегеніміз не, палитра

құрауыштарының қандай құрауыштар тобын білесіздер, өз жобаңызда қандай құрауыштарды қолдандыңыздар ?

7. Құрауыштардың қасиеті дегеніміз не, Объект Инспектірі не үшін қажет, құрауыш пен объект арасында қандай байланыс бар?

8. Бірнеше құрауыштарды және олардың қасиеттерін атап өтіңіздер.9. Модульдің және жобаның бағдарламалық коды дегеніміз не, оларды

экранда қалай көрсетеді ?

11

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 12-сі

10. «Модульді қосу» дегеніміз не? Жобаға қандай модульдер қосылды?11. Модуль қандай бөліктерден тұрады?12.Жоба файлының құрылымы.13. Меню дегеніміз не? Ол қандай элементтерден тұрады?14.Оқиға дегеніміз не? Оқиғаларға мысалдар келтіріңіздер.15. «Оқиғаны өңдеу» дегеніміз не? Оқиғаны өңдеуге мысалдар

келтіріңдер.16.Қандай процедуралар пішінді демонстрацияға шақырады ?17. «Тест» жобасында нені өзгертер едіңіз және не қосар едіңіз?

12

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 13-сі

2 OBJECT PASCAL ТІЛІНДЕГІ ОБЪЕКТІЛІ – БАҒЫТТАЛҒАН БАҒДАРЛАМАЛАУ

Процедуралық бағдарламалау бағдарламаның негізі алгоритм, берілгендерді өңдеу процедурасы деп тұжырымдайды.

Объектілі - бағытталған бағдарламалау (ОББ) – ол негізінде нақты өмірдің объектісі мен тәртібіне сай келетін, қандай да бір құрылым ретінде қарастырылатын объект түсінігі бар бағдарламаны құрудың әдістемесі.

ОББ әдістемесінің қолданылуымен шешілетін тапсырмалар объект және оларға қолданылатын операциялар деген терминдермен сипатталады. Мұндай түрдегі бағдарлама объектілер жиыны мен олардың арасындағы байланысты көрсетеді.

Кластар мен олардың элементтеріне ат тағайындауда ұсынылатын ережелер: Кластың аты Т префиксінен басталады.

Мысалы: TObject, TForm, TButton және т.б. Кластың өрісі , қасиетке сай келеді (property), әдетте қасиеттің атымен

аталады, бірақ F деген префикстен басталады. Мысалы: FCount: Integer; property Count: Integer read FCount write SetCount;

Әдістің параметрі, оның мәні қандай да бір өрістің класына меншіктеледі, өрістің атымен аталады, бірақ А деген префикстен басталады. Мысалы: procedure SetCount(ACount: Integer);

Әдістің аты, оның көмегімен қасиеттің мәні оқылады, әдетте Get сөзінен басталады. Мысалы: function GetParam: Integer;

Әдістің аты, оның көмегімен қасиеттің мәні жазылады, әдетте Set сөзінен басталады. Мысалы: SetCount әдісі (жоғарыдан қараңыздар).

Конструктор әдісіне әдетте Create аты беріледі. Мысалы: constructor Create(Owner: TComponent); constructor Create(AName: String);

Деструктор әдісіне әдетте Destroy аты беріледі:Мысалы: destructor Destroy; override;

Хабарламаны өңдейтін әдістердің аттары WM префиксінен басталады, хабарламаның типтерінің аттары - TWM , ал хабарламаның индексі - WM_ - префиксінен басталады. Мысалы: procedure WMSetFocus (var Message: TWMSetFocus); message WM_SetFocus; message WM_Quit; {әр кез бағдарламаның орындалуын тез арада тоқтату керек болғанда өрбиді}

13

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 14-сі

Оқиғаның өңдеуішіне қатынауды жүзеге асыратын қасиеттің аттарына On префиксі бар ат тағайындалады.Мысалы: property OnChange: TNotifyEvent read FOnChange write FOnChange;

2.1 Класс және объект туралы түсінік

ООБ – дың негізінде класс (class) және объект деген ұғымдар жатыр. Object Pascal – да класс деп - өріс, әдіс және қасиет деген ұғымдардан тұратын арнайы типті айтамыз. Кластың арғы - тегі болып объект деп аталатын, ескірген Turbo Pascal тілінің типі жатады. Объект Turbo Pascal тіліне Delphi - ді құрғанға дейін кіргізілген ұғым. Object Pascal тілінің жаңа нұсқасында пайда болған Delphi ортасында объектілер ескі бағдарламалық өніммен үйлесімділік үшін сақталған. Қазір объектіні қолдану маңызды емес.

Класс өз кезегінде нұсқағышты береді. Бірақ ол дәстүрлік нұсқағышқа қарағанда ерекше типтің нұсқағышы: онда класқа қатынағанда "^" символын қолдануға болмайды.

Класс –берілгендер мен оларға қолданылатын әрекеттерден тұрады. Объект – кластың физикалық іске асырылуы (кластың экземпляры). Класс өзінше бір сипатталатын тип болып табылады және типтерді

жариялау бөлімінде жарияланады. Мысалы:

type TForm1 = class(TForm) { TForm1- TForm класының ұрпақ - класы} {Аталық кластың өрісін, әдісін және қасиеттерін иемденеді} Button1: TButton; {өріс} Button2: TButton; {өріс} L1: TLabel; {өріс} L2: TLabel; {өріс} procedure Button1Click(Sender: TObject); {әдіс} procedure FormActivate(Sender: TObject); {әдіс} private { Private declarations } public { Public declarations } end;

Класс бір жағынан жазба (record) – типіне де ұқсайды, ол берілгендердің өрісінен ғана емес,

Мысалы: private FCaption: String; {жолдық типтің өрісі} FModified: Boolean; {логикалық типтің өрісі}

оларды өңдейтін бағыныңқы бағдарламалардан (әдіс), Мысалы: private procedure SetCaption(Const ACaption: String);

14

Аталық класс нұсқалған

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 15-сі

procedure Close; сонымен қатар өрістер мен әдістердің сипаттамалары бар қасиеттерден тұрады.

Мысалы: public property Caption: String read FCaption write SetCaption; property Modified: Boolean read FModified write SetModified; Сол себепті класта оның сипаттамалары мен тәртібі сипатталған.Объект – белгілі бір класқа сай келетін айнымалыны береді және

айнымалыны жариялау бөлімінде сипатталады. Мысалы:var Form1: TForm1;

Барлық кластарға сай келетін объектіні құра беруге болмайды. Олардың бірқатары әсіресе барлық кластардың иерархиялық ағашының басында орналасқаны бұны орындауға мүмкіндік бермейді, немесе олардың негізінде құрылған объектілер жұмыс істеуге қабілетсіз болып келеді, мысалы TObject ағымды класы. Ол мынамен байланысты, мұндай кластар сол немесе басқа аяқталған объектінің жан – жақты сипаттамасын бермейді (мысалы үшін, жиһаздың тек үлгісін ғана құруға болмайды, ал нақты стөл, нақты орындық және т.б. құруға болады). Мұндай кластар абстрактілі кластар деп аталады, сондықтан оларға абстрактілі әдістер сай келеді. Бұл ерекшелігіне қарамастан, мұндай кластарды құру тиімді, өйткені бұл кластарда барлық ұрпақтарында көп рет қайталамайтындай барлық кластарға тиісті жалпылықты жинақтауға болады.

ОББ үш негізгі қасиеттермен сипатталады: инкапсуляция (encapsulation), туындау (inheritance), полиморфизм (polymorphism).

2.2 Инкапсуляция, туындау және полиморфизм

Класс - өріс, әдіс және қасиетті өзіне бүтіндей қоса отырып, жеке тапсырмаларды шешуге тағайындалған, аяқталған құрылымдық бірлік болып табылады. Әдетте мұндай тапсырма шешімі қандай да бір мәселелер жетегінің айналымында табылатын тапсырма болады. TRichEdit класы rtf-файлдардың (Rich Text Format форматындағы файл) қуатты мәтіндік редакторын береді, ол файлды көруді және редактрлеуді ұйымдастыруға, қаріптің өлшемі мен типін сақтау мен өзгертуге, символдар жолын іздеуге және т.б. тағайындалған. Өріс, әдіс және қасиеттің мұндай бүтіндігін инкапсуляция деп атаймыз.

Бұл тілде көптеген кластар бар (300 – ге жуық ), олар Delphi ортасын қолданатын бағдарламашыға арналып Object Pascal тілінің құрауыштарымен - Inprise International фирмасының қызметкерлерінің көмегімен құрылған.

Программист, бағдарламаны құра отырып өзінің пайдаланушы класын құрады. Мұндай кластар не айқын емес құрылады, онда программист Delphi

15

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 16-сі

ортасының көрнекілік құралдарын қолданады, ал кластың мәтінін Delphi өзі құрастырады, немесе айқын, онда программист кластың кодын Object Pascal тілінің құралдарымен өзі жазады.

Жаңа класс басқа қарапайым кластың негізінде құрылады. Ол үшін кластың тақырыбында оның аталық класын көрсету керек. Жаңа кластың тақырыбының синтаксисі мынандай түрде болады:

type className = class (ancestorClass)мұнда className – жаңа кластың аты; ancestorClass – аталық кластың

аты. Жаңа класс автоматты түрде өзінің аталық класының өрісін, әдісін және қасиеттерін иемденеді және өзінің өрісі, әдісі және қасиеттерімен толықтырылады. Кластың бұл қасиеті туындау деп аталады. Туындаудың көмегімен қарапайымнан қиынға өту әдісі арқылы, қандай болса да қиын дәрежедегі класты құруға болады. Қарапайым класс болып TObject табылады, ол өріс пен қасиеттен тұрмайды, бірақ кластың данасын құратын, жоятын, осы класқа қызмет көрсету және бағдарламаны қалыпты функциялауға арналған қандай да әдістердің жиынынан тұрады. Осының негізінде барлық аталық класқа ортақ кластың туындау ағашы құрастырылады. Мысалы:

type TPersistent = class (TObject),type TComponent = class (TPersistent),type TControl = class (TComponent).Кейде аталық класта сипатталған әдістер қандай да бір себепке

байланысты ұрпақ класты қанағаттандырмайды. Мұндай жағдайда ұрпақ класта аталық класта жазылғандай атпен әдіс құруға болады, бірақ жұмыс істеу принципі басқадай болады. Осыдан екі класта да бір атпен әртүрлі әдістер әрекет жасайтын болады. Полиморфизм бұл біратты әдістерді жариялауға мүмкіндігі бар туыс кластардың қасиеті.

2.3 Кластың синтаксисі

Барлық кластың синтаксисі мынандай түрде болады:type

ClassName = class (AncestorClass)MemberList

end;мұнда ClassName – кластың аты; class – кілттік сөз; AncestorClass – аталық кластың типі; MemberList – өрістер, әдістер және қасиеттердің тізімі. Төменде TForm1 класынан тұратын main модулінің мәтіні көрсетілген. unit Main;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;

16

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 17-сі

type TForm1 = class(TForm) { TForm1 класын жариялау} Button1: TButton; {өріс} Button2: TButton; {өріс} L1: TLabel; {өріс} L2: TLabel; {өріс} procedure Button1Click(Sender: TObject); {әдіс} procedure FormActivate(Sender: TObject); {әдіс} private { Private declarations } public { Public declarations } end;var Form1: TForm1; i: Integer;implementation{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject); {әдістің сипатталынуы}begin L1.Caption:= DateTimeToStr(Date); L2.Caption:= TimeToStr(Time);end;

procedure TForm1.FormActivate(Sender: TObject); {әдістің сипатталынуы}begin i:=125;end;end.

2.4 Кластың өрістері

Өріс деп кластағы инкапсуляцияланған берілгендерді айтамыз. Кластың өрістері жазбаның өрістері сияқты, бірақ айырмашылығы олар кез – келген типті болуы мүмкін, сонымен қатар кез – келген класс та бола алады, мысалы:type TChildClass = class(TObject) { TChildClass класын жариялау} FOne: integer; {бүтін типтің өрісі} FTwo: String; {жолдық типтің өрісі} FThree: TObject; { TObject класс өрісінің типі} end;

Ерер арғы тегі TObject класы болса, онда тақырыпта оны түсіруге болады.

Инкапсуляция принципі бойынша өрістерге қатынау кластың әдістері мен қасиеттерінің көмегімен жүзеге асырылады. Сонымен бірге Object Pascal - да өрістерге тікелей қатынауға да мүмкіндік берілген. Өріске қатынау үшін

17

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 18-сі

құрамды ат жазу қажеттігі туады, ол нүкте арқылы ажыратылған кластың аты мен өрістің атынан тұрады, мысалы:var MyObject : TChildClass;begin MyObject := 16; MyObject := ’Некоторое строковое значение’;end;

Ұрпақ – класының өзінің арғы – тегінің барлық өрістеріне қатынауға мүмкіндігі бар, бірақ оларға қол жеткізу мүмкін емес болғандықтан, оларды анықтауға болмайды. Мысалы:type TPredok = class {арғы тек класын жариялау} Value: Integer; end; TPotomok = class(TPredok) {ұрпақ класын жариялау} Value: String; {туындау өрісінің қабысуы} end;var My1: TPredok; {класс айнымалысын жариялау (My1 –айнымалы-объект)} My2: TPotomok; {класс айнымалысын жариялау (My2 – айнымалы-объект)}begin My1 := TPotomok.Create; { TPredok класының объектісін құрады } My2 := TPotomok.Create; { TPotomok класының объектісін құрады} My1.Value := 'Hello!'; {қате, TPredok өрісінің типі емес} My2.Value := 'Hello!'; {дұрыс, Value: String өрісі жұмыс істейді} My2.Value := 8; {қате: Value: Integer өрісі қалқаланған}end;

Бұл мысалда екі класс сипатталған: TPredok – арғы тек және TPotomok – ұрпақ кластары. Әр класс біратты әртүрлі типті Value өрісінен тұрады.

Ары қарай var-секциясында әртүрлі class типті екі айнымалы - My1 және My2 жарияланған. Бір қарағанда My1:= TPotomok.Create объектісінің оператор – конструкторы TPotomок типті My1 объектісін құруы мүмкін (оны құруға жады бөледі). Бірақ My1 басқа типті болғандықтан , ол олай емес. Осы себептен конструктор аталық типті объект құрады, яғни TPredok типті объект. Енді келтірілген мысалдардағы бірнеше операторлардағы қателердің көзі түсінікті болды.

2.5 Кластың әдістері

Кластың әдісі болып инкапсуляцияланған процедура мен функция табылады. Бұл бағыныңқы бағдарламалар кәдімгі бағыныңқы бағдарламалар сияқты жарияланады. Әдіс кластың сипаттамасында жеке тақырып ретінде жариялануы керек, ал әдістің коды - implementation секциясында "." символын, әдістің өзінің класына қатысын білдіреді, нұсқау арқылы сипатталған, мысалы:

18

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 19-сі

type TMyClass = class(TObject) {класты жариялау} ... procedure DoSomething; {DoSomething әдісін жариялау} ... end;

DoSomething әдісіне сипаттама кейінірек модульдің implementation секциясында келтірілуі керек, мысалы: procedure TMyClass.DoSomething; {тақырыптың түрі: класс. әдіс} begin ... end;

Әдіске қатынағанда құрамды атты немесе With операторын қолдануға болады, мысалы:

type TChildClass = class(TObject) {класты жариялау} ... function FirstFunc(x:real):real; procedure SecondProc; ... end;...var MyObject : TChildClass; y : real;begin ... MyObject.SecondProc; // әдіске қатынаудың екі мысалы y := MyObject.FirstFunc(3.14); //құрамды аттың көмегімен: класс . әдіс ... With MyObject do // сол қатынау begin // With опреаторының көмегімен SecondProc; y := FirstFunc(3.14); end; ...end;

Класта анықталған әдістер статикалық, виртуальды, динамикалық және абстрактілі болуы мүмкін. Методтың типі оның ұрпақтарымен қалқалану механизмі арқылы анықталады.

Біратты әдістер ұрпақтарда мысалда көрсетілгендей өрістердің қалқалануы сияқты қалқаланады . Мұндай қалқалау статикалық деп аталады. Статикалық әдістер үшін қалқалау компилятор арқылы жүзеге асырылады. Үнсіздікпен класта сипатталған барлық әдістер статикалық болып табылады.

Мүмкіндікті кеңейту үшін жиі динамикалық қалқалау қолданылады. Ол үшін аталық әдіс dinamic (динамикалық әдіс) немесе virtual (виртуальды

19

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 20-сі

әдіс) директивасынан тұруы керек, ал ұрпақ класта қалқалау әдісі - override директивасынан тұруы керек. Мысалы:type TFigure = class procedure Draw; virtual; {виртуальды әдіс} end; TRectangle = class(TFigure) procedure Draw; override; {қалқалау әдісі} end; TEllipse = class(TFigure) procedure Draw; override; {қалқалау әдісі} end;

Бұл мысалда TFigure аталық класының Draw виртуальды әдісі жарияланған және екі біратты әдіс TRectangle және TEllipse ұрпақ класына қатысты жарияланған. Соңғылары қалқаланумен жарияланған (override).

Мұндай жариялау керекті мақсатқа жету мақсатында әдістерді қалқалауға мүмкіндік береді:

var Figure: TFigure;begin Figure := TRectangle.Create; // кластың данасын құру Figure.Draw; // TRectangle.Draw әдісін шақыру Figure.Destroy; // класс данасын жою Figure := TEllipse.Create; // класс данасын құру Figure.Draw; // TEllipse.Draw әдісін шақыру Figure.Destroy; // класс данасын жоюend;

Семантикалық виртуальды және динамикалық әдістер біркелкі жұмыс істейді. Айырмашылығы тек виртуальды әдіс уақытты үнемдеу көз қарасында өте тиімді (есептеу жылдамдығын тиімдейді), ал динамикалық әдіс оперативтік жадыны рациональды қолдануға мүмкіндік береді (сәйкес келетін бағдарламалық кодтың өлшемін тиімдейді). Динамикалық және виртуальды әдістер статикалық әдістен ерекшелігі мынада , аталық әдістер мен ұрпақтар әдістерінің орын ауыстыруы бағдарламаның орындалу барсыныда жүзеге асырылады.

Класта әдіс abstract директивасының көмегімен абстрактілі болып жариялануы мүмкін. Мұндай әдіс виртуальды немесе ддинамикалық әдіс болуы мүмкін, бірақ басқа әдістерден айырмашылығы implementation секциясында өзінің коды болмауы мүмкін. Ол класта анықталады, бірақ ешқандай әрекеттен тұрмайды, ешқашан шақырылмайды және ұрпақтар класында қайтадан анықталуы керек. Абстрактілі әдістен тұратын класс абстрактілі класс деп аиалады. Мұндай кластар мен әдістер ұрпақтар әдістеріне қатынау тәсілін инкапсуляция жасайды, бірақ өздері ештеңе істемейді, мысалы:

procedure DoSomething; virtual; abstract;

20

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 21-сі

Қалқаланбаған абстрактілі әдіске қатынау орындалу уақыты туралы қатені шақырады (run time error), мысалы:

type TClass1 = class(TClass0) ... procedure Paint; virtual; abstract; end; TClass2 = class(TClass1) ... procedure Paint; override; end;var jClass1: TClass1; jClass2: TClass2;begin jClass1.Paint; // абстрактілі әдіске қатынау дұрыс емес jClass2.Paint; // дұрыс ...end;

Әрбір класс екі ерекше әдістен тұрады – конструктор және деструктор. Конструктор объектіні құру және оны инициализациялау үшін тағайындалған. Мәселен, Object Pascal тілінде объект динамикалық құрылым болып табылады және айнымалы-объект берілгендерден емес оларға сілтемеден тұрады. Конструктор объектіні динамикалық жадыда үлестіреді және объектінің өрісіне алғашқы мәнін меншіктейді. Соған байланысты тізбектелген типтің өрісі алғашқы мән ретінде 0 – ді алады, жолдық тип ретінде – бос жол, нұсқағыш өрістер - nil мәнін, таңдау - өрісі - Unassigned мәнін алады. Одан басқа, конструктор динамикалық жады бөлінгеннен кейін құрылған объектіге сілтемені Self айнымалысына орналастырады. Барлық класс үнсіздікпен Self айнымалысынан тұрады, ол автоматты түрде класта жарияланады.

Деструктор, конструкторға қарама – қарсы ұғым, ол кластың данасын жоюға арналған, яғни жадының объектіні бұзу және жойылатын объектімен бос емес бөлігін босату. TObject базалық класының және оның ұрпақтарында конструктор мен деструктор Create (құру) және Destroy (жою) сәйкес аталады. Бұл класта сонымен қатар Free әдісі жарияланған, ол алдымен адрестің корректілігін тексереді (объект шын мәнінде жүзеге асырылған ба ?) және содан кейін барып қана Destroy әдісін шақырады. Егер объект конструктормен құрылмаған болса, онда деструкторға қатынау ерекше жағдайдың генерациясына әкеп соғады. Мұндай байланыста Destroy әдісінің орнына Free әдісін қолданған жөн болады.

Конструктор мен деструктор процедура болғанымен де, олар арнайы резервтелген сөздермен жарияланады. Конструктор constructor сөзімен, ал деструктор – destructor сөзімен жарияланады.

type TSample = class

21

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 22-сі

Text: String; constructor Create; // кластың данасын құру destructor Destroy; // кластың данасын end;

Өріске, қасиеттерге және әдістерге қатынамас бұрын, ең алдымен оларды құру керек. Объектіні құру үшін ең алдымен объектінің класына конструктор-әдісін қолдану қажет:

var MyObject: TSample;begin ... MyObject := TSample.Create; ...end;

Егер ұрпақтар класы құрылып жатса және оны құру кезінде аталық класта жоқ кейбір қосымша әрекеттерді іске асыру көзделсе, онда алдымен өзінің аталығының конструкторын шақыру керек, ал содан кейін барып қосымша әрекеттерді іске асыру қажет. Арғы тектің өрістеріне қатынауды қамтамасыз ету үшін, конструкторда алдын – ала арғы тек класының объектісін құру қажет. Аталық кластың кез – келген қалқаланған әдісін шақыруды резервтелген inherited (иемденген) сөзінің көмегімен іске асырады. Мысалы:

type TShape = class(TGraphicControl) private {ішкі жариялау} FPen: TPen; FBrush: TBrush; procedure PenChanged(Sender: TObject); procedure BrushChanged(Sender: TObject); public {сыртқы жариялау} constructor Create(Owner: TComponent); override; destructor Destroy; override; ... end;...constructor TShape.Create(Owner: TComponent);begin inherited Create(Owner); // TGraphicControl арғы тек класының объектісін

құру Width := 65; // TGraphicControl иемденген қасиетін өзгерту Height := 65; FPen := TPen.Create; // class TPen типі бар жеке өрісті құру FPen.OnChange := PenChanged; FBrush := TBrush.Create; // class TBrush типі бар жеке өрісті құру FBrush.OnChange := BrushChanged;end;

22

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 23-сі

Кейбір қарапайым кластар конструкторды немесе деструкторды жарияламай – ақ, құрылуы немесе жойылуы мүмкін. Мысалы, класс TObject, класының ұрпағы болып келсе, онда мұнда Constructor мен Destructor - ды жариялаудың қажеті жоқ:

type TClassy = class; ...var Classy: TClassy; ... Classy:= TClassy.Create; {объектіні құру} ... Classy:= TClassy.Free; {объектіні жою}

Тілде бір класс аралығында бір атпен бірнеше әдісті жариялау мүмкіндігі бар. Осыдан кез – келген осындай әдіс қайта іске қосылатын болуы керек (overload директивасы). Компилятор мұндай әдістерді өзінің тиімді формальды параметрлерінің жиынымен идентификациялайды. Сол атпен пайда болған әдіске Delphi компиляторының реакциясын орындатпау үшін, әрбір осындай әдісті reintroduce директивасымен белгілеп қою керек.Ары қарай implementation секциясында осындай барлық әдістердің қодтарын енгізу керек. Мысалы:

type TClassy = class; Procedure HH(i, j: byte; var s: String); reintroduce;

overload; Procedure HH(q: String); reintroduce; overload; Procedure HH(a: array of Integer); reintroduce; overload; end;...implementation... procedure TClassy.HH(i, j: byte; var s: String); begin S:=IntToStr(i + j); end;  procedure TClassy.HH(q: String); begin Label2.Caption:= q; end;  procedure TClassy.HH(a: array of Integer); begin Label1.Caption:= IntToStr(a[6] + a[4]); end;...

Енді TClassy.HH аты бар әдіске қатынағаннан кейін, бағдарлама қатынағанда формальды параметірі нақты параметіріне сай келетін әдісті ғана шақырады.

23

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 24-сі

2.6 Кластың қасиеттері

Қасиеттер, өріс сияқты кластың атрибуты болып саналады. Қасиеттер сырт көрінісімен кластың өрісін еске түсіреді, бірақ шынында ол өрістерге қатынасты реттейтін механизм болып табылады. Объектінің қасиеттері мыналармен сипатталады:

оның қасиеттің мәнін сақтайтын кластың өрісімен байланысы; қасиеттің өрісіне қатынауды қамтамасыз ететін екі әдіс:

- қасиеттің мәнін тағайындайтын әдіс қасиетті жазу әдісі (write) деп аталады.

- қасиеттің мәнін алатын әдісті қасиетті оқу әдісі (read) деп атаймыз.

Қасиетті property, read және write сөздерінің көмегімен жариялайды. Read және write сөздері әдістердің аттарынан тұратын бөлімнің басын білдіреді, олар сәйкес оқу мен жазуға тағайындалған. Қасиеттің синтаксисі мынандай:

property propertyName[indexes]: type index integerConstant specifiers;

мұндағы propertyName – қасиеттің аты, кез – келген дұрыс идентификатор; [indexes] – [имя1, имя2, ... , имяN: type] формасындағы ат - параметрі; type – қасиеттің типі, ол құрамдас немесе алдын – ала типтерді жариялау бөлімінде жариялануы қажет; index integerConstant – бүтін санды тұрақты шама, міндетті емес параметр, ол бірнеше қасиеттерге әртүрлі мәндерді көрсетуде сол бір әдісті қолдануға мүмкіндік береді (мысал 2.6.2); read, write, stored, default (немесе nodefault) және implements – спецификаторлары (specifiers). Мысал 2.6.1 Object Pascal - да анықталған қасиеттерге мысалдар.

property Objects[Index: Integer]: TObject read GetObject write SetObject;

property Pixels[X, Y: Integer]: TColor read GetPixel write SetPixel;

property Values[const Name: string]: string read GetValue write SetValue;

property ErrorCount: Integer read GetErrorCount;property NativeError: Longint read FNativeError;

Мысал 2.6.2 Index спецификаторы бар қасиетке мысал.type TRectangle = class private FCoordinates: array[0..3] of Longint; function GetCoordinate(Index: Integer): Longint; procedure SetCoordinate(Index: Integer; Value: Longint); public

24

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 25-сі

property Left: Longint index 0 read GetCoordinate write SetCoordinate;

property Top: Longint index 1 read GetCoordinate write SetCoordinate;

property Right: Longint index 2 read GetCoordinate write SetCoordinate;

property Bottom: Longint index 3 read GetCoordinate write SetCoordinate;

property Coordinates[Index: Integer]: Longint read GetCoordinate write SetCoordinate;

... end;Index спецификаторы бар қасиетте қатынау әдісі бүтін типті қосымша

параметрді алуы керек. Оқу функциясы үшін ол жалғыз параметр, жазба процедурасы үшін ол соңғы параметрдің алдындағы (қасиеттің мәнін анықтайтын алдыңғы параметрге сай) параметр болуы керек. Бағдарлама қасиетке қатынағанда, бүтін санды тұрақты шама қасиет автоматты түрде қатынау әдісіне беріледі.

Егер Rectangle TRectangle типті болса, жоғарыда жарияланғандай, онда

Rectangle.Right := Rectangle.Left + 10;

мынадай сәйкестік орын алады:Rectangle.SetCoordinate(2, Rectangle.GetCoordinate(0) + 100);

Қасиеттердің барлық жариялануында read және write спецификаторларының біреуі немесе екеуін бірақ болуы қажет. Олар қатынас спецификаторы деп аталады және келесі формада жазылады:

read fieldOrMethodwrite fieldOrMethod

мұндағы fieldOrMethod – қасиет жарияланған класта немесе арғы – тек класында жарияланған өріс немесе әдістің аты.

Егер fieldOrMethod қасиет жарияланған класта жарияланса, ол қасиетті жарияламас бұрын орындалуы қажет.

Егер fieldOrMethod арғы – тек класында жарияланса, онда ол ұрпақта көрінуі тиіс, яғни басқа модульде жарияланған жеке өріс немесе ұрпақ кластың әдісі болмауы тиіс.

Егер fieldOrMethod - өріс болса, онда ол қасиеттің типінен тұруы керек.Если fieldOrMethod - әдіс болса, онда оны қайта анықтауға болмайды.Если fieldOrMethod - read спецификаторында анықталған әдіс болса,

онда ол қасиеттің типіне сай келетін мәнді қайтаратын параметрі жоқ функция болуы керек. Оқуға арналған функцияның аты соңынан қасиеттің аты жазылатын Get приставкасынан басталады.

Егер fieldOrMethod - write спецификаторында анықталған әдіс болса, онда ол бір ғана параметрден тұратын процедура болуы тиіс. Бұл параметрдің

25

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 26-сі

типі қасиеттің типіне сай келуі тиіс. Жазуға тағайындалған процедураның аты соңынан қасиеттің аты жазылатын Set приставкасынан басталады.

Мысалы, егер қасиет жарияланған болса: property Color: TColor read GetColor write SetColor;

онда GetColor әдісі мыналай сипатталуы қажетfunction GetColor: TColor;

және SetColor әдісі мыналай сипатталуыprocedure SetColor(Value: TColor);

немесеprocedure SetColor(const Value: TColor);

сипатталынуы керек.Егер қасиет тек read спецификатрынан тұратын болса, онда ол "read

only" (тек оқуға ғана) атрибутынан тұрады. Егер қасиет тек write спецификатрынан тұратын болса, онда ол "write only" (тек жазуға ғана) атрибутынан тұрады. Қасиеттің мәніне тек оқуға ғана тағайындалған мәнді меншіктеу немесе қасиеттің өрнегінде тек жазуға ғана арналған мәнді қолдану компиляция уақытының қатесін шақырады. Жазудан қорғалған қасиетке мәнді объектіні инициализациялау кезінде орнатуға болады. Мысал 2.6.3 Name және Address екі қасиеттерден тұратын Name және

Address TPerson класын сипаттау.type TName = string[15]; TAddress = string[35]; TPerson = class // класты жариялау private FName: TName; // Name қасиетінің мәні FAddress: TAddress; // Address қасиетінің мәні protected constructor Create(Name: TName); procedure Show; function GetName: TName; function GetAddress: TAddress; procedure SetAddress(NewAddress: TAddress); public

property Name: TName // Name қасиеті read GetName; // тек оқуға ғана мүмкіндік бар

property Address: TAddress // Address қасиетіread GetAddress // оқуға және жазуға мүмкіндік барwrite SetAddress;

end;Мұндағы Name – FName өрісімен байланысқан қасиет, GetName –

FName өрісінен оқуға тағайындалған әдіс. Address – FAddress өрісімен байланысқан қасиет, GetAddress және SetAddress – сәйкес FAddress өрісіне оқуға және жазуға тағайындалған әдіс.

26

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 27-сі

Төменде TPerson класының объектілерін құруға және оның қасиеттеріне қатынауды қамтамасыз ететін TPerson класының әдістері келтірілген.

constructor TPerson.Create(Name: TName); // TPerson класының конструкторы

begin FName := Name; end;

function TPerson.GetName; // Name қасиетінің мәнін алатын әдісbegin Result := FName;end;

function TPerson.GetAddress; // Address қасиетінің мәнін алатын әдісbegin Result := FAddress;end;

// Address қасиетінің мәнін өзгертетін әдісprocedure TPerson.SetAddress(NewAddress: TAddress);begin If FAddress = ’’ then FAddress := NewAddress;end;

Қасиетке қатынау үшін бағдарламаның мәтінінде өрістер мен әдістердегі сияқты объектінің атынан, нүктеден және қасиеттің атынан тұратын құрамды атты қолдану керек, мысалы:

var Student : TPerson // кластың айнымалысын жариялау HisAddress : String; begin Student := TPerson.Create(’Иванов’); Student.Address := ’ул. Садовая, д.3, кв.25’;

... HisAddress := Student.Address; ... Student.Free;

end;Address қасиетіне мән меншіктеу нұсқасын орындағанда компилятор

әдісті шақыру нұсқасында оны қайта трансляциялайды. Student.SetAddress(’ул. Садовая, д.3, кв.25’);

Сырт жағынан қарағанда бағдарламада қасиетті қолданудың объектінің өрісін қолданудан еш айырмашылығы жоқ. Бірақ қасиет пен объектінің өрісінің арасында принциптік айырмашылық бар: қасиетке мән меншіктегенде және оның мәнін оқығанда қандай да бір жұмысты атқаратын процедура автоматты түрде шақырылады. Мысалы, біз FAddress өрісіне тікелей керекті мәнді орналастыра аламыз

Student.FAddress := ’ул. Садовая, д.3, кв.25’;

Бірақ, Address қасиетін қолдана отырып біз тек оқу мен жазуға тағайындалған әдістерге әртүрлі әрекет жасай аламыз: қасиетке меншіктелген

27

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 28-сі

мәннің корректілігін тексеру, экранға хабарламаның шығуын қамтамасыз ету, экрандағы объектінің сырт көрінісін өзгерту және т.б. Егер жазу немесе оқу кезінде қосымша әрекеттердің қажеттігі тумаса, онда сәйкес әдістің орнына өрістің атын нұсқау қажет:

type TPerson = class FAddress: TAddress; procedure SetAddress(NewAddress: TAddress);

property Address: TAddress read FAddress write SetAddress; end;

Қасиет нақты бір өріспен байланыспауы да мүмкін. Бұл жағдайда қасиетте қасиеттің типіне сай келетін берілгендермен әрекет жасау үшін екі әдіс анықталады.

2.7 Кластың құрылымы. Кластың элементтерінің көріну аймағы

Object Pascal объектілерінің модельінде оларды қай аймақта қолдануға болатындығын анықтайтын (көріну аймағы) құрамды бөліктерге қатынасты қамтамасыз ететін механизм бар. Барлық класс секциядан тұратын құрылымнан тұрады. Әрбір секция арнайы резервтелген сөздермен жарияланады. Олардың қатарына: published (декларацияланған), private (меншік), protected (қорғалған), public (қатынас бар), automated (автоматталған). Әрбір секцияның ішінде ең алдымен өріс , одан кейін әдіс, қасиет және оққиға жарияланады. Класс құрылымына мысал:type TMyClass = class(TControl) private ... {меншік жариялану мына жерде} protected ... {қорғалған жариялану мына жерде} public ... {қатынас бар жариялану мына жерде} published ... { жариялану мына жерде} end;

Секциялар кластың құрамына кіретін элементтердің көріну аймағын анықтайды:

Private – көріну аймағын минимумге дейін кішірейтеді: сипаттаудың жабық элементтеріне тек класс сипатталған модульде орналасқан берілген кластың және бағыныңқы бағдарламаның әдістерінің ішінде ғана қатынауға болады. Private секциясында анықталған элемент басқа модульдерде орналасқан жақын ұрпақ кластарға да қол жетпейтін болып қалады. Әдетте private секциясына класс өрістерінің сипаттамасын орналастырады, ал осы өрістерге қатынасты қамтамасыз ететін әдістерді protected секциясына орналастырады.

28

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 29-сі

Public – класс жарияланған uses тізімінде модульге сілтемеден тұратын ағымды және кез – келген бағдарламаның модулінде көрінетін элементтер жиынынан тұрады.

Published – ол Public сияқты, бірақ айырмашылығы тек мынада, published секциясы құрауыштарды жариялауда қолдану үшін арнайы даярланған. Бұл секцияға орналастырылған қасиеттер тек бағдарламаның орындалу барысында ғана емес сонымен қатар көрнекілік конструкциялау кезінде Объект Инспекторының терезесінде де оған қатынауға болады. Сондықтан published секциясында жарияланған өрістер класс типтес болуы керек. Пішін (мысалы, TForm1) класының жариялануының басында орналасқан аты жоқ секция, үнсіздікпен published секциясы болып табылады.

Protected – кластың және оның кез – келген ұрпақ кластарының әдістеріне ғана қатысты элементтерден тұрады және олар сол модульде орналасты ма? жоқ па? одан тәуелсіз. Әдетте protected класына кластың әдісінің сипаттамасын орналастырады.

Automated – OLE-объект Автоматизацисы интерфейсіне қосылатын қасиеттер мен әдістерді жариялауға қолданылады. Бұл секцияның мүшелерінің көріну аймағы шектелмеген.

Бір кластың төңірегінде ретсіз кез – келген секция құрылуы мүмкін. Секциялардың орналасу тәртібі де әртүрлі болуы мүмкін. Сонымен қатар кез – келген секция бос болуы мүмкін.

2.8 Кластарға операциялар қолдану. IS және AS кілттік сөздері

Кластарға екі операция қолдануға рұқсат етілген – IS және AS операциялары.

1. IS операторы. IS операторының көмегімен берілген класс нұсқалған типке тиісті ме

соны анықтауға болады. IS операторынан тұратын өрнектің синтаксисінің түрі мынандай болады:

object is classБұл өрнек логикалық типтен (boolean) тұрады, егер object айнымалысы

class класының объектісі немесе кластардың біреуінің объектісі болса, онда TRUE мәнін қайтарады, әйтпесе – FALSE. Мысал 2.8.1 IF ActiveControl IS TEdit THEN ...

IS операторы бульдік мәнді қайтарады. TRUE – егер тексерілетін айнымалы ActiveControl берілген типке

қатысты болса (TEdit). Сонымен қатар нұсқалған тип тексерілетін айнымалының арғы – тегі болып табылса (яғни ActiveControl TEdit класының немесе одан туындаған бір кластың объектісі болса).

29

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 30-сі

FALSE – кері жағдайда.Мысал 2.8.2 IF ActiveControl IS TObject THEN DoSomeThing;

Барлық кластар TObject класының ұрпақ кластары болғандықтан, DoSomeThing процедурасы кез – келген жағдайда орындалады.

2. AS операторы. AS опрераторы нұсқағышты нақты типке келтіру үшін қолданылады. AS

операторынан тұратын өрнектің синтаксисінің түрі мынандай болады:object as classБұл өрнектің есетелінуінің нәтижесі болып class класының типіне

немесе class класының ұрпақ – класының типіне сай келетін объектіге сілтеме табылады. Бағдарламаның орындалу барысында object class класы типті немесе class класының ұрпақ – класының типті немесе nil типті болуы мүмкін. Үйлеспеген типке келтіру ерекше жағдайдың өрбуіне әкеп соғады.Мысал 2.8.3 WITH ActiveControl AS TEdit DO DoSomeThing;

Келтірілген фрагментте ActiveControl айнымалысы қандай да бір класқа нұсқағыш болуы мүмкін. AS операторының көмегімен бұл нұсқағыш TEdit – тегі нұсқағышқа түрленеді. Егер ActiveControl айнымалысы TEdit типінің (немесе оның бір ұрпақ кластарының) объектісі болып табылмайтыны анықталса, онда типтің келтірілуі орындалмайды және DoSomeThing әдісі шақырылмайды. Кері жағдайда типтердің келтірілуі орындалады және DoSomeThing әдісі шақырылады.Мысал 2.8.4

with Sender as TButton do // егер Sender TButton типтен тұрса begin // немесе TButton – нан ұрпақ -тип Caption := '&Ok'; OnClick := OkClick; end;...(Sender as TButton).Caption := '&Ok'; // TButton немесе оның ұрпақтары

типтес // Sender айнымалысының Caption қасиетіне '&Ok' мәні

меншіктеледі

2.9 Оқиға және меншіктеу

Windows жүйесінде бұрыннан жұмыс істеп келе жатқан программистке "оқиға" терминінің мағынасын ұқтырудың қажеті жоқ шығар. Осы орта мен ол үшін жазылған бағдарламаның барлығы қолданушы, компьютер аппаратурасы немесе басқа бағдарламаның әсерінің нәтижесінде өрбитін оқиға арқылы

30

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 31-сі

басқарылады. Оқиғаның басталуы туралы хабар – ол терезе функцияларының көмегімен алынған Windows жүйесінің хабарламалары.

Қолда анықтамалық бола тұра, мұндай санды хабарламалармен жұмыс істеу оңайға түспейді. Сондықтан Delphi – дің артықшылықтарының бірі болып программистің Windows хабарламаларымен жұмыс істеу қажеттілігінен арылғаны болып табылады (бірақ оның мұндай мүмкіншілігі бар; ол туралы келесі бөлімде айтамыз). Delphi – де типтік оқиғалардың саны екі ондықтан аспайды және олардың барлығы орта туралы терең білімді қажет етпейтін қарапайым интерпретациядан тұрады.

Object Pascal тілінің деңгейінде іске оқиғалар қалай іске асырылғанын қарастырайық.

Оқиға — бұл сырттан келген әсерлерге қолданушының реакциясын құруға тағайындалған процедуралық типтің қасиеті. Мұндай қасиеттің мәні болып қандай да бір әдіске нұсқағыш табылады.

Оқиғаны сипаттаудың синтаксисі мынадай: property OnMyEvent: TMyEvent read FOnMyEvent

write FOnMyEvent;мұндағы OnMyEvent – қасиет-оқиғаның аты, TMyEvent – оқиғаның

процедуралық типі, FOnMyEvent — өріс, ол сәйкес келетін оқиғаны өңдейтін әдіске нұсқағышты сақтауға тағайындалған.

Мұндай қасиетке мән тағайындау дегеніміз - объектіге оқиға шақырылған кезде шақырылатын әдістің адресін нұсқау. Мұндай әдістер оқиғаны өңдеуіштер деп аталады. Мысалы, мына жазу:

Application.OnActivate := MyActivatingMethod;

Application (осылай жұмыс істеп тұрған қосымшаға сай келетін объект аталады) объектісі активтелгенде MyActivatingMethod өңдеу - әдісі шақырылатынын білдіреді.

Кітапхананың ішінде Delphi – дің орындалу уақытында Windows хабарламаларын өңдейтін оқиғаны өңдеу шақыртулары әдістерде орналастырылады. Қажетті әрекеттерді орындағаннан кейін бұл әдіс өңдеушініңадресі белгіліме соны тексереді, ал егер ол белгілі болса, онда оны шақырады:

if Assigned(FOnMyEvent) then FOnMyEvent(Self);Оқиға пайда болғанына және тағайындалуына байланысты

параметрлерінің әртүрлі саны мен типінен тұрады. Барлығына жалпы болып Sender параметрі табылады, ол оқиғаның объект-көзіне нұсқайды. Ең қрапайым процедуралық тип — TNotifyEvent – оның екі параметрі болмайды:

TNotifyEvent = procedure (Sender: TObject) of object;

Мысал 2.9.1 Мысал ретінде TControl класының стандарты оқиғаларының OnDblClick (тышқанның сол жақ батармасына екі рет шерткенде өрбиді), OnMouseDown (тышқанның батырмасын басқанда өрбиді)

31

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 32-сі

және OnMouseMove (тышқанды жылжытқанда өрбиді ) сипатталуын қарастырайық:

type TControl = class(TComponent) private

.............................. FOnDblClick: TNotifyEvent; FOnMouseDown: TMouseEvent; FOnMouseMove: TMouseMoveEvent;

.............................. protected

.............................. property OnDblClick: TNotifyEvent read FOnDblClick

write FOnDblClick; property OnMouseDown: TMouseEvent read FOnMouseDown

write FOnMouseDown; property OnMouseMove: TMouseMoveEvent read FOnMouseMove

write FOnMouseMove;..............................

end;FOnDblClick, FOnMouseDown и FOnMouseMove – оқиға-қасиетін

сипаттағанда қолданылатын өрістер. Өрістерді сипаттағанда қолданылатын процедуралық типтер келес түрде анықталады:type TNotifyEvent = procedure (Sender: TObject) of object; TMouseEvent = procedure (Sender: TObject; Button: TMouseButtton;

Shift: TShiftState; X, Y: Integer) of object; TMouseMoveEvent = procedure (Sender: TObject; Shift: TShiftState;

X, Y: Integer) of object;Процедуралық типтерге жалпы болып оқиғаның объект-көзіне

нұсқағыштан тұратын Sender параметрі табылады. Button параметрі тышқанның қай батырмасы басылғандығы туралы ақпараттан тұрады. Shift параметрі пернетақтада басылған батырманың кодынан тұрады. X және Y – құрауыштың шегіндегі тышқанның ағымды координаталары.

Инспектор объектісінің Events парағының кез – келген оқиғасының өрісіне шерту арқылы, сіздер бағдарламада керекті типтің әдісінің дайындамасын аласыздар. Мұнда ат ағымды құрауыш пен оқиғаның атынан тұратын болады (On префикісі болмайды), ал ол ағымды пішінге тиісті болады. Form1 пішінінде Label1 белгісі бар деп ұйғарайық. Онда тышқанмен шерту өңдеуішіне (OnClick оқиғасы) TForm1 класының Label1Click әдісінің тақырыбы құрылады:

procedure TForm1.Label1Click(Sender: TObject); begin ... end;Оқиға объектінің қасиеті болып табылғандықтан, олардың мәнін

бағдарламаның орындалу барысының кез – келген жерінде өзгертуге болады.

32

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 33-сі

Мұндай тамаша мүмкіндік атын қайта өзгерту деп аталады. Кез – келген уақытта бір объектінің оқиғаға реакциясының тәсілін алып, оны келесі бір объектіге қайта тағайындауға болады:

Object1.OnMouseMove := Object2.OnMouseMove;

Меншіктеу принципі әрбір арнайы жағдай үшін жаңа еншілес кластың тууы деген үлкен үрдістің пайда болуының алдын алады және ондай үрдістерді қарапайым процедураларды қоюмен айырбастайды.

Қандай механизм өңдеуішерді ауыстыруға мүмкіндік береді?, өйткені ол жай ғана процедура емес, әдіс қой. Бұл жерде Object Pascal тілінің әдіске нұсқағыш деген ұғымы сай келеді. Әдіс қарапайым процедурадан айқын сипатталған параметрлерден басқа әдіске айқын емес түрде класта автоматты түрде анықталған Self айнымалысына орналастырылатын оны шақырған объектіге нұсқағыштан тұрады. Сипатталып отырған процедуралық тип әдіске тағайындалғанын (яғни Self – ті алуды қарастырады), яғни әдістің типі болып келгенін көрсету үшін процедураны сипаттағанда of object резервтелген сөзді қосу керек. Әдіске нұсқағыш дегеніміз – ол осындай процедураға нұсқағыш болып табылады. type TMyEvent = procedure(Sender: TObject; var AValue: Integer) of object; T1stObject = class; FOnMyEvent: TMyEvent; property OnMyEvent: TMyEvent read FOnMyEvent write FOnMyEvent; end; T2nd0bject = class; procedure SetValuel(Sender: TObject; var AValue: Integer); procedure SetValue2(Sender: TObject; var AValue: Integer); end;var Obj1: T1stObject; Obj2: T2nd0bject;begin Obj1 := T1stObject.Create ; Obj2 := T2nd0bject.Create; Obj1.OnMyEvent := Obj2.SetValue1; Obj1.OnMyEvent := Obj2.SetValue2; ...end.

Бұл мысал атын қайта өзгерткен кезде басқа кластардың да әдістерін меншіктеуге болатындығын көрсетеді. Мұнда Objl объектісінің OnMyEvent оқиғасының өңдеуіші болып ретпен Obj2 объектісінің SetValue1 және SetValue2 әдістері табылады.

Объект Инспекторының Events бетінде әдістің, яғни оқиғаның типіне сай келетін құрауыштың қасиеттері бейнеленеді. Қандай да бір оқиғаға қойылатын оқиғанының өңдеуішінің типі оқиғаның типіне сай болуы керек, сондықтан әдістің типін басқаша оқиға өңдеуішінің типі деп те атауға болады.

33

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 34-сі

Бақылау сұрақтары:1. Класс пен оның элементтеріне ат тағайындағанда ұсынылатын ережелер. 2. Класс дегеніміз не? Объект дегеніміз не? Кластың жариялануы.

Объектінің жариялануы. Кластың синтаксисі.3. Кластың өрісі дегеніміз не? Мысалдар. Кластың өрістерінің қалқалануы.

Мысалдар. 4. Кластың әдісі болып не табылады? Мысалдар. Кластың әдісі кәдімгі

процедурадан несімен ерекшеленеді?5. Әдістердің қалқалануы. Статикалық қалқалану. Динамикалық қалқалану. 6. Динамикалық, виртуальды және қалқалау әдістері. Мысалдар.7. Абстракті әдістер. Мысалдар. Қайта іске қосылатын әдістер. Мысалдар.8. Конструктор мен деструктор. Мысалдар. 9. Кластың қасиеті. Қасиеттің синтаксисі. Мысалдар.10.Қасиеттің класы өрістің класынан несімен ерекшеленеді? Read, write

специфиациялары.11.Инкапсуляция. Мысал.12.Туындау. Мысал.13.Полиморфизм. Мысал.14.Кластың құрылымы. Published, private, protected, public секциялары. 15.Кластарға амадар қолдану. IS және AS кілттік сөздері. Мысалдар.16.Оқиға. Оқиғаның сипатталынуының синтаксисі. Мысалдар.17.Процедуралық тип. Мысалдар.18.Ең қарапайым процедуралық тип болып қандай тип табылады? Sender

параметрі. 19.Оқиғаның өңдегішін қалай шақырады?20.Оқиғаға қайта ат тағайындау. Мысалдар.

Өз бетінше орындауға арналған тапсырма1. Объектілі – бағытталған бағдарламалаудың негізгі принциптері.

Объект, хабарлама, класс, объектінің данасы және әдіс. 2. Абстракция, инкапсуляция, туындау және полиморфизм. Мысалдар.3. Delphi – дің абстрактілі кластарының сипаттамалары (TObject,

TPersistent, TComponent). 4. Delphi – дің абстрактілі кластарының сипаттамалары (TControl,

TGraficControl, TWinControl, TScrollingWinControl).5. Stored, default (немесе nodefaulte), implements спецификациялары.

Мысалдар.6. Берілгендердің динамикалық құрылымы. Нұсқағыштар, динамикалық

айнымалылар. Мысалдар.7. Variant типі. Variant типті айнымалылар. Variants модульі.

34

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 35-сі

3 ТЕРЕЗЕЛІК ҚОСЫМШАЛАРДЫ ҚҰРУ3.1 Label, Edit, Memo мәтіндік құрауыштары. Button батырмасы

Label тамғасы Иерархиясы:TObject – TPersistent – TComponent – TControl – TGraphicControl –

TCustomLabel.Құрауыштар Палитрасының Парағы: Standard.Тамғалар экранға әртүрлі түсініктеме, атаулар, тақырыптар және т.б.

тұратын мәтіндік ақпараттарды орналастыруға тағайындалған. Delphi – дегі тамғалар TLabel класының данасы болып табылады. TLabel класы тамғалардың негізгі сипаттамалары анықталған TCustomLabel класының ұрпақ класы болып табылады. Бұл класс TGraphicControl класының тікелей ұрпақ класы болып табылады, сондықтан ол тек тышқан арқылы берілген оқиғаға ғана әсер етеді.

TCustomLabel класының қасиеттерінен келесілерді белгілейміз: Тамғаға негізгі қасиет болып TСontrol класынан туындалған Caption

қасиеті табылады. Дәл осында экранға шығатын мәтін орналастырылады. property Caption: TCaption;

typeTCaption = type WideString;

property Alignment: TAlignment;type

TAlignment = (taLeftJustify, taRightJustify, taCenter);

Қасиет құрауыштағы мәтіннің теңестірілуін анықтайды. Ол келесі мәндерді қабылдауы мүмкін: taLeftJustify – сол жақ шеті бойынша теңестірілу; taRightJustify – оң жақ шеті бойынша теңестірілу, taCenter – ортасы бойынша теңестірілу. Үнсіздік белгісімен теңестірілу сол жақ шеті бойынша ұйымдастырылады.

property AutoSize: Boolean;Егер қасиеттің мәні True – ге тең болса, онда тамғаның биіктігі мен ені

онда орналасқан мәтінге сәйкес автоматты түрде өзгереді. property Layout: TTextLayout;

typeTTextLayout = (tlTop, tlCenter, tlBottom);

Қасиет тамғаның вертикаль жағдайын анықтайды:tlTop – жоғарғы бөлігінде орналасқан;

35

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 36-сі

tlCenter – ортасында орналасқан;

tlBottom – төменде орналасқан.

property Transparent: Boolean;Егер қасиет True мәнінен тұрса, тамғаның фоны басқа құрауыштармен

қатынасына қарағанда айқын болады. Үнсіздік белгісімен False мәніне тең.property WordWrap: Boolean;Егер қасиет True мәніне тең болса, онда ағымды жол толтырылғаннан

кейін мәтіннің жаңа жолға тасымалдануы орындалады. Үнсіздік белгісімен False мәніне тең.

Тамға тышқанды қолданған және құрауыштарды тасымалдаған кез – келген оқиғаны өңдейді. Үнсіздікпен тамға үшін оқиға OnClick оқиғасы болып табылады.

TCustomEdit класыDelphi – де пернетақта арқылы бағдарламаға әртүрлі символдық

ақпараттарды енгізетін және редакциялайтын бірнеше құрауыштар анықталған. Олардың барлығы мынандай мүмкіншіліктерді жүзеге асыра алады, ерекшелеу, көшіру, жою, үзінділерді қою, мәтіннің скроллингі, егер ол терезеге сыймайтын болса және т.б. Барлық редактірлердің жиынынан біз TEdit класының жолды енгізу және мәтін редактірі TMemo – ны қарастрамыз.

Көптеген стандартты редактірлер TCustomEdit класының ұрпақтары болып табылады. TWinControl класының ұрпақ класы болып табылатын TCustomEdit класы барлық мәтіндік редакторларға жалпы болып табылатын сипаттамалар тізімінен тұрады. Ең негізгісі болып келесі қасиеттер табылады:

property AutoSelect: Boolean;Егер қасиеттің мәні True – ге (мәні үнсіздік бойынша) тең болса, онда

мәтін редактір белсенді болғанда ерекшеленеді. property AutoSize: Boolean;Егер қасиеттің мәні True – ге тең болса, онда редактордың биіктігі

қаріптің биіктігіне сәйкес автоматты түрде өзгереді. property MaxLength: Integer;Редактірге орналастырылатын символдардың максимальды санын

анықтайды. Егер қасиеттің мәні нольге тең болса (үнсіздікпен қолданылады), онда редактірге символдардың ерікті санын орналастыруға болады.

property PasswordChar: Char;Редактірге нақты енгізілетін симолдардың орнына бейнеленетін

символды береді. Редактірдің мұндай тәртібі бағдарламада парольді қолданғанда керек болады. Егер қасиеттің мәні коды 0-ге тең (мәні үнсіздік

36

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 37-сі

бойынша) символ болса, онда енгізілетін символдар түрлендірілусіз бейнеленеді.

property ReadOnly: Boolean;Егер қасиеттің мәні True – ге тең болса, онда мәтін тек оқуға ғана

тағайындалған, яғни оны өзгертуге болмайды. Үнсіздік бойынша мәні False – ге тең.

TCustomEdit класында редактірлеу функцияларын жүзеге асыратын бірнеше әдістер анықталған:

procedure Clear; virtual;Редактірде орналастырылған барлық мәтінді жояды. procedure ClearSelection; Мәтіннің ерекшеленген үзіндісін жояды.procedure CopyToClipboard; Мәтіннің ерекшеленген үзіндісін Clipboard буферіне көшіреді. procedure PasteFromClipboard; Clipboard буферіндегі мәтінді редактірдің меңзерінің орнына көшіреді.procedure SelectAll; Редактірде орналасқан бүкіл мәтінді ерекшелейді.Көптеген редактірлерде келесі командаларды орындайтын, құрамдас

жергілікті менюлер бар:Undo – мәтіндегі соңғы орындалған операцияны болдырмау;

Cut – ерекшеленген үзіндіні қиып алып, оны алмасу буферіне орналастыру;

Copy – ерекшеленген үзіндіні алмасу буферіне көшіру;

Paste – алмасу буферіндегі үзіндіні мәтіннің меңзер орнынан бастап орналастыру;

Delete – ерекшеленген үзіндіні жою;

Select All – бүкіл мәтінді ерекшелеу.

Edit енгізу жолы Иерархиясы:TObject – TPersistent – TComponent – TControl – TWinControl –

TCustomMaskEdit – TCustomEdit.Құрауыштар Палитрасының Парағы: Standard.TEdit класының данасы болып табылатын енгізу жолы Edit мәтіннің бір

жолын енгізуге және редактірлеуге мүмкіндік береді.

37

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 38-сі

TEdit класы – TCustomEdit класының тікелей ұрпақ классы және оның барлық сипаттамаларын туындайды.

Енгізу жолының негізгі қасиеті болып Text қасиеті табылады: property Text: TCaption;

typeTCaption = string;

Edit редактіріндегі символдық жолдан тұрады.Символдық жол қасиетке пішінді құрастыру кезеңінде немесе

бағдарламаның орындалуы барысында орналастырылуы мүмкін. Көбінде редактір ақпаратты енгізу үшін қолданылады. Бұл жағдайда пішінді құрастыру кезеңінде Text қасиетіне бос жолды орналастыруға болады, ал бағдарламаның орындалуы барысында одан енгізілген мәндерді алуға болады. Егер сандық берілгендердің символдық белгілері енгізілсе, онда алдыңғы уақытта типті түрлендіретін сәйкес бағыныңқы бағдарламаның көмегімен түрленуі қажет (Б қосымшасына қараңыздар).

Енгізу жолы терезелік басқару элементі болып табылғандықтан, ол пернетақта мен тышқан арқылы берілген хабарламаны, тасымалмен байланысты, активтеу мен активтеуді болдырмау, сонымен қатар OnChange оқиғасын өңдейді:

property OnChange: TNotifyEvent;Енгізу жолының мәтіні өзгергенде өрбиді. Үнсіздік бойынша TEdit

класының енгізу жолының оқиғасы болып табылады.

Memo мәтіндік редактірі Иерархиясы:TObject – TPersistent – TComponent – TControl – TWidgetControl –

TCustomEdit – TCustomMemo.Страница Палитры Компонентов: Standard.Memo мәтіндік редактірі Edit енгізу жолымен салыстырғанда бір емес,

кез – келген жолдар санынан тұруы мүмкін. Memo редактірі TMemo класының данасы болып табылады. Өз кезегінде TMemo класы тікелей TCustomMemo класынан туындаған, онда көп жолды мәтіндік редактірлердің негізгі сипаттамалары берілген.

TCustomMemo класының келесі қасиеттерін белгілейік:property Lines: TStrings;TStrings кластық типтің қасиеттері (төменнен қараңыздар). Редактірде

орналасқан жолдар тізімін береді.property ScrollBars: TScrollStyle;

38

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 39-сі

typeTScrollStyle = (ssNone, ssHorizontal, ssVertical, ssBoth);

Скроллингтің сызғыштарының барын береді:ssNone – сызғыш жоқ,

ssHorizontal – тек көлденең сызғыш,

ssVertical –тек тік сызғыш,

ssBoth –екі сызғыш та бар.

property WantReturns: Boolean;Enter пернесінің әрекетін анықтайды. Егер мәні True – ге тең болса, онда

Enter пернесіне басқанда мәтіннің жаңа жолына ауысу орындалады. Қарсы жағдайда енгізу фоксы пішінге беріледі, ал мәтіннің жаңа жолына көшу Ctrl+Enter пернелерінің комбинациясын басқанда орындалады.

Edit енгізу жолы сияқты, көп жолды Memo мәтіндік редактірі пернетақта мен тышқан арқылы берілген хабарламаны, тасымалмен байланысты, активтеу мен активтеуді болдырмау, сонымен қатар OnChange (үнсіздік бойынша ) оқиғасын өңдейді:

TStrings класы TStrings – TPersistent класының тікелей ұрпақ класы абстрактілі класс

болып табылады. Бұл кластың объектілері жолдар тізімін береді. Әрбір жолмен қандай да бір объект байланысқан болуы мүмкін, мысалы сурет немесе пиктограмма. Егер жолмен ешқандай объект байланыспаған болса, онда оған нұсқағыштың мәні nil – ге тең. TStrings класы жалпы тағайындалған класс болып табылады және Delphi – дегі көптеген құрауыштарға сәйкес типтердің қасиеттерін анықтау үшін қолданылады. TStrings класының негізгі қасиеттерін қарастырайық:

property Count: Integer;Тізімдегі элементтердің санын анықтайды.property Objects[Index: Integer]: TObject;Index индексі бар жолмен ассоциативтелген объектіге нұсқағышты

анықтайды. property Strings[Index: Integer]: string;Тізімнің Index индексі бар жолын анықтайды. Бірінші жолдың индексі – 0.

property Text: string;Тізімнің барлық жолдарынан тұрады, бөлгіштерді қоса алғанда –

каретканы қайтару символы және жолды аудару (#13#10).TStrings класында анықталған негізгі әдістер:function Add(const S: string): Integer; virtual;

39

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 40-сі

Тізімге S жолын қосады және осы жолдың тізімдегі реттік нөмірін қайтарады.

function AddObject(const S: string; AObject: TObject): Integer; virtual;S жолын және онымен байланысты AObject объектісін тізімге қосады

және тізімдегі жол мен объектінің индексін қайтарады. procedure AddStrings(Strings: TStrings); virtual;TStrings класының басқа Strings объектісінің тізімін ағымды тізімге

қосады. procedure BeginUpdate;Тізімді жаңалаудың басын бекітеді. Экранда қайта сурет салу уақытша

тоқтатылады. procedure Clear; virtual; abstract;Тізімдегі барлық жолдарды және объектіге нұсқағыштарды жояды. procedure Delete(Index: Integer); virtual; abstract;Index индексі бар элементті тізімнен жояды.procedure EndUpdate; Жаңартудың аяқталуын бекітеді және қажет болған жағдайда жолдарды

сұрыптайды.procedure Exchange(Index1, Index2: Integer); virtual;Index1 және Index2 индекстері бар екі элементі орындарымен

ауыстырады.procedure Insert(Index: Integer; const S: string); virtual; abstract;Тізімге Index индекспен S жолын қояды.procedure InsertObject(Index: Integer; const S: string; AObject: TObject); Тізімге S жолын және Index индекспен AObject объектісін қояды.

procedure LoadFromFile(const FileName: string); virtual; FileName аты бар файлдан тізімді іске қосады.procedure Move(CurIndex, NewIndex:Integer); virtual; Тізімнің элементін CurIndex позициясынан NewIndex позициясына

жылжытады.

procedure SaveToFile(const FileName: string); virtual; тізімді FileName аты бар файлға орналастырады.

Button батырмасы Иерархиясы:

40

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 41-сі

TObject – TPersistent – TComponent – TControl – TWinControl – TButtonControl.

Құрауыштар Паоитрасының Парағы: Standard.Батырманың негізгі тағайындалуы – оған шерткенде оқиғаның

қалыптасуы. Батырма оған шерткенде қандай да бір әрекетті орындайтындай қажеттілік туатын пішіннің кез – келген жерінде орналасуы мүмкін. Button батырмасы TButton класының данасы болып табылады, олардың арғы тектері болып TButtonControl және TwinControl кластары табылады. Сондықтан Button батырмасы терезелік басқару элементі болып табылады.

TButton класына келесі қасиеттер қосылған:property Cancel: Boolean;Егер қасиеттің мәні True – ге тең болса, онда ESC пернесіне басу,

берілген батырмаға басумен мәндес болады.property Default: Boolean;Егер қасиеттің мәні True – ге тең болса, онда Enter пернесіне басу,

берілген батырмаға басумен мәндес болады, егерде енгізу фокусында қандай да бір басқа батырма орналаспаса.

property ModalResult: TModalResult;type

TModalResult = Low(Integer)..High(Integer);

Модальды терезелерді жапқанда қолданылатын қасиет. Қарапайым терезелер үшін бұл қасиеттің мәні mrNone – ге тең болуы керек..

TButton класында Click әдісі анықталған:procedure Click; override;Бұл әдістің орныдалуы батырмаға шерткенге мәндес келеді, яғни оның

орындалуының нәтижесінде батырма үшін OnClick оқиғасы өрбиді.TButton класының батырмаларының ерекшеліктері оларда Color қасиеті

болмайды және фонның түсі Windows операциялық жүйесі арқылы анықталады.

TButton класының батырмалары терезелік басқару элементтері үшін анықталған оқиғаларды өңдейді. Үнсіздік белгісі бойынша батырма үшін оқиға болып OnClick оқиғасы табылады.Мысал 3.1.1. Label, Edit, Memo және Button құрауыштарын қолдану.

Ағымды коэффициенттері бар ( ) квадрат теңдеудің түбірлерін есептейтін бағдарлама құру

Шешімі:

41

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 42-сі

1. Меншік қаптамаңызға (№1 – ші практикалық жұмысқа қараңыздар) MyFirstProject қаптамасын құрыңыздар (кез – келген басқаны да құруға болады).

2. Негізгі менюдің File | New | Application командасы арқылы жаңа қосымша ашыңыздар.

3. Form1 пішініне келесі құрауыштарды орналастырыңыздар (3.1.1 суретіне қараңыздар):

4. Label тамғасының Caption қасиетіне мына мәнді беріңіздер:«Введите коэффициенты квадратного уравненияA2*X^2+A1*X+A0=0»Мәтін екі жолға орналасу үшін және тамғаның ортасы бойынша теңестірілуі үшін қасиеттің келесі мәндерін қажетті түрде орнату керек:

AutoSize – False,WordWrap – True,Alignment – taCenter.Тамғаның өлшемін және оның орналасу жағдайын қолмен ұйымдастыруға болады. Font қасиетіне келіңіздер және үш нүктесі бар батырмаға шертіңіздер. Пайда болған терезеден қаріптің өлшемін 8 – ден 10 – ға өзгертіңіздер. OK батырмасына басыңыздар .

5. Label2, Label3 және Label4 тамғалары үшін Caption қасиетіне ‘A0=’, ‘A1=’ және ‘A2=’ - ге тең деп сәйкес орнатыңыздар.

6. Edit1, Edit2 және Edit3 қасиеттері үшін Text қасиетінің мәнін бос жолға тең деп орнатыңыз.

7. Memo1 құрауышы үшін Lines қасиетін таңдаңыздар және үш нүктесі бар батырмаға басыңыздар. Пайда болған String List Editor терезесінен ‘Memo1’ жолын жойыңыздар. OK батырмасына басыңыздар.

8. Button1 және Button2 батырмаларының Caption қасиетіне ‘Решение’ және ‘Очистить’ сәйкес орнатыңыздар.

9. Екі рет шерту арқылы Решение батырмасын белсенді етіңіз және OnClick оқиға өңдеуішіне келесі жолды қойыңыздар:

procedure TForm1.Button1Click(Sender: TObject);var a0, a1, a2, d, x1, x2: Double;

begin

42

Сурет 3.1.1 Пішінге TLabel, TEdit, TMemo және TButton кластарының құрауыштарын орналастыру

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 43-сі

a0 := StrToFloat(Edit1.Text); a1 := StrToFloat(Edit2.Text); a2 := StrToFloat(Edit3.Text); d :=a1*a1-4*a2*a0;

IF d>=0 THEN BEGIN x1 := (-a1+sqrt(d))/(2*a2);

x2 := (-a1-sqrt(d))/(2*a2);

Memo1.Lines.Add(’Результат:’);

Memo1.Lines.Add(’x1 = ’+FloatToStrF(x1,ffGeneral,7,2)); Memo1.Lines.Add(’x2 = ’+FloatToStrF(x2,ffGeneral,7,2)); END; IF d<0 THEN Memo1.Lines.Add(’Решений нет:’);

end;

Бағдарламаушы терген жолдар жартылай қою қаріппен ерекшеленген. 10. F12 пернесіне басыңыздар және

пішінге қайтып оралыңыздар. Екі рет шерту арқылы Очистить батырмасын белсенді етіңіз және OnClick оқиға өңдеуішіне мына жолды қойыңыздар

Memo1.Clear;

11. Жобаны C:\…\Мои документы\…\ MyFirstProject қаптамасына сақтаңыздар және F9 функциональды пернесін қолданып қосымшаны іске қосыңыз. Квадрат теңдеуді шешу үшін коэффиценттерді енгізіңіз және Решение батырмасына басыңыз. Редактірлеу терезесін тазалау үшін Очистить батырмасына басыңыздар (сурет 3.1.2 қараңыздар).

3.2 Пернетақта арқылы берілген хабарламаны өңдеу

TWinControl класында пернетақтамен жұмыс істегенде пайда болатын оқиғалар анықталған. Оларға келесі оқиғалар кіреді:

property OnKeyDown:TKeyEvent;

43

Сурет 3.1.2 Квадрат теңдеуді шешуге арналған пішін

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 44-сі

Оқиға пернетақтаның пернесі басылғанда өрбиді. Оқиғаны өңдеу типі TKeyEvent:typeTKeyEvent = procedure(Sender: TObject; var Key: Word;

Shift: TShiftState) of object;мұндағы Sender – активті басқару элементіне сілтеме жасайтын параметр; Key – басылған перненің коды; type

TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);

Shift – пернетақтаның Alt, Ctrl, Shift пернелерінің және тышқанның пернелерінің күйін қадағалайды (көптіктің типі, оның элементтері: ssShift –Shift батырмасы басылды, ssAlt – Alt батырмасы басылды, ssCtrl – Ctrl батырмасы басылды , ssLeft – тышқанның сол жақ батырмасы, ssRight – тышқанның оң жақ батырмасы, ssMiddle – тышқанның ортаңғы батырмасы, ssDouble – тышқанның батырмасымен екі рет шерту).Мысал 3.2.1 OnKeyDown оқиғасының өңдеуіші Alt+Ctrl+Z пернелерінің

қосындысына басқанда Form1 құрауышының пішіннің фонының түсіне clAqua (көгілдір) мәнін береді.

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

begin IF (Shift=[ssAlt,ssCtrl]) AND (Key=ORD(’Z’)) THEN

Form1.Color:=clAqua;end;

Пернелердің кодын VCL Reference анықтама жүйесінің Virtual Key Codes, Key Codes бөлімдерінен көруге болады.

property OnKeyPress:TKeyPressEvent; Символдық перне басылғанда өрбитін оқиға. Оқиғаны өңдеу типі

TKeyPressEvent:typeTKeyPressEvent = procedure(Sender: TObject;

var Key: Char) of object;Key параметрі – басылған перненің ANSI-кодын (символ) анықтайды.

property OnKeyUp:TKeyEvent; Оқиға пернетақтадағы басылған пернені босатқанда өрбиді. Оқиғаны

өңдеу типі TKeyEvent (жоғарыдағы OnKeyDown оқиғасын қараңыздар).Мысал 3.2.2 OnKeyPress оқиғасының өңдеуіші Form1 құрауышы үшін «R»

символдық пернесі басылғанда пішіннің фонының түсін қызылға өзгертеді, ал осы пернені босатқанда OnKeyUp оқиғасының өңдеуіші пішіннің фонының түсіне алғашқы мәнін орнатады (clBtnFace).

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);begin If Key='R' then Form1.Color:=clRed;end; {пернеге басқанда пернетақтаның регистрі және тілдік бөлінуі есепке алынады}

44

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 45-сі

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);

begin If Key=ORD('R') then Form1.Color:=clBtnFace;end;

Осымен қатар TwinControl класында терезелік элемент активті болғанда немесе активті болмаған жағдайда өрбитін оқиғалар анықталған:

property OnEnter:TNotifyEvent; Терезелік элемент енгізу фокусын алғанда өрбитін оқиға. Оқиғаны өңдеу типі

TNotifyEvent.typeTNotifyEvent = procedure(Sender: TObject) of object;

мұндағы Sender оқиға көзі - объектісіне нұсқаудан тұрады. property OnExit:TNotifyEvent; Терезелік элемент енгізу фокусын жоғалтқанда өрбиді. TControl класында басқару элементі тышқан, перне және таймер арқылы

қалыптастырылған оқиғаларды қалай қабылдайтынын анықтайтын қасиет бар:property Enabled: Boolean;

Егер қасиетің мәні TRUE болса, онда – қабылдайды,FALSE – қабылдамайды.

TScreen класында 2 оқиға анықталған:property OnActiveControlChange: TNotifyEvent;Оқиға пішіндегі активті басқару элементі өзгергенде өрбиді.property OnActiveFormChange: TNotifyEvent;Оқиға бағдарламада активті элемент өзгергенде өрбиді.

3.3 Тышқан арқылы берілген хабарламаны өңдеу

TControl класында тышқанды басқарғанда өрбитін оқиғалар анықталған. property OnClick:TNotifyEvent; Басқару элементін тышқан арқылы таңдағанда өрбитін оқиға

(тышқанның көрсеткіші басқару элементінің үстінде орналасқанда тышқанның сол жақ пернесі басылады және босатылады).

property OnDblClick:TNotifyEvent; Басқару элементіне тышқанның сол жақ пернесімен екі рет шерткенде

өрбитін оқиға. property OnMouseDown:TMouseEvent; Тышқанның көрсеткіші басқару элементінің үстінде тұрғанда,

тышқанның пернесі басылғанда өрбитін оқиға. Оқиғаны өңдеу типі TMouseEvent:typeTMouseEvent = procedure(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X,Y:Integer) of object;мұндағы Sender – оқиға болған құрауышқа нұсқайтын параметр; type

45

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 46-сі

TMouseButton = (mbLeft, mbRight, mbMiddle);Button параметірінің мәні тышқанның қай батырмасы басылғанын анықтайды (mbLeft – сол жақ, mbRidht – оң жақ , mbMiddle - ортаңғы); Shift – пернетақтаның Alt, Ctrl және Shift пернелерінің және тышқанның пернесінің күйін қадағалайды (жоғарыдағы OnKeyDown оқиғасын қараңыздар); X,Y – Sender құрауышының клиенттік аймағындағы тышқанның көрсеткішінің жергілікті координаталары (пиксельмен беріледі).

property OnMouseMove:TMouseMoveEvent; Тышқанның көрсеткіші басқару элементінің үстінде орналасқан кезде,

оны жылжытқанда өрбитін оқиға. Оқиғаны өңдеу типі TMouseMoveEvent:typeTMouseMoveEvent = procedure(Sender: TObject; Shift: TShiftState;

X,Y:Integer) of object;Параметлері OnMouseDown оқиғасындағы сияқты мағынаны береді.

property OnMouseUp:TMouseEvent; Тышқанның көрсеткіші басқару элементінің үстінде орналасқан кезде,

тышқанның пернесін босатқанда өрбитін оқиға. Оқиғаны өңдеу типі TMouseEvent (жоғарыдағы OnMouseDown оқиғасын қараңыздар).Мысал 3.3.1 Бұл мысал пішінде төрт панелі бар StatusBar1 (Win32 парағы)

қалып – күй жолының болуын талап етеді. . Панельді қосу үшін қалып – күй жолының Panels қасиетінің мәндер өрісінің үш батырмасына шерту арқылы Editing StatusBar1.Panels терезесін шақырыңыздар. Редактірлеу терезесінің басқару панельінің Add New батырмасына төрт рет шертіңіздер. (Мысалды орындамас бұрын әрбір панельдің Width қасиетіне 150 мәнін орнатыңыздар). Қолданушы тышқанның батырмасына басқанда, тышқанды жылжытқанда және тышқанның батырмасын босатқанда пішінде тіктөртбұрыш тартылады. Тышқанның батырмасы босатылғанда тіктөртбұрыш пішіннің канвасында пайда болады. Оның сол жақ жоғарғы және оң жақ төменгі бұрыштары тышқанды басқан және босатқан уақыттағы тышқанның көрсеткішінің орналасуымен анықталады. Қолданушы тышқанды жылжытқанда тіктөртбұрыштың сол жақ жоғарғы (Left, Тор) және оң жақ төменгі (Right, Bottom) бұрыштарының координаталары қалып –күй жолында бейнеленеді. Горизонталь осьі солдан оңға қарай жүреді. Вертикаль ось – жоғарыдан төмен қарай бағытталады. Осьтер тек қана оң мәндерден тұрады.

var StartX, StartY: Integer; {Пішіннің модульінің интерфейс бөлімінде

жариялайды}{Бұл кодты пішіннің OnMouseDown оқиғасының өңдеуіші ретінде қолданыңыздар: }procedure TForm1.FormMouseDown(Sender: TObject;

Button: TMouseButton; Shift: TShiftState; X,Y: Integer);begin StartX := X; StartY := Y;end;

46

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 47-сі

{ Бұл кодты пішіннің OnMouseUp оқиғасының өңдеуіші ретінде қолданыңыздар: }procedure TForm1.FormMouseUp(Sender: TObject;

Button: TMouseButton; Shift: TShiftState; X,Y: Integer);begin Form1.Canvas.Rectangle(StartX, StartY, X, Y); StatusBar1.Panels[0].Text := ''; StatusBar1.Panels[1].Text := ''; StatusBar1.Panels[2].Text := ''; StatusBar1.Panels[3].Text := '';end;{ Бұл кодты пішіннің OnMouseMove оқиғасының өңдеуіші ретінде қолданыңыздар: }procedure TForm1.FormMouseMove(Sender: TObject;

Shift: TShiftState; X,Y: Integer);begin if ssLeft in Shift then { батырманың басылғанын тексеріңіздер } begin if Y > StartY then begin StatusBar1.Panels[0].Text := 'Top: ' + IntToStr(StartY); StatusBar1.Panels[2].Text := 'Bottom: ' + IntToStr(Y); end else begin StatusBar1.Panels[0].Text := 'Top: ' + IntToStr(Y); StatusBar1.Panels[2].Text := 'Bottom: ' + IntToStr(StartY); end; if X > StartX then begin StatusBar1.Panels[1].Text := 'Left: ' + IntToStr(StartX); StatusBar1.Panels[3].Text := 'Right: ' + IntToStr(X); end else begin StatusBar1.Panels[1].Text := 'Left: ' + IntToStr(X); StatusBar1.Panels[3].Text := 'Right: ' + IntToStr(StartX); end; end;end;

3.4 Басқару элементтерінің тасуын қамтамасыз ететін сипаттамалар (Drag & Drop тетігі)

Экранда бейнеленетін басқару элементтері құрауыштар сияқты ерекше қасиеттерге ие, оларды экран бойынша жылжытуға болады және оларды басқа басқару элементтеріне түсіруге болады. Тасу (Drag & Drop) сәйкес басқару элементін тышқанмен керекті орынға сүйреу арқылы жүзеге асады. Тышқанның сол жақ батырмасын босатқанда құрауыштың сол жақ жоғарғы бұрышы тышқанның көрсеткіші нұсқаған нүктеге орналасады.

47

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 48-сі

Басқару элементтерін тасуға тағайындалған TControl класының негізгі сипаттамаларын қарастырайық.

Қасиеті (Properties):property DragCursor: TCursor;

typeTCursor = -32768..32767;

Басқару элементін тасыған уақыттағы тышқанның көрсеткішінің түрін анықтайды.

property DragMode: TDragMode;type

TDragMode = (dmManual,dmAutomatic);Басқару элементін тасудың режимін орнатады: егер dmAutomatic

(Автоматты түрде) мәнін қабылдаса, онда басқару элементін тікелей тышқанның көмегімен тасуға болады, егер dmManual (Қолмен) мәні тағайындалса, онда тікелей тышқанның көмегімен тасу мүмкін емес.

Оқиғалар (Events) :property OnDragDrop: TDragDropEvent;Басқару элементіне басқа тасылатын басқару элементі түсірілгенде

өрбитін оқиға. Оқиғаның өңдеуіші TDragDropEvent типінен тұрады: type

TDragDropEvent = procedure(Sender, Source: TObject; X, Y: Integer) of object;

мұндағы Sender тасылатын басқару элементі түсірілген объект; Source – тасылатын басқару элементі; X, Y – Source басқару элементін түсірген сәттегі тышқанның көрсеткішінің координаталары (Sender клиенттік аймағының координаталар жүйесіндегі). Оқиға шынымен Source басқару элементін Sender объектісіне түсірген кезде ғана өрбиді.

property OnDragOver: TDragOverEvent;Sender басқару элементінің үстіне басқа тасылған Source басқару

элементі орналастырылғанда өрбитін оқиға. Оқиғаның өңдеуіші TDragOverEvent типінен тұрады: type

TDragOverEvent = procedure(Sender, Source: TObject; X,Y:Integer; State: TDragState; var Accept: Boolean) of object;Sender, Source, X, Y параметрлері OnDragDrop оқиғасындағы сияқты мағына алады; State – тасу режимінің күйін анықтайды (dsDragEnter – тасылатын объект басқару элементіне түседі, ол арқылы оны жылжытуға болады; dsDragLeave – тасымалданатын элемент осы басқару элементін тастап кетеді; dsDragMove – тасылатын элемент басқару элементінің бойымен жылжиды); Accept – егер Sender объектісі тасымалданған элементті қабылдайтын болса, онда оқиғаның өңдеуіші True мәнін, ал кері жағдайда False мәнін беретін параметр.

property OnEndDrag: TEndDragEvent;Ағымды басқару элементін тасу аяқталғанда өрбитін оқиға. Оқиғаның

өңдеуіші TEndDragEvent типінен тұрады:

48

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 49-сі

typeTEndDragEvent = procedure(Sender, Target: TObject;

X, Y: Integer) of object;мұндағы Sender тасылатын басқару элементі; Target – үстінде тасылған басқару элементі орналасқан объект; X, Y – тасу аяқталған кездегі тышқанның көрсеткішінің координаталары. Оқиға кез – келген тасуды аяқтағанда және Target Sender басқару элементін қабылдағанда, қабылдамағанда өрбиді. Соңғы жағдайда тасылатын басқару элементі өз орынында қалады.

property OnStartDrag: TStartDragEvent;Ағымды басқару элементі тасылғанда өрбитін оқиға. Оқиғаның өңдеуіші

TStartDragEvent типінен тұрады:typeTStartDragEvent = procedure(Sender: TObject;

var DragObject: TDragObject) of object;мұндағы Sender – тасылатын басқару элементі; DragObject – тасу кезінде басқару элементінің кескінін қалыптастыратын арнайы объектіге сілтемеден тұрады. Үнсіздікпен nil – ге тең болады, яғни құрауыштың өзі тасылатын болады.

Бұл оқиғалардың барлығы қорғалған, бірақ ұрпақтар класында олар жинақталған болып жарияланады, сондықтан объект инспектрінде пайда болады. Оқиғалар қажетті түрде жазатын әдістерге нұсқағыш болып табылады, талап еткен жағдайда сәйкес оқиғаны өңдеп береді. Бұл әдістің дайындамасын қалыптастыру үшін инспектор объектісінен сәйкес оқиғаны тышқанның көмегімен активтеу керек.

TControl класында сүйреу режимін іске қосатын әдіс анықталған:procedure BeginDrag(Immediate: Boolean;

Threshold: Integer = -1);BeginDrag әдісі бағдарламаның кодында басқару элементінің DragMode

қасиетінің мәніне dmManual орнатылғанда шақырылады. Егер DragMode – dmAutomatic, онда әдіс автоматты түрде шақырылады.

Егер параметр Immediate - TRUE, онда тышқанның көрсеткіші DragCursor қасиетінде берілген түрді қабылдайды және жылжыту тез арада басталады. Егер Immediate – FALSE, онда тышқанның көрсеткішінің түрі өзгермейді, және қолданушы тышқанның көрсеткішін Threshold параметрінде көрсетілген пиксель санына жылжытқанша сүйреу басталмайды. Егер әдісті шақырғанда Threshold параметрі түсірілсе, онда BeginDrag Mouse ауқымды айнымалысының DragThreshold қасиетінің мәнін қолданады.

Immediate – қа FALSE орнататын болсақ, онда басқару элементі тасу амалын бастамай – ақ тышқанның шертуін қабылдайды. Мысал 3.4.1 Басқару элементін тасуды қамтамасыз ететін бағдарлама.

Басқару элементін тасуды жүзеге асыратын бағдарлама жазайық. Ол үшін пішінге GroupBox тақырыбы бар панель мен Button батырмасын орналастырайық. Батырма мен оған орналасқан панельді пішіннің бойымен жылжытайық.

49

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 50-сі

Батырманы жылжыту үшін оның DragMode қасиетіне dmAutomatic мәнін беру керек, ал пішін мен панель үшін OnDragDrop және OnDragOver оқиғаларының өңдеуішін жазу керек. Батырмаға OnStartDrag және OnEndDrag оқиғаларының қолданылғанын көрсету үшін батырмалардың аттарын өзгертетін оқиғалардың өңдеуішін жазу керек.

Тапсырманың шешімін келесі түрде ұйымдастыруға болады: 1. Button1 қасиетінің DragMode қасиетіне dmAutomatic мәнін тағайындайық.

Ол оның жылжуын тікелей тышқанның көмегімен асыруға мүмкіндік береді. 2. Пішін тасылатын батырманы қабылдайтындай күйде болатындай шартты

ұйымдастырайық. Ол үшін пішіннің OnDragOver оқиғасының өңдеуішін қалыптастырайық.

procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);begin Accept:= True; {Оқиға пішіннің жаңа орнына жылжығаннан кейін батырманың

босатылуына мүмкіндік береді}end;3. Пішінге батырманы тасуды аяқтауда қажетті әрекетті іске асыратын

OnDragDrop оқиғасының өңдеуішін құрайық: procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);begin

WITH Source AS TButton DO {Source параметрін TButton типіне әкелу, өйткені тасылатын батырма осындай типтен тұрады}

BEGINParent:= Pointer(Sender);{Батырмаға үлкен құрауыш беріледі - Parent

қасиетіне Sender (басқару элементі түсірілетін құрауыш) қасиетінің мәні тағайындалады, оны алдын – ала Pointer типіндегі нұсқағышқа айналдырамыз}

Left:= X; {Басқару элементінің сол жақ жоғарғы бұрышының Top:= Y; координаталарына басқару элементі түсірілген құрауыштың

ішіндегі тышқанның көрсеткішінің жергілікті координаталары меншіктеледі

END; end;4. Аналогиялық түрде панель үшін OnDragOver және OnDragDrop оқиға

өңдеуішін құрастырайық. Олар пішін үшін құрастырылған өңдеуіштерден аттары бойынша ғана өзгеретіндіктен, құрылған әдістерді меншіктеуді қолдануға болады.

5. Батырма үшін оны тасудың басы мен аяғының оқиғасының өңдеуішін құрастырайық (OnStartDrag және OnEndDrag оқиғалары), олар батырманың атын өзгертеді.

procedure TForm1.ButtonStartDrag(Sender: TObject; var DragObject: TDragObject);

beginWITH Sender AS TButton DOBEGIN

50

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 51-сі

Caption:= ’Перемещается’;{Егер тасымалданатын басқару элементі TButton типін немесе TButton типінің ұрпағын иемденсе, онда батырмаға«Перемещается» деген ат беріледі}

END; end;6. Аналогиялық түрде батырмаға OnEndDrag оқиғасының өңдеуішін құрайық:procedure TForm1.ButtonEndDrag(Sender, Target: TObject; X, Y: Integer);begin

WITH Sender AS TButton DOBEGINCaption:= ’Не перемещается’; {Егер тасымалданатын басқару элементі

TButton типін немесе TButton типінің ұрпағын иемденсе, онда батырмаға«Не перемещается» деген ат беріледі}

END; end;

Бұл өңдеуіште Sender - тасыланатын басқару элементі (батырма); Target – тасылатын басқару элементі түсірілген құрауыш (пішін немесе панель).

3.5 Диалог терезелері. Dialogs парағындағы Delphi құрауыштары (Open Dialog, Save Dialog, Font Dialog және т.б.)

Windows жанұясының операциялық жүйелері файлды ашуға және сақтауға, қаріпті, түсті, принтерді және басқаларды таңдауға және баптауға тағайындалған стандартты диалог терезелерінен тұрады. Delphi ортасы да стандартты диалог терезелерінен тұрады. Ол үшін Delphi – дің құрауыштар кітапханасында өз кезегінде тікелей TComponent класының ұрпақ класы болып келетін TCommonDialog (Жалпы диалог) бір ата – тек класына қатысты арнайы кластар анықталған. Диалог терезелері көрнекілік емес құрауыштардың мысалы болып табылады. Бұны мынадан байқауға болады, конструктірлеу кезеңінде пішінге орналастырылатын құрауыштың сыртқы көрінісі бағдарламаның орындалу барысындағы диалог терезесінің сыртқы көрінісімен сай келмейді.

Delphi - дің диалог терезелерін жүзеге асыру ерекшелігі олардың Windows жанұясының операциялық жүйесіндегі стандартты мүмкіншіліктерді қолдануы болады. Мысалы, Delphi - дің диалог терезелері операциялық жүйеде қолданылатын тілдегі ақпараттан тұрады.

Dialogs – Құрауыштар Палитрасындағы стандартты диалогтардың парағы.

Open Dialog – ашылатын файлдың атын таңдауға тағайындалған диалог терезелері.

Иерархиясы:TObject – TPersistent – TComponent – TCommonDialog.

51

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 52-сі

Ашылатын файлдың атын таңдауға арналған диалог терезелері TOpenDialog класының данасы болып табылады. Ол компьютердің файлдық жүйесін көруге және керекті файлдың атын таңдауға тағайындалған (3.5.1 суретін қараңыздар).

Байқағандарыңыздай Open Dialog құрауышы файлды автоматы түрде ашуға тағайындалмаған. Ол тек қолданушының таңдаған файлының атын ғана алуға мүмкіндік береді. Файлды тікелей ашу Object Pascal тілінің стандартты процедураларының көмегімен немесе арнайы әдістермен жүзеге асырылады. Мұндай әдістер мысалы TStrings класында анықталған.

TOpenDialog класының негізгі қасиеттерін қарастырайық. property DefaultExt: String – егер файлдың кеңейткіші көрсетілмесе

оның атына қосылып жазылатын кеңейткіштен тұрады. Бөлетін нүктені қоспағанда үш символдан тұруы мүмкін.

property FileName: TFileName;typeTFileName = String;

Ол таңдап алынған файлдың атынан тұрады. Ол ат диалог терезесінің Имя файла: (File Name:) жолына орналастырылады.

property Files: TStrings – ерекшеленген файлдардың аттарының тізімінен тұрады. Қасиет тек оқуға ғана тағайындалған.

property Filter: String – бір немесе бірнеше файлдық сүзгілердің сипаттамасынан тұрады. Файлдық сүзгі – арнайы символдардан тұратын файлдың атының (файлдың қалқасы) бір немесе бірнеше шаблоны. Мысалы, *.pas қалқасы қолданушыға диалог терезесінде тек қана .pas кеңейткіші бар файлдарды ғана бейнелеуге көмектеседі. Filter қасиетінде көлбеу сызықтармен бөлінген бірнеше символдар тізбегінің жұбы болуы мүмкін. Әрбір осындай жұп бір файлдық сүзгіге сай келеді және өз кезегінде көлбеу сызықпен бөлінген екі бөліктен тұрады. Бірінші бөлік берілген сүзгі үшін диалог терезесінің Тип файлов: (Files of type:) аралас жолында шығатын мәтінді береді, ал екінші бөлім сүзгінің өзінен тұрады. Сүзгі үтір мен нүкте арқылы аударылған файл қалқасын береді. Мысалы, оператордың орындалуының нәтижесінде

OpenDialog1.Filter := Delphi модульдерінің файлдары(*.pas)|*.pas|' +

'Мәтіндік құжаттар (*.txt, *.doc)|*.txt;*.doc';

52

Сурет 3.5.1 Файлды ашудың диалог терезесі

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 53-сі

диалог терезесінің Тип файлов: аралас жолы екі жолдан тұратын болады:Delphi модульдерінің файлдары (*.pas)

жәнеМәтіндік құжаттар (*.txt, *.doc)Бірінші жолға *.pas файлдық сүзгі, ал екінші жолға *.txt; *.doc файлдық

сүзгі сай келеді. Сәйкес бірінші сүзгіні таңдағанда файлды ашу диалог терезесінде .pas кеңейткіші бар файлдар ғана бейнеленеді, ал екінші сүзгіні таңдағанда - .txt немесе .doc кеңейткіші бар файлдар бейнеленеді.

Пішінді конструктірлеу кезеңінде Объект Инспектірінен осы қасиетті таңдағанда көмекші терезе ашылады, оның көмегімен көлденең бөлгіш сызықтарды жазбай – ақ сүзгінің мәтінін және сүзгінің өзін беруге болады. property FilterIndex: Integer – диалог терезесі ашылғанда үнсіздікпен сүзгінің қандай элементі көрсетілетінін анықталады. Элементтерді нөмірлеу бір санынан басталады. Әдетте сүзгінің бірінші элементі қолданылады.

property InitialDir: String – құрамы диалог терезесі ашылғанда пайда болатын қапшықты анықтайды. Егер осы қасиеттің мәні тағайындалмаса, онда ағымды қапшық немесе қолданушының диалог терезесіне соңғы рет қатынағанда ашылған қапшық ашылады.

property Title: String – диалог терезесінің тақырыбын береді.property Options: TOpenOptions;

typeTOpenOption = (ofReadOnly, ofOverwritePrompt, ofHideReadOnly,

ofNoChangeDir, ofShowHelp, ofNoValidate, ofAllowMultiSelect, ofExtensionDifferent, ofPathMustExist, ofFileMustExist, ofCreatePrompt, ofShareAware, ofNoReadOnlyReturn, ofNoTestFileCreate, ofNoNetworkButton, ofNoLongNames, ofOldStyleDialog, ofNoDereferenceLinks);

TOpenOptions = set of TOpenOption;Ол диалог терезесінің сипаттамасын орнатады және мән ретінде келесі

шамалардың кез – келгенін ала алады: ofReadOnly – Только для чтения файлының ашылуының

қосқышын береді (орнатады),ofOverwritePrompt – файлды сақтағанда хабарлама шығады, егер мұндай

файл бар болатын болса, онда файлды ауыстыруға растауды сұрайды,

ofHideReadOnly – Только для чтения файлының ашылуының қосқышын тығып қояды (үнсіздікпен беріледі),

ofFileMustExist – бұл мән берілгенде тек бар файлдарды ғана беруге болады, қарсы жағдайда файл жоқ деген хабарлама шығады,

53

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 54-сі

ofNoReadOnlyReturn – бұл параметр берілгенде Только для чтения файлын таңдағанда файлды ашуға болмайды деген хабарлама шығады,

ofAllowMultiSelect – бірден көп файлдарды ерекшелеуге мүмкіндік береді.

Файлды ашу диалог терезесін қолданғанда ерекше орынды TOpenDialog класында анықталған Execute әдісі алады.

function Execute: Boolean; override; Диалог терезесін экранға модальды режимде орналастырады. Модальды

режим дегеніміз - қосымшаның орындалуы қолданушы модальды терезені жаппағанша тоқтамайды. Функция True мәнін қайтарады, егер терезе Открыть батырмасы арқылы жабылса, және False, егер Отмена батырмасы арқылы жабылса.

TOpenDialog класында OnFolderChange, OnSelectionChange және OnTypeChange оқиғалары анықталған:

property OnFolderChange: TNotifyEvent; Диалог терезесінің көмегімен қандай да бір қапшық ашылғанда немесе

жабылғанда өрбиді. property OnSelectionChange: TNotifyEvent; Ерекшеленген файл өзгергенде өрбиді. property OnTypeChange: TNotifyEvent; Берілген сүзгі бойынша анықталған, диалог терезесінде бейнеленетін

файлдардың типі өзгергенде өрбиді. Мысал 3.5.1 Button1 құрауышының OnClick оқиға өңдеуіші ашылатын

файлдың атын таңдауға арналған диалог терезесін ашады және таңдап алынған файлдың бірінші жолын Edit1 құрауышына орналастырады.

procedure TForm1.Button1Click(Sender: TObject);var F: TextFile; S: String;begin

IF OpenDialog1.Execute THEN {Экранға файлды ашу диалог терезесін шығару}

BEGIN {Егер терезе Открыть батырмасы арқылы жабылған болса, онда ...}

{Диалог терезесінің файл атында таңдап алынған атты файлдық айнымалымен байланыстыру}

AssignFile(F,OpenDialog1.FileName);

Reset(F); {Файлды ашу}

54

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 55-сі

Readln(F,S); {Файлдан бірінші жолды S жолдық айнымалысына есептеу }

Edit1.Text:=S; { Edit1құрауышындағы S жолын шығару}

CloseFile(F); {Файлды жабу}

END;end;

Мысал 3.5.2 Button2 құрауышы үшін OnClick оқиға өңдеуіші ашылатын файлдың атын таңдауға арналған диалог терезесін ашады және файлдың мәтінін Memo1 құрауышына орналастырады.

procedure TForm1.Button2Click(Sender: TObject);var fFileName: TfileName;begin WITH OpenDialog1 DO BEGIN Filter := 'All files|*.*'+'Text files|*.txt,*.doc';

FilterIndex := 2;

IF Execute THEN BEGIN

{Таңдап алынған файлды Memo1 құрауышында ашады} Memo1.Lines.LoadFromFile(FileName);

{ fFileName айнымалысына таңдап алынған файлдың толық атын жазу} fFileName := OpenDialog1.FileName;

{Файлдың толық атын пішіннің тақырыбына шығару} Form1.Caption := fFileName;

{Label1 құрауышына толық атынан бөліп алып, дискі және каталогтың атынсыз файлдың атын шығару}

Label1.Caption := ExtractFileName(fFileName);

END; END;end;

Save Dialog – сақталатын файлдың атын таңдау диалог терезесі. Иерархиясы:TObject – TPersistent –

TComponent – TCommonDialog – TOpenDialog.

55Сурет 3.5.2 Файлды сақтау диалог

терезесі

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 56-сі

Save Dialog диалог терезесі Open Dialog терезесіне өте ұқсас, бірақ одан айырмашылығы ол файлды сақтауда қолданылады (сурет 3.5.2 көріңіздер).

Сақталатын файлдың атын таңдау диалог терезесі TOpenDialog класынан туындаған және оның барлық сипаттамаларына ие болатын TSaveDialog класының данасы болып табылады.

TSaveDialog класында TOpenDialog класының аналогиялық функциясы атқаратын іс - әрекетті орындайтын өзінің Execute функциясы анықталған.

Өздерінің құрылымдары және сыртқы бейнесі бойынша Save Dialog және Open Dialog диалог терезелерінің айырмашылықтары аз ғана. Мысал 3.5.3 Button2 құрауышы үшін OnClick оқиға өңдеуіші сақталатын

файлдың атын таңдауға арналған диалог терезесін ашады және Memo1 құрауышындағы мәтінді осы файлға сақтайды.

procedure TForm1.Button2Click(Sender: TObject);begin IF SaveDialog1.Execute THEN BEGIN Form1.Caption := SaveDialog1.FileName;

Memo1.Lines.SaveToFile(SaveDialog1.FileName);

END;end;

Font Dialog – қаріпті таңдау диалог терезесі . Иерархиясы:TObject – TPersistent – TComponent – TCommonDialog. Қаріпті таңдау Font Dialog

диалог терезесі қолданушыға қаріпті таңдауға және оның сипаттамаларын орнатуға мүмкіндік береді (сурет 3.5.3 қараңыздар).

Font Dialog құрауышы тікелей TCommonDialog класынан туындаған TFontDialog класының данасы болып табылады.

TFontDialog класының негізгі қасиеттерін қарастырайық. property Device: TFontDialogDevice;type

TFontDialogDevice = (fdScreen, fdPrinter, fdBoth);

56

Сурет 3.5.3 Қаріпті таңдау диалог терезесі

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 57-сі

Ол қандай құрылғы үшін қаріп тағайындалатынын анықтайды. Келесі мәндерді қабылдауы мүмкін:

fdScreen – экран үшін қаріп, fdPrinter – принтер үшін қаріп,fdBoth – экран және принтер үшін қаріп. Үнсіздікпен қаріп экран үшін беріледі.property Font: TFont – қаріптің сипаттамаларын береді. Мәтінді

бейнелеу үшін Windows операциялық жүйесінде тіркелген көптікке тиісті қаріп қолданылады.

property Options: TFontDialogOptions –TFontDialogOptions типті қасиет:type TFontDialogOption = (fdAnsiOnly, fdTrueTypeOnly, fdEffects, fdFixedPitchOnly, fdForceFontExist, fdNoFaceSel, fdNoOEMFonts, fdNoSimulations, fdNoSizeSel, fdNoStyleSel, fdNoVectorFonts, fdShowHelp, fdWysiwyg, fdLimitSize, fdScalableOnly, fdApplyButton); TFontDialogOptions = set of TFontDialogOption;

Ол диалог терезесінің сипаттамаларын береді және мәні ретінде келесі шамалардың көптігін қабылдай алады:

fdAnsiOnly – бұл параметр тағайындалғанда символдары Windows операциялық жүйесінің көптік символдарына кіретін қаріпті ғана таңдауға болады,

fdEffects – бұл параметр тағайындалғанда диалог терезесі қаріптің астын сызуды және қайта сызуды анықтайтын Effects терезесінен және қаріптің түсін анықтайтын Color терезесінен тұрады,

fdForceFontExist – бұл параметр тағайындалғанда және жоқ қаріптің атын енгізгенде дұрыс енгізілмеген туралы хабарлама шығады,

fdLimitSize – бұл параметр тағайындалғанда қаріптің максимальды және минимальды өлшемін беруге болады,

fdApplyButton – бұл параметр тағайындалғанда Применить (Apply) батырмасы пайда болады.

property MaxFontSize: Integer – қаріптің максимальды (ең үлкен) өлшемін береді. Егер мәні нольге тең болса, онда максимальды өлшем берілмеген.

property MinFontSize: Integer – қаріптің минимальды (ең кіші) өлшемін береді. Егер мәні нольге тең болса, онда минимальды өлшем берілмеген.

57

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 58-сі

Open Dialog және Save Dialog құрауыштарындағы сияқты қаріпті таңдау диалог терезесі Execute әдісінің көмегімен активтеледі.

TFontDialog класында бір оқиға – OnApply анықталған .property OnApply: TFDApplyEvent;

typeTFDApplyEvent = procedure (Sender: TObject; Wnd: HWND) of object;

где Wnd – терезенің сандық идентификаторы.Оқиға терезенің Применить (Apply) батырмасына басқанда өрбиді. Бұл

батырма OnApply оқиғасының өңдеуіші бар болғанда немесе Options қасиетінде fdApplyButton параметрі берілгенде пайда болады. Мысал 3.5.4 Button1 құрауышы үшін OnClick оқиғасының өңдеуіші қаріпті

таңдау диалог терезесін активтейді және таңдап алынған сипаттамаларды Label1 құрауышының қаріпіне береді.

procedure TForm1.Button1Click(Sender: TObject);var F: TextFile; S: String;begin WITH FontDialog1 DO BEGIN

{Options қасиетіне fdLimitSize параметрін береді} Options := Options + [fdLimitSize];

MaxFontSize := 14; {Қаріптің максимальды өлшемін береді = 14 пункт}

MinFontSize := 8; {Қаріптің минимальды өлшемін береді = 8 пункт}

IF Execute THEN {Қаріпті таңдау диалог терезесін активтейді}

Label1.Font:=Font; {Егер терезе ОК батырмасымен жабылса, онда таңдап алынған сипаттамалар , Label1құрауышының қаріпіне беріледі}

END;end;

Мысал 3.5.5 Бұл мысал пішінде орналастырылған келесі басқару элементтерін қолданады: Edit, Main Menu, Rich Edit. Қолданушы Шрифт менюінің пунктіне шерткенде, қаріпті таңдау диалогы активтелінеді. Қолданушы диалог терезесінің Применить (Apply) батырмасына шерткенде сол сәтте таңдап алынған қаріптің сипаттамалары активті басқару элементіне қолданылады.

procedure TForm1.Menu_FontClick(Sender: TObject);begin

{Options қасиетіне fdApplyButton параметрін қосады} FontDialog1.Options := FontDialog1.Options + [fdApplyButton];

58

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 59-сі

FontDialog1.Execute; {Қаріпті таңдау диалог терезесін активтейді}end;procedure TForm1.FontDialog1Apply(Sender: TObject; Wnd: HWND);begin

IF ActiveControl IS TEdit THEN {Егер активті басқару элементі TEdit типті объект ( немесе оның ұрпақтарының бірі) болса, онда ...}

WITH ActiveControl AS TEdit DO

Font.Assign(TFontDialog(Sender).Font) {Активті басқару элементінің Font қасиетіне қаріпті таңдау диалог терезесінде таңдалған сипаттамаларды бекіту}

ELSE IF ActiveControl IS TRichEdit THEN {Егер активті басқару элементі TRichEdit типті объект (немесе оның ұрпақтарының бірі) болса, онда ...}

WITH ActiveControl AS TRichEdit DO

SelAttributes.Assign(TFontDialog(Sender).Font) {Активті басқару элементінің ерекшеленген мәтініне қаріпті таңдау диалог терезесінде таңдалған сипаттамаларды бекіту}

ELSE Beep;

end;

Color Dialog – түсті таңдау диалог терезесі . Иерархиясы:TObject – TPersistent – TComponent – TCommonDialog.Түсті таңдау диалог терезесі TColorDialog класының данасы болып

табылады. Ол Windows операциялық жүйесінде берілген стандартты түсті таңдап алуға және меншік түсті беруге мүмкіндік жасайды (сурет 3.5.4 қараңыздар).

TColorDialog класының негізгі қасиеттерін қарастырайық:property Color: TColor – түстің таңдап алынған мәндерінен тұрады. property CustomColors: TStrings –

Қолданушымен анықталған 16 түстен тұрады. Әрбір жол мынандай пішімнен тұрады: Со1оrХ=NNNNNN, мұндағы Х – А – дан Р – ға дейінгі әріптер, олар түстің нөмірін анықтайды, NNNNNN – RGB пішіміндегі түстің он алтылық көрсетілімі.

59

Сурет 3.5.4 Түсті таңдау диалог терезесі

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 60-сі

property Options: TColorDialogOptions – диалог терезесінің сипаттамаларын береді. Мысал 3.5.6 Button1 құрауышы үшін OnClick оқиға өңдеуіші түсті таңдау

үшін диалог терезесін ашады және ол түсті пішіннің көрінісінің түсіне береді.

procedure TForm1.Button1Click(Sender: TObject);begin IF ColorDialog1.Execute THEN Form1.Color := ColorDialog1.Color;

end;

Print Dialog – баспа режімін таңдау диалог терезесі. Иерархиясы:TObject – TPersistent – TComponent – TCommonDialog.Баспа режімін таңдау диалог терезесі TPrintDialog класының данасы

болып табылады. Сол және басқа құжаттарды баспаға шығарғанда қолданылатын параметрлер қатарын беруге мүмкіндік жасайды.

Printer Setup Dialog – принтердің параметрлерін таңдау диалог терезесі.

Иерархиясы:TObject – TPersistent – TComponent – TCommonDialog.Принтердің параметрлерін таңдау диалог терезесі TPrinterSetupDialog

класының данасы болып табылады. Құжаттарды баспаға шығару үшін қолданылатын принтердің параметрлер қатарын беруге мүмкіндік жасайды. Бұл параметрлер Windows операциялық жүйесінде анықталған және диалог терезесінде бейнеленген.

Құрауыш принтердің типіне байланысты принтердің параметрлерін баптау терезесін құрады. Бұл диалог принтердің драйверімен қарым – қатынаста болады және бағдарламаға ешқандай ақпаратты қайтармайды, сондықтан оның Execute әдісі функция емес, процедура болады.

Find Dialog – мәтіннің үзіндісін іздеу диалог терезесі. Иерархиясы:TObject – TPersistent – TComponent – TCommonDialog.Мәтіннің үзіндісін іздеу диалог

терезесі TFindDialog класының данасы болып табылады. Ол мәтіннен сол және басқа үзіндіні анықтауға мүмкіндік береді (сурет 3.5.5 қараңыздар).

60

Сурет 3.5.5 Мәтіннің үзіндісін іздеу диалог терезесі

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 61-сі

Класс келесі негізгі қасиеттерден тұрады.property FindText: String – ізделінетін мәтіннің үзіндісінен тұрады. property Position: TPoint – диалог терезесінің экрандағы сол жақ

жоғарғы бұрышын анықтайды. property Options: TFindOptions – TFindOptions типті қасиет:

type TFindOption = (frDown, frFindNext, frHideMatchCase, frHideWholeWord, frHideUpDown, frMatchCase, frDisableMatchCase, frDisableUpDown, frDisableWholeWord, frReplace, frReplaceAll, frWholeWord, frShowHelp); TFindOptions = set of TFindOption;

Ол диалог терезесінің сипаттамаларын береді және мән ретінде келесі шамалардың кез – келген көптігін қабылдай алады (солардың кейбіреулері):

frHideMatchCase – егер осы параметр берілсе, жолдық және бас әріптердің айырмашылығын есепке алу қосқышы шығарылмайды,

frHideUpDown – егер осы параметр берілсе, іздеу бағытын таңдау ауыстырып қосқышы шығарылмайды,

frWholeWord – егер осы параметр берілсе, бүтін сөздердің ғана ізделінуі іске асырылады.

TFindDialog класында бір OnFind оқиғасы анықталған.property OnFind: TNotifyEvent; Оқиға іздеу үшін мәтіннің үзіндісін таңдағаннан кейін диалог

терезесінің Найти далее (Find Next) батырмасын басқанда өрбиді.Мысал 3.5.7. Бұл мысал пішінде орналастырылған: Rich Edit, Button және Find

Dialog басқару элементтерін қолданады. Батырмаға шерткенде мәтіннің үзіндісін іздеу диалогы активтелінеді (іздеу бағыты – іздеу алға қарай). Образец (Find what)жолы толтырылғанда және Найти далее (Find Next) батырмасы басылғанда алдыңғы таңдаудың артынан ілесетін Rich Edit құрауышының үлгіге сәйкес келетін жолы ерекшеленгенеді.

procedure TForm1.Button1Click(Sender: TObject);begin FindDialog1.Position := Point(RichEdit1.Left + RichEdit1.Width, RichEdit1.Top);

FindDialog1.Execute; {Мәтіннің үзіндісін іздеу диалог терезесін активтейді}end;

procedure TForm1.FindDialog1Find(Sender: TObject);

61

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 62-сі

var FoundAt: LongInt;

StartPos, ToEnd: Integer;begin WITH RichEdit1 DO BEGIN

IF SelLength <> 0 THEN {Мәтіннің ерекшеленген бөлігінің ұзындығы нольге тең болмаса, онда…}

{Іздеу ағымды таңдаудан кейін басталады, егр ол бар болса} StartPos := SelStart + SelLength;

{SelStart –мәтіннің ерекшеленген бөлігінің мәтіннің басынан бастағанда бірінші символын анықтайды (символдарды нөмірлеу 0 – ден басталады 0). Егер мәтін ерешеленбеген болса, онда алдында мәтіндік нұсқағыш орналасқан символға нұсқалынады}

ELSE

StartPos := 0; {Басқаша, іздеу мәтіннің басынан басталады}

{ToEnd – Rich Edit құрауышындағы мәтіннің StartPos - тан мәтіннің аяғына дейінгі символдық ұзындығы}

ToEnd := Length(Text) - StartPos;

FoundAt := FindText(FindDialog1.FindText, StartPos, ToEnd, [stMatchCase]);

{FindText –мәтіннен диалог терезесінде берілген жолды іздейді және сәтті іздеуде оның бірінші символының индексін қайтарады. StartPos – іздеудің басы; ToEnd – жолдың ұзындығы, [stMatchCase] – іздеу кезінде жолдық және бас әріптердің айырмашылықтары ескерілетінін айтады}

IF FoundAt <> -1 THEN BEGIN SetFocus;

SelStart := FoundAt;

SelLength := Length(FindDialog1.FindText);

END; END;end;

Replace Dialog – мәтіннің үзіндісін іздеу және айырбастау диалог терезесі.

Иерархиясы:TObject – TPersistent – TComponent – TCommonDialog – TFindDialog.

62

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 63-сі

Мәтіннің үзіндісін іздеу және айырбастау диалог терезесі тікелей TFindDialog класынан туындайтын және оның барлық сипаттамаларына ие болатын TReplaceDialog класының данасы болып табылады. Ол мәтіннен сол және басқа үзіндіні табуға және қажет жағдайда оны басқа үзіндіге ауыстыруға мүмкіндік береді (сурет 3.5.6 қараңыздар).

Бұл класта қосымша ReplaceText қасиеті анықталған. property ReplaceText: String – мүмкін табылған үзіндіге айырбас

жасалатын мәтін анықталады. Бұл класта тағы OnReplace оқиғасы анықталған.property OnReplace: TNotifyEvent; Оқиға диалог терезесінің Заменить (Replace) немесе Заменить все

(Replace All) батырмалары басылғанда өрбиді.Мысал 3.5.8 ReplaceDialog1 құрауышы үшін келесі OnReplace оқиға өңдеуіші

TMemo класының Memo1 құрауышынан FindText - ті іздейді және оны ReplaceText – ке айырбастайды. Ол TMemo класының SelStart, SelLength және SelText қасиеттерін қолданады.

procedure TForm1.ReplaceDialog1Replace(Sender: TObject);var SelPos: Integer;

begin WITH TReplaceDialog(Sender) DO BEGIN

{ Memo1 – дегі FindText регистірін есепке алғандағы ауқымды іздеу}SelPos := Pos(FindText, Memo1.Lines.Text);

{Pos функциясы Memo1құрауышының мәтінінің шегіне дейін FindText – ті іздейді және осы мәтіннің шегіндегі FindText - тің бірінші символын бүтін санды мәнді қайтарады. Егер FindText табылмаса, онда Pos нөлді қайтарады}

IF SelPos > 0 THEN BEGIN Memo1.SelStart := SelPos - 1;

Memo1.SelLength := Length(FindText);

63

Сурет 3.5.6 Мәтіннің үзіндісін іздеу және айырбастау диалог терезесі

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 64-сі

Memo1.SelText := ReplaceText; {Таңдап алынған мәтінді ReplaceText – ке ауыстыру}

END ELSE MessageDlg(Concat('Could not find "', FindText, '" in Memo1.'),

mtError, [mbOk], 0);

END;end;

Open Picture Dialog – графикалық файлды ашу диалог терезесі. Иерархиясы:TObject – TPersistent – TComponent – TCommonDialog – TOpenDialog.Графикалық файлды ашу диалог терезесі TOpenDialog класынан

туындаған және оның барлық сипаттамаларына ие болатын TOpenPictureDialog класының данасы болып табылады.

Ол графикалық кескіні бар файлды таңдауға тағайындалған. Диалог терезесіне қарау терезесі қосылған, онда сол сәтте ерекшеленген графикалық файл бейнеленеді.

property Filter: String – Windows стандартты графикалық файлдары үшін сүзгілер жиынынан тұрады. Мысал 3.5.9 Button1 құрауышы үшін OnClick оқиға өңдеуіші ашылатын

графикалық файлдың атын таңдауға арналған диалог терезесін ашады және оны Image1 құрауышына орналастырады.

procedure TForm1.Button1Click(Sender: TObject);begin IF OpenPictureDialog1.Execute THEN Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);

end;

Save Picture Dialog – графикалық файлды сақтау диалог терезесі. Иерархиясы:TObject – TPersistent – TComponent – TCommonDialog – TOpenDialog –

TOpenPictureDialog. Графикалық файлды сақтау диалог терезесі тікелей TSavePictureDialog

класының туындамасы және оның барлық сипаттамаларына ие болатын TSavePictureDialog класының данасы болып табылады.

Ол графикалық кескінді файлға сақтауға арналған.

64

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 65-сі

Мысал 3.5.10 Button2 батырмасына шерткенде сақталатын графикалық файлдың атын таңдауға арналған диалог терезесі ашылады және Image1 құрауышындағы кескін осы файлға жазылады.

procedure TForm1.Button2Click(Sender: TObject);begin IF SavePictureDialog1.Execute THEN Image1.Picture.SaveToFile(SavePictureDialog1.FileName);

end;

3.6 Delphi - дің кескінді құруға тағайындалған кластары мен құрауыштары. Timer – таймер құрауышы

Delphi – де кескінді құру құралдарын анықтайтын бірнеше кластар анықталған. Олардың қатарына қаріп (TFont класы), қарындаш (TPen класы), қыл қалам (TBrush класы) және канва (TCanvas класы) жатады. Бұл кластар кез – келген суретті бейнелеуге, сонымен қатар мәтінді де бейнелеуге қажетті құралдарды береді. Олардың барлығы қандай да бір басқа құрауыштың құрамында қолданылады.

TFont, TPen және TBrush кластарының жалпы ата – тек – TGraphicsObject (Графикалық объект) класы бар, ол өз кезегінде TPersistent класының ұрпақ класы болып келеді, TCanvas класы тікелей TPersistent класының ұрпақ класы болып табылады.

TGraphicsObject класының графикалық объектілері.TGraphicsObject – абстрактілі класс, ол кескінді де мәтінді

де бейнелейтін құралдың ең алғашқысы болып табылады. Ол өзінің ұрпақ кластарында қолданылатын OnChange оқиғасын анықтайды.

property OnChange: TNotifyEvent;typeTNotifyEvent = procedure (Sender: TObject) of object;

Сәйкес келетін сурет салу құралы бар графикалық құрауыштың сипаттамалары өзгергенде өрбитін оқиға. Бұл оқиға графикалық құрауыштың кескінін өзіне жаңадан енгізілген қасиеттерге байланысты қайта салуға дабыл береді. TGraphicsObject класының ұрпақ класы болып табылатын келесі құрауыштарда – қаріп, қарындаш және қыл қаламда бұл қасиеттер бар. Нақты сурет салу құралдары әртүрлі

65

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 66-сі

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

Delрhi – де арнайы графикалық бейнелерді салуға тағайындалған құрауыштар бар:

Image - дайын графикалық файлдарды бейнелеу үшін қолданылатын ыңғайлы құралды көрсетеді.

Shape - пішінде қарапайым геометриялық фигураларды – квадрат, дөңгелек, эллипс және т.б. салу үшін қолданылады.

PaintBox - бағдарламаның орындалуы барысында өзінің канвасы Canvas – та қарапайым суреттерді құруға мүмкіндік береді.

Сонымен қатар біз осы тарауда нақты уақыт интервалын есептеуге тағайындалған Timer құрауышын қарастырамыз. Ол графикалық кескіндерді құруға тағайындалмаған және көмекші құрауыш болып табылады. Бізде ол графикалық құрауыштардан тұратын қосымшаны құрған кезде қолданылады.

TFont класы.Класс TFont – графикалық құрауыштың мәтіні

бейнеленетін қаріптің сипаттамасын береді. Осы кластық типті иемденетін қасиеттер қандай да бір мәтіннен тұратын кез – келген құрауышта болады. TFont класындағы қаріптің сипаттамалары келесі қасиеттердің көмегімен беріледі:

property Charset: TFontCharset nodefault – қаріп символдарының тобын анықтайды. Ол TfontCharset типтен тұрады:typeTFontCharset = 0..255;

Кейбір тұрақтылар Charset қасиетінің мәндері ретінде қолданылуы мүмкін:

ANSI-коды үшін (кәдімгі қолданылатын) қасиеттің мәні нөлге тең (ANSI_CHARSET тұрақтысы).

Орыс тіліндегі бағдарламалар үшін қасиеттің мәні 1-ге тең (DEFAULT_CHARSET константасы – үнсізідкпен беріледі. Қаріп тек аты Name және өлшемі Size арқылы беріледі. Егер сипатталып отырған қаріпке жүйеде қатынас жоқ болса, онда Windows оны басқа қаріппен

66

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 67-сі

ауыстырады) және 204 (RUSSIAN_CHARSET константасы –кириллица символдары).

255 мәні (OEM_CHARSET тұрақтысы – символдар тобы операциялық жүйенің кодтық кестесі арқылы анықталады) MS-DOS - тың мәтінін бейнелеуге қолданылады.

property Color: TColor – символдар түсін аықтайды.property Height: Integer – қаріптің биіктігін пиксельмен

анықтайды. property Name: TFontName; – қаріптің атын береді.

Қасиеттің типі – 32 символға дейінгі жол.typeTFontName = type string;

property Size: Integer – қаріптің биіктігін пункт бойынша береді.

(1 пункт = 1/72 дюйм).property Style: TFontStyles –TFontStyles типті қасиет.

typeTFontStyle = (fsBold, fsItalic,fsUnderline, fsStrikeOut);

TFontStyles = set of TFontStyle;

Ол қаріптің типін береді және мән ретінде келесі көптіктің шамаларын қабылдайды:

fsBold – жартылай қою, fsItalic – курсив,fsUnderline – асты сызылған,fsStriceOut – ортасы сызылған.

Мысал 3.6.1 Көптікті қолдану. OnClick оқиғасының өңдеуіші Button1 құрауышы үшін Memo1 құрауышындағы қаріпті – жартылай қою курсивті қылып орнатады.

procedure TForm1.Button1Click(Sender: TObject);var Styles: TFontStyles;begin

Styles := [];Styles := Styles + [fsBold, fsItalic];Memo1.Font.Style := Styles;

end;немесе

procedure TForm1.Button1Click(Sender: TObject);begin

Memo1.Font.Style := [];

67

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 68-сі

Memo1.Font.Style := Memo1.Font.Style+[fsBold, fsItalic]end;

Delphi – дегі мәтіндер тек көлденеңінен жазылады . TPen класы . TPen класы – қарындаштың сипаттамаларын береді, оның

көмегімен әртүрлі сызықты немесе жиектемелі бейнелер салынады.

Осы кластың негізгі қасиеттеріне келесілерді жатқызуға болады:

property Color: TColor – қарындаш арқылы салынатын сызықтың түсін анықтайды. Үнсіздікпен түсі қара.

property Mode: TPenMode –TpenMode типті қасиет:type

TPenMode = (pmBlack, pmWhite, pmNop, pmNot, pmCopy, pmNotCopy, pmMergePenNot, pmMaskPenNot, pmMergeNotPen, pmMaskNotPen, pmMerge, pmNotMerge, pmMask, pmNotMask, pmXor, pmNotXor);

Ол қарындаш арқылы салынатын сызықтың стильін анықтайды. Келесі мәндерді қабылдай алады:

pmBlack - әрқашан қара сызық бейнеленеді;pmWhite - әрқашан ақ сызық бейнеленеді;pmNop - түссіз сызық;pmNot - экранның түсіне терістік болып табылатын

түс;pmCopy - Color қасиетінің мәні арқылы анықталады;pmNotCopy - Color қасиетінде берілетін түске терістік

болып табылатын түс; және т.б.Үнсіздік бойынша сызықтың түсі Color қасиеті арқылы

анықталады.property Style: TPenStyle – TPenStyle типті қасиет:

typeTPenStyle = (psSolid, psDash, psDot, psDashDot, psDashDotDot,

psClear, psInsideFrame); Ол қарындаш арқылы салынатын сызықтың түсін

анықтайды. Келесі мәндерді қабылдауы мүмкін:psSolid - тегіс сызық (мәні үнсіздік бойынша);psDashe - үзік сызықты сызық;

68

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 69-сі

psDot - пунктирная линия;psDashDot - үзік сызықты пунктирлі сызық;psDashDotDot - екі пунктирлі үзік пунктирлі сызық;psClear - невидимая линия;psInsideFrame - тұйық жақтаудың ішіндегі сызық.property Width: Integer – салынатын сызықтың

қалыңдығын анықтайды. Үнсіздік бойынша қалыңдығы 1 пиксельге тең деп алынады.

TBrush класы.TBrush класы – тұйық аймақты бояуға арналған қыл

қаламның сипаттамасының анықтамасынан тұрады. Қыл қаламның негізгі қасиеттерін қарастырайық.

property Bitmap: TBitmap – Bitmap қасиеті 8х8 пиксельді өлшемнен тұратын, кескінді биттік бейнелейтін TBitmap типті объектіге нұсқайды. Егер Bitmap бос болмаса, онда толтыру шаблоны Style қасиетінде емес, оның өзімен анықталады. Қарсы жағдайда қасиет nil мәнінен тұруы керек.Мысал 3.6.2 Келесі бағдарламалық код нүктелік суретті

файлдан іске қосады және оның қыл қаламына Form1 құрауышының Canvas қасиетін орнатады.

var Bitmap: TBitmap;begin Bitmap := TBitmap.Create; try Bitmap.LoadFromFile('MyBitmap.png'); Form1.Canvas.Brush.Bitmap := Bitmap; Form1.Canvas.FillRect(Rect(0,0,100,100)); finally Form1.Canvas.Brush.Bitmap := nil; Bitmap.Free; end;end;

property Color: TColor – қыл қаламның түсін анықтайды. Үнсіздікпен берілетін түс ақ түс болып табылады.

property Style: TBrushStyle –TBrushStyle типті қасиет:typeTBrushStyle = (bsSolid, bsClear, bsHorizontal, bsVertical,

bsFDiagonal, bsBDiagonal, bsCross, bsDiagCross); Ол қыл қаламның орнаментін анықтайды. Келесі

мәндерді қабылдауы мүмкін:

69

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 70-сі

bsSolid - тегіс бояу;bsClear - бояудың жоқтығы;bsHorizontal - горизонталь сызықтар;bsVertical - вертикаль сызықтар;bsFDiagonal - сол жақ диагональды сызықтар;bsBDiagonal - оң жақ диагональды сызықтар;bsCross - шақпақ;bsDiagCross - қисық шақпақ.TCanvas класы.TCanvas класы – Canvas объектісін анықтайды, ол сурет

салуға қолданылатын құрауыштың бетін көрсетеді және олардың көмегімен сурет салуға болатын құрал – саймандарды береді: қаріп (TFont класы), қарындаш (TPen класы) және қыл қалам (TBrush класы). TCanvas кластық типтің объектілері құрауыш болып табылмайды және әртүрлі басқару элементтерінің қасиеттері ретінде қолданылады, мысалы пішін. Canvas: TCanvas қасиеті бар кез – келген құрауышқа сурет салуға болады.

Канва жеке нүкте - пиксельдерден тұрады. Әрбір пиксель горизонталь және вертикаль координаталардан тұрады. Координаталар басы яғни (0,0) координатасы бар нүкте канваның сол жақ жоғарғы бұрышында орналасады. Горизонталь осьі солдан оңға қарай бағытталған, ал вертикаль жоғарыдан төмен қарай. Канваның өлшемі құрауыштың ерекшеліктері мен өлшеміне байланысты. Мысалы, Image құрауышы үшін канваның өлшемі Height және Width, ал пішін үшін ClientHeight және ClientWidth қасиеттері арқылы анықталады.

Канвада көрінбейтін меңзер бар, ол қарындаштың ағымды жағдайын анықтайды. Ереже бойынша графикалық суреттерді салу – сызық, шеңбер, тіктөртбұрыш және т.б. – осы меңзердің ағымды жағдайынан басталады. Сурет салу үрдісінде меңзердің жағдайы өзгереді. TCanvas класында меңзерді берілген жағдайына орналастыратын әдістер анықталған.

TCanvas класының негізгі қасиеттерін қарастырайық:property Brush: TBrush – канваның қыл қаламын

орнатады.

70

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 71-сі

property Font: TFont – канваның қаріпін орнатады. property Pen: TPen – канваның қарындашын орнатады. property PenPos: TPoint – графикалық меңзердің ағымды

орналасу жағдайын анықтайды. Мысал 3.6.3 Келесі бағдарламалық код Label1 құрауышына

пішінде көрінбейтін меңзер тұрған жағдайдан бастап мәтінді шығарады және жаңа мәтінді координатасы(50,50) нүктеден бастап шығарады.

beginLabel1.Caption := '('+IntToStr(Form1.Canvas.PenPos.X)+';'+

IntToStr(Form1.Canvas.PenPos.Y)+')';

Form1.Canvas.PenPos := Point(50,50);end;

property Pixels[X, Y]: TColor – канваның барлық пиксельдерінің түсін береді; X және Y –пиксельдің координаталары.Мысал 3.6.4 Пішінде координатасы (10,10) нүктеге

пиксельмен қызыл түс береді. begin

Form1.Canvas.Pixels[10,10] := clRed;end;

Мысал 3.6.5 Пішінде координатасы (15,20) нүктеге пиксельмен қарындаштың ағымды түсін береді.

beginForm1.Canvas.Pixels[15,20] := Canvas.Pen.Color;

end;

TCanvas класында барлық мүмкін геометриялық фигураларды салуға тағайындалған әртүрлі әдістер анықталған. Барлық геометриялық фигураларды шартты түрде жиектелген (яғни, ішкі аймағында бояуы жоқ) және боялған (ішкі аймағында бояуы бар) деп бөлуге болады. Жиектемелі фигураларды салғанда тек қарындаш Pen ғана қолданылады (сызықтың түсі, қалыңдығы және т.б.). Егер фигура боялған болса (мысалы, эллипс, көпбұрыш), онда оның ішкі облысы сипаттамалары орнатылған (түс, орнамент және т.б.) Brush қыл қаламымен боялады. Мәтіндер Font қаріпінде берілген сәйкес сипаттамалар арқылы (өлшем, сызбасы және т.б.) бейнеленеді. Бағдарламаның орындалуы барысында Pen, Brush және Font қасиеттерінің мәнін өзгертуге болады. Бірақ мынаны ескеру керек, өзгертулер сурет салу үрдісін қолданғанға дейін орындалуы қажет.

71

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 72-сі

Қарапайым графикалық кескіндерді салуға тағайындалған негізгі әдістерді қарастырайық:

procedure Arc(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);Сол жақ жоғарғы бұрышының координатасы (X1, Y1)

және оң жақ төменгі бұрышының координатасы (X2, Y2) тіктөртбұрыштың ішіне сызылған эллипстің доғасын сызады. Доға эллипстің центрі және (X3, Y3) нүктесі арқылы өтетін түзумен қиылысқан нүктеден басталады да, эллипстің центрі және (X4, Y4) нүктесі арқылы өтетін түзудің эллипспен қиылысу нүктесінен аяқталады.

procedure Chord(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);Эллипстің сегментін сызады, ол эллипстің доғасынан

тұрады, ол тура Arc доғасы сияқты тұрғызылған және басын аяғымен қосатын хордадан тұрады.

procedure Ellipse(X1, Y1, X2, Y2: Integer); overload;Сол жақ жоғарғы бұрышының координатасы (X1, Y1)

және оң жақ төменгі бұрышының координатасы (X2, Y2) тіктөртбұрыштың ішіне сызылған эллипсті сызады.

procedure FillRect(const Rect: TRect);Rect тіктөртбұрышын Brush қыл қаламымен бояйды.procedure FloodFill(X, Y: Integer; Color: TColor; FillStyle:

TFillStyle);type

TFillStyle = (fsSurface, fsBorder); Brush қыл қаламымен канваның бетін (X, Y) координатасы

бар нүктеден бастап бояйды. Егер FillStyle параметрі fsBorder мәнінен тұрса, онда шекараның бет жағы Color қасиетінде берілген түске боялады немесе FillStyle параметрі fsSurface мәнінен тұрса, онда шекараның бет жағының бөлігі Color қасиетінде берілген түске боялады.

procedure LineTo(X, Y: Integer);PenPos қасиетінде анықталған графикалық меңзердің

ағымды орынынан бастап координатасы (X, Y) болатын нүктеге дейін Pen қарындашы арқылы сызық сызады.

procedure MoveTo(X, Y: Integer);Графикалық меңзерді (X, Y) координатасы бар нүктеге

дейін жылжытады.

72

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 73-сі

Мысал 3.6.6 Form құрауышы үшін OnMouseDown оқиға өңдеуіші пішіннің сол жақ жоғарғы бұрышынан бастап тышқанмен шерткен нүктеге дейін қызыл түсті сызық сызады.

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin Form1.Canvas.Pen.Color:=clRed;

Form1.Canvas.MoveTo(0,0);

Form1.Canvas.LineTo(x,y);

end;procedure Pie(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Longint);Эллипстің секторын сызады. Эллипстің доғасы Arc

әдісіндегі сияқты беріледі. procedure Rectangle(X1, Y1, X2, Y2: Integer); overload;Сол жақ жоғарғы бұрышының координатасы (X1, Y1)

және оң жақ төменгі бұрышының координатасы (X2, Y2) тіктөртбұрышты сызады.

procedure RoundRect(X1, Y1, X2, Y2, X3, Y3: Integer);Сол жақ жоғарғы бұрышының координатасы (X1, Y1)

және оң жақ төменгі бұрышының координатасы (X2, Y2) тіктөртбұрыш сызады. Тіктөртбұрыштың бұрыштары X3 және Y3 осьтері бар эллипстің бөліктерімен дөңгелектенген.

procedure TextOut(X, Y: Integer; const Text: String);Канваның бетіне Text мәтінін (X, Y) координатасы

тіктөртбұрыштың сол жақ жоғарғы бұрышының (X, Y) болатындай етіп канваның бетіне шығарады. Мәтіннің параметрлері Font қаріпінің сипаттамалары арқылы беріледі, фонның түсі - Brush қыл қаламның ағымды түсімен орнатылады.

procedure Refresh;Канваның кескінін қайта салу керек болған жағдайда

шақырылады (қаріптің құрал – саймандарын орнатады, қалам және қыл қаламды стандартты қасиеттер тобымен орнатады (үнсіздік арқылы беріледі)).

function TextHeight(const Text: String): Integer;

73

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 74-сі

Font қаріпінде анықталған, Text мәтінінің биіктігін пиксельмен қайтарды.

function TextWidth(const Text: String): Integer;Font қаріпінде анықталған, Text мәтінінің ұзындығын

пиксельмен қайтарды. TCanvas класында OnChange және OnChanging оқиғалары

анықталған:property OnChange: TNotifyEvent; Канвада өзгеріс болар алдында өрбитін оқиға. Яғни

канваның түрін өзгертетін, TCanvas әдісін шақырғанда және қасиеттері өзгергенде өрбитін оқиға.

property OnChanging: TNotifyEvent; Канвада өзгеріс болғаннан кейін бірден өрбитін оқиға.

Image құрауышы. Иерархиясы:TObject – TPersistent – TComponent – TControl –

TGraphicControl Құрауыштар Палитрасының Парағы: Additional. TImage класының Image құрауышы пішінге қандай да бір

суретті орналастыру үшін қолданылады. Бейнелеу файлы биттік карта болуы мүмкін (.BMP кеңейткіші бар файлы), пиктограмма (.ICO кеңейткіші бар файл), метафайлдар (.WMF кеңейткіші бар файл).

TImage класы TGraphicControl класының тікелей ұрпақ класы болып табылады, сондықтан графикалық басқару элементтер класына жатады. Туындаған қасиеттерімен қатар TImage класында келесі қасиеттер анықталған:

property Canvas: TCanvas – бағдарламаның орындалуы барысында бейнені қалыптастыруға тағайындалады.

property Center: Boolean – егер қасиет TRUE мәніне ие болса, онда кескін құрауыштың центрі бойынша теңестіріледі, қарсы жағдайда кескін құрауыштың сол жақ жоғарғы бұрышына орналастырылады. Үнсіздікпен FALSE мәніне тең болады.

property Picture: TPicture – құрауышта орналастырылған кескінді анықтайды.

74

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 75-сі

property Stretch: Boolean – егер қасиеттің мәні TRUE болса, онда Picture қасиетінде анықталған кескін құрауыштың өлшеміне дейін үлкейтіледі немесе кішірейтіледі. Үнсіздікпен мәні FALSE – ге тең.

Басқа графикалық басқару элементтері сияқты Image құрауышы тышқан арқылы берілген барлық оқиғаларды өңдейді. Үнсіздік белгісі бойынша оқиға жоқ немесе анықталмаған.

Жобалау барысында кескінді Image құрауышына орналастырғанда кескіннің тапсырма терезесін қолдануға болады. Бұл терезе құрауыш белсенді болғанда немесе Объекті Инспектірінің Picture қасиетін таңдағанда пайда болады. Кескіннің тапсырма терезесінің негізгі өрісі таңдап алынған суретті орналастыруға тағайындалған. Сонымен бірге терезеде келесі батырмалар анықталған:

Load - бейнені файлдан іске қосу үшін;Save - бейнені файлға жазу үшін;Clear - таңдап алынған бейнені жою үшін;OK - таңдап алынған бейнені құрауышқа жазу

үшін;Cancel - енгізілген өзгерісті қайтару үшін.

Shape құрауышы. Иерархиясы:TObject – TPersistent – TComponent – TControl – TGraphicControl Құрауыштар Палитрасының Парағы: Additional. TShape класының данасы болып құрауыш – фигуралар – дөңгелек,

эллипс, тіктөртбұрыш және т.б. табылады. Бұл фигуралар сіздің қосымшаңызға үлгі беру үшін қолданылуы мүмкін.

TShape класы тікелей TGraphicControl класының ұрпақ класы болып табылады және TImage класы сияқты графикалық басқару элементтерінің қатарына кіреді. Туындалған қасиеттермен қатар TShape класында келесі қасиеттер анықталған:

property Brush: TBrush – фигураның бетін бояуға тағайындалған қыл қаламды анықтайды.

property Pen: TPen – фигураның жиектерін салуға тағайындалған қарындашты анықтайды.

75

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 76-сі

property Shape: TShapeType – TShapeType типті қасиет:type

TShapeType = (stRectangle, stSquare, stRoundRect, stRoundSquare, stEllipse, stCircle);

Экранға шығатын фигураларды анықтайды:stRectangle - тіктөртбұрыш;stSquare - квадрат;stRoundRect - бұрыштары дөңгелектенген тіктөртбұрыш;stRoundSquare - бұрыштары дөңгелектенген квадрат;stEllipse - эллипс;stCircle - дөңгелек;

Shape құрауышы үшін үнсіздікпен оқиға болып OnDragDrop оқиғасы табылады.

Paint Box құрауышы. Иерархиясы:TObject – TPersistent – TComponent – TControl –

TGraphicControl Құрауыштар Палитрасының Парағы: System. TPaintBox класының Paint Box құрауышы пішіннің

шектелген аймағында сурет салуға мүмкіндік береді. Сурет салуға канваның барлық мүмкіндіктері қолданылады – қаріп, қарындаш, қыл қалам, сонымен қатар бағдарламаның орындалу барысында геометриялық фигураларды тұрғызатын әдістер де қолданылады.

TPaintBox класы TGraphicControl класының ұрпақ класы болып табылады және бұрын қарастырылған графикалық құрауыштармен қатар графикалық басқару элементтерінің жанұясына кіреді.

TPaintBox класындағы анықталған сипаттамалардың ішінен OnPaint оқиғасын ерекшелейік:

property OnPaint: TNotifyEvent;Құрауыш салынар алдында өрбитін оқиға. Paint Box құрауышы үшін үнсіздікпен оқиға болып OnClick

оқиғасы табылады.

Timer құрауышы. Иерархиясы:TObject – TPersistent – TComponent.

76

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 77-сі

Құрауыштар Палитрасындағы Парақ: System – жүйелік деңгейде жұмыс істейтін құрауыштар парағы.

TTimer класының таймері көрнекі емес құрауыш болып табылады, сондықтан оны көмекші құрауыштар қатарына жатқызуға болады. Таймер бір берілген уақыт аралығынан кейін қандай да бір операцияны жасауға тағайындалған.

TTimer класының негізгі қасиеттерін қарастырайық.property Enabled: Boolean – Егер қасиет TRUE мәніне ие

болса, онда таймер OnTimer меншік оқиғаға әсер етеді. property Interval: Cardinal – Уақыт интервалын

миллисекундпен анықтайды, одан кейін OnTimer оқиғасы пайда болады. Үнсіздікпен 1000 (1 секунда) – ға тең.

Сонымен қатар TTimer класында OnTimer оқиғасы анықталған:

property OnTimer: TNotifyEvent;Периодты түрде Interval қасиетінде анықталған уақыт

интервалы біткен сайын өрбіп отырады. Ол үнсіздікпен берілетін қасиет болып табылады. Мысал 3.6.7 Келесі оқиғаны өңдеуіш OnTimer таймерінің

оқиғасына жауап береді, ол белсенді басқару элементін бір пиксель оңға жылжытады.

procedure TForm1.Timer1Timer(Sender: TObject);begin Timer1.Interval := 100;

IF ActiveControl <> nil THEN ActiveControl.Left := ActiveControl.Left + 1;

end;Мысал 3.6.8 Келесі оқиғаны өңдеуіш OnTimer таймерінің

оқиғасына жауап береді, ол белсенді басқару элементін оң жаққа бір пиксельге жылжытады, оң жақ шекараға жеткенде басқару сол жақ шекараға беріледі және қозғалыс ары қарай орындалады.

procedure TForm1.Timer1Timer(Sender: TObject);begin Timer1.Interval := 10;

IF ActiveControl <> nil THEN IF ActiveControl.Left+ActiveControl.Width <= Form1.ClientWidth THEN ActiveControl.Left := ActiveControl.Left + 1 ELSE ActiveControl.Left := 0;end;

77

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 78-сі

Емтихан сұрақтары

Теориялық бөлім1. Delphi – дегі негізгі ұғымдар. (Объект, құрауыш, пішін, құрауыштың

қасиеті, құрауыштың оқиғасы және т.б.)2. Delphi – дің интегралдық құрылымы. (IDE). Delphi – дегі жоба. Delphi – де

қолданылатын файлдар.3. Жобаның бағдарламалық коды. Бөлімдер. Модульдің бағдарламалық коды.

Бөлімдер.4. Кластар және объектілі – бағытталған бағдарламалау . Объектілі –

бағытталған бағдарламалаудың негізгі үш қасиеті.5. Кейбір маңызды кластар. (TList, TStrings, TStringList).6. Standard және Additional парақтарындағы Delphi – дің құрауыштары.

(Мәтіндік құрауыштар, графикалық құрауыштар) 7. Standard және Additional парақтарындағы Delphi – дің құрауыштары.

(Батырмалар, тізімдер, кестелер, меню, топтаушы элементтер, көптеген күйлерді басқаратын элементтер.)

8. TForm класы . Пішінді жобалауда қолданылатын сипаттамалар. 9. Кескінді құру құралдары. TCanvas, TPen, TBrash, TFont кластары.10.Құрауыштардың жиі қолданылатын қасиеттері. Құрауыштардың негізгі

әдістері. Құрауыштардың негізгі оқиғалары.11.Dialogs және System парақтарындағы Delphi – дің құрауыштары.

(OpenDialog, SaveDialog, ColorDialog, Timer). Олардың маңызды әдістері, оқиғалары және қасиеттері.

12.TControl класы. Хабарламаны тышқанмен өңдеу. 13.TWinControl класы. Хабарламаны пернетақтамен өңдеу. Басқа

хабарламаларды өңдеу. (OnKeyDown,OnKeyUp, OnKeyPress оқиғалары. OnEnter, OnExit оқиғалары.)

14.Хабарламаны экранға шығару. MessageBox, ShowMessage, ShowMessagePos, ShowMessageFmt, MessageDlg, MessageDlgPos әдістері.

15.Абстрактілі кластар. Негізгі абстрактілі кластардың құрылымы. (TObject, TPersistent, TComponent, TControl, TGraphicControl, TWinControl кластары)

16.TControl класы. Басқару элементтерінің орын ауыстыру сипаттамалары. (OnDragDrop, OnDragOver, OnEndDrag, OnStartDrag оқиғалары)

17.TApplication класы. Анықтама жүйесімен байланысты параметрлер. Объект-экран. (Hint, HintColor, ShowHint қасиеттері және т.б. OnHint, OnShowHint оқиғалары.)

18.Ерекше жағдайларды өңдеу. (Ерекше жағдайлардың құрылымы. Ерекше жағдайды қолданатын конструкциялар TRY…FINALLY, TRY…EXCEPT))

Объектілі – бағытталған бағдарламалау.

78

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 79-сі

1. Объектілі – бағытталған бағдарламалаудың негізгі қағидалары. Объект, хабарлама, класс, объект данасы және әдіс. Абстракция, инкапсуляция, туындау және полиморфизм.

2. Кластарға ат беру және оларға элементтер тағайындауда ұсынылатын ережелер.

3. Класс дегеніміз не? Объект дегеніміз не? Класты жариялау. Объектіні жариялау.

4. Кластың өрісі дегеніміз не? Мысалдар. 5. Кластың әдісі болып не табылады? Мысалдар. 6. Әдістердің қабысуы. Статикалық қабысу. Динамикалық қабысу.

Динамикалық, виртуальдық және қалқалау әдістері. Абстрактілі әдістер. 7. Конструктор және деструктор. Мысалдар. 8. Класс қасиетінің класс өрісінен қандай айрмашылығы бар? Read, write,

stored, default, nodefaulte, implements спецификациялары.9. Инкапсуляция. Мысал.10.Туындау. Мысал.11. Полиморфизм. Мысал.12. Кластың құрылымы. Published, private, protected, public секциялары. 13. Кластарға амалдар қолдану. Is және as амалдары. Мысалдар.Оқиға және атын қайта өзгерту.

Тәжірибелік бөлім1) Тышқанның көрсеткішін пішіннің үстімен жылжыту кезінде, ол өз түсін

бұрыштардағы мәндерге байланысты баяу өзгерту керек: сол жақтағы жоғарғы бұрыштың түсі - қара, сол жақтағы төменгі бұрыштың түсі - көгілдір, оң жақтағы жоғарғы - қызыл, оң жақ төменгі - ақ. Ctrl-Alt-C басу арқылы осы режимді қосуға/өшіруге болады.

2) Әрбір мәні үшін TEdit (мәнді бейнелеу үшін) және TLabel (түсініктеме беретін мәтін үшін) элеменнтерін қолданып, жоба құрыңыздар. Жоба - көрсетілген мәндермен келесі өзгертулер жасауға мүмкіншілік беруі керек: әрбір өзгеріс сайын сәйкес формула бойынша басқа мәндер есептелінеді. Мәндер ретінде бөлінгішті, бөлгішті, бөліндіні, қалдықты таңдауға болады. Нақты берілгендерді ондық нүктеден кейін 3 таңбасы бар бекітілген форматта шығар.

3) Ax+By=E және Cx+Dy=F сызықтық теңдеулер жүйесін шешу. Пішінде коэффициенттерді енгізу үшін TEdit құрауышы, нәтижені шығару үшін TLabel құрауышы және екі батырма: <Вычислить>, <Сохранить> орналастырылуы керек. Тапсырманың мәтіні (теңдеудің түрі және коэффициенттердің мәні) және жауабы Lab3.txt мәтіндік файлға шығу керек. Әрбір келесі шығын алдыңғыға жазылып отырылады. <Вычислить> батырмасына басқанда ол батырма өшіп қалады, бірақ <Сохранить> батырмасы және TLabel – дегі жазу пайда болады. TEdit – ке берілгендерді

79

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 80-сі

енгізгенде <Вычислить> батырмасы пайда болады, бірақ <Сохранить> батырмасы мен TLabel – дегі жазу өшеді.

4. Берілген шарт бойынша есептеу. OnChange оқиғасы. Екі санның мәнін беретін және бірінші санның тригонометриялық (Sin(x), Cos(x)) функциясын есептейтін немесе екі санның арасындағы арифметикалық амалды орындайтын ( көбейту, бөлу) жоба құру. Есептеу формуласының көрінуін өшіруді қадағалау және қате арифметикалық амалдарды тану. Ерекше жағдайларды өңдеу.

5. Бағыттары көрсетілген пернеге басқанда пішін экран бойынша жылжиды. Тышқанның оң жақ батырмасына басқанда пішін жан – жағынан 5 пиксельге кішірейеді. Тышқанның оң жақ батырмасы мен Shift пернесіне басқанда пішін жан – жағынан 5 пиксельге үлкейеді.

6. Негізгі пішіннің терезесіне құрауыштарды орналастырыңыздар: Memo, Edit, Label, және екі батырма: “OK” және “Close”. “OK” батырмасына басқанда Edit енгізу жолындағы мәтін Label тамғасына өзгеріссіз көшірілетін және көпжолды Memo редакторына көшірілетін бағдарлама құрыңыздар.

7. Image және PaintBox құрауыштарының көмегімен көпбұрыштың интерактивті салынуын қамтамасыз ететін бағдарлама құрыңыздар. (сызықтардың салыну тізімін қолмен ұйымдастырыңыздар).

8. Бағдарлама терезесінің сол жақ шекарасынан оң жақ шекарасына дейін шеңбердің жылжитын көрінісін ұйымдастыратын бағдарлама құрыңыздар.

9. Memo, Open Dialog, Save Dialog, Font Dialog, Button, RadioGroupe, MainMenu құрауыштарын қолдана отырып, келесі функцияларды атқаратын редактор құрыңыздар: Мәтінді файлдан жүктеу Мәтінді файлға сақтау Мәтіннің қаріпін өзгерту Туралау стильін өзгерту

10. Memo, Open Dialog, Find Dialog, Replace Dialog, MainMenu құрауыштарының көмегімен төмендегі функцияларды атқаратын редактор құрыңыздар: Мәтінді файлдан жүктеу Мәтіннің қандайда бір үзіндісін іздеуді жүзеге асыру Мәтіннің үзіндісін іздеу және айырбастауды жүзеге асыру.

11. Memo, Open Dialog, Save Dialog, MainMenu құрауыштарын қолдана отырып, төмендегі функцияларды орындайтын редактор құрыңыздар: Мәтінді файлдан жүктеу Мәтінді жолдағы цифрлар саны бойынша сұрыптау ‘proba.txt’ файлына мәтіннің L –ден бастап K жолын сақтау. K және L

сандары SpinEdit құрауышына енгізіледі. SpinEdit құрауышындағы мәндер мәтіннің күйіне сай келу керек.

80

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 81-сі

12. RadioGroup құрауышын және TCanvas класының негізгі әдістерін қолдана отырып, геометриялық фигураларды сызатын қосымша құрыңыздар. (шеңбер, эллипс, тіктөртбұрыш, дөңгелектенген бұрыштары бар тіктөртбұрыш, дөңгелектенген бұрыштары бар квадрат, квадрат және т.б.). Геометриялық фигураның түсін өзгерту үшін қосымша Shape және ColorGrid құрауыштарын қолданыңыздар.

13. Color қарым – қатынасын қолдана отырып пішіннің түсін өзгертетін қосымша құрыңыздар. File Open Picture және File Save Picture қарым – қатынасын қолдана отырып, “Picture Viewer” қосымшасын құрыңыздар.

14. "Тест" жобасын құрыңыздар. Жоба: меню; «О программе» терезесінен; «Тестирование» пішінінен (5 сұрақтан кем емес); "Результаты" пішінінен тұру керек.

15. 2 ListBox тізімінен, Edit құрауышынан , Panel құрауышынан және төрт жазудан тұратын жоба құрыңыздар. Бұл жоба келесі функциялардың жұмыс істеуін қамтамасыз ету керек: Edit – тегі жолды екі тізімге тасымалдау; Бірінші тізімдегі жолды екінші тізімге тасымалдау және керісінше; Қара панельге сүйреу әдісімен жолды жою; Көптеген таңдау болғанда, барлық таңдалған жолдарды тасымалдау.

16. 2 ListBox тізімінен және Edit құрауышынан тұратын жоба құрыңыздар. Бұл жоба келесі функциялардың жұмыс істеуін қамтамасыз етуі керек: ListBox1 пішін: ListBox1 – дегі сөз қосарланады; ListBox2 пішін: ListBox2 – дегі сөз жойылады; ListBox1 ListBox2: сөздердің қарапайым тасымалдануы; Edit1 ListBox1, Edit1 ListBox2: тышқанның сол жақ пернесі –

тасымал, оң жағы – сөздің көшірмесі. Edit1 – ден көшірмесін алғанда тышқанның көрсеткішінің түрі – crCross.

17. Мынадай функциялары бар батырмадан тұртын жоба құрыңыздар: Батырма өздігінен пішіндегі қаріпті үлкейтеді; Shift – пен бірге батырма пішіннің қаріпін кішірейтеді; Ctrl – мен бірге батырма – дөңгелек бойынша (үшеудің ішінен) пішіндегі

қаріпті ауыстырып қосады. 18. Келесі функциялардан тұратын батырмасы бар жоба құрыңыздар:

Пішіннің жақтауының типін анықтайды (дөңгелек бойынша бесеудің ішінен).

Батырма үшін оның орындайтын функциясын білдіретін (Hint) көмекші кеңесін анықтау және көмекші кеңес стандартты түрде пайда болмайды, ол пішіннің арнайы орнында тақырыбы мен аты бар батырмаға тышқанның көрсеткіші тигенде пайда болады да, көрсеткішті батырмадан алғанда өшеді.

81

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 82-сі

Объектілі – бағытталған бағдарламалау1. Меншік кластың қасиеттері мен әдістерін құру. Конструкторды құру.

Класты сипаттау "Қосмәнді бүтін оң сан" (TN2).Қасиеттері – аты, мәні, тақтық, бірінші сан, екінші сан.Әдістері: – процедуралар: мәнді тағайындау (SetN2) , сандарды ауыстыру (Swap);

- функциялар: басқа санға қарағанда кіші (LessThen), ақпарат (Info);- конструктор (Create).

2. Меншік кластың қасиеттері мен әдістерін құру. Конструкторды құру. Класты сипаттау "Жазықтықтағы нүкте" (TDot).Қасиеттері – аты, декарттық координата, полярлық координаталар, жазықтықтың нөмірі (егер осьте болса, онда 0-ге тең), оське тиісті ме ?Әдістер: – процедуралар: басқа нүктеге дейінгі ара қашықтық (RoFrom),

векторға көшу (dx,dy) (MoveRel); координаталар басына қарағанда симметриялық бейнелеу (SimmZero), x=y осіне қарағанда симметриялық бейнелеу (SimmXY);– функцялар: ақпарат (Info);– конструктор (Create).

3. Меншік кластың оқиғасын құру. Қасиеттер мен әдістеді құру. Конструкторды құру. Класты сипаттау "Кәдімгі бөлшек" (TDrob).Қасиеттері: – аты, мәні, бөлінді және бөлгіш.Әдістер: – процедуралар: бөлшекті орынымен ауыстыру (Swap), басқа

бөлшектің мәнін қосу (Add);– функциялар: ақпарат (Info);– конструктор (Create).

Оқиғалар: – бөлшек өзгерді (OnChange), стандарттық; – бөлгіш нөлге тең (OnZero), параметрлері – ескі мән.

4. Меншік кластың оқиғасын құру. Қасиеттер мен әдістерді құру. Конструкторды құру. Берілген класқа қосу (TDrob).Қасиеттері – Simple, қарапайымдылық (бөлінді бөлгіштен кіші), оқуға;

– Changable, өзгертуге рұқсат, оқуға және жазуға.Әдістер – процедуралар: амалдар "–" (Sub), "*" (Mult), "/" (Div) басқа

бөлшекпен;– Assign процедурасы (d:TDrob), басқа бөлшектердің ақпараттық өрісін көшіру;– Compare функциясы (d:TDrob), ағымды бөлшекті басқа бөлшекпен салыстырады (нәтиже 0, +1, –1 сәйкес мына жағдайлар үшін Self=d, Self>d, Self<d).

Оқиға: – OnChanging (бөлшек өзгереді), өңдеу – процедурасының интерфейсінде (аналогия бойынша с var Accept: Boolean OnDragOver оқиғасы үшін) буль айнымалысы орналасады, ол жаңа мәннің

82

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 83-сі

нақтылығын анықтайды: (үнсіздік TRUE, FALSE жағдайында алдыңғы мән қайта қалпына келеді). Берілген мүмкіншілкті қолдана отырып бір бөлшекке модульі бойынша 100-ден аспайтын мән қабылдауға, ал екіншісіне жұп бөлгіш қабылдауға рұқсат етілмейді.

83

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 84-сі

Жолдармен жұмыс жасауға тағайындалған кейбір функциялар мен процедуралар

function IntToStr(Value:Integer):String – бүтінсанды мәнді жолға түрлендіреді.

function StrToInt(S:String):Integer – жолды сандық мәнге түрлендіреді. Түрлендіру мүмкін болмаған жағдайда бір ерекшелік қозады.

function FloatToStr(Value:Extended):String – нақты санды символдық түрге түрлендіреді.

function FloatToStrF(Value:Extended; Format:TfloatFormat; Precision, Digits:Integer):String – таңдап алынған формат бойынша нақты мәнді жолға түрлендіреді. Мысалы:

Var: x:Extended;…Edit1.Text:= FloatToStrF(x,ffFixed,8,3); {нақты

берілгендерді бекітілген пішімде ондық нүктеден кейін 3 белгімен шығарады}

…function StrToFloat(S:String):Extended – символдар жолын нақты санға

айналдырады. .procedure Val(S:String; V; Code:Integer) - V параметрінің типіне сәйкес

символдар жолын санға түрлендіреді. V – кез – келген бүтін немесе нақты тип. Егер түрлендіру жемісті болса, онда Code айнымалысында 0, әйтпесе бірінші қате символдың нөмірі болады. Мысалы:

Var: P:Extended; Code:Integer; …Val(Edit1.Text,P,Code);…procedure Str(X; S:String) – екілік санды символдық түрге түрлендіреді. X

- кез –келген бүтін немесе нақты тип. Мысалы:преобразует двоичное число в символьное представление. X- любого

целого или вещественного типа. Например:Var: X:Extended; S:String; …Str(X:10:4,S);function Now: TDateTime – ағымды мерзім мен уақытты TDateTime типті

форматта қайтарады;function Date: TDateTime – ағымды мерзімді TDateTime типті форматта

қайтарады;function Time: TDateTime - ағымды уақытты TDateTime типті форматта

қайтарады;

84

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 85-сі

function DateTimeToStr(DateTime: TDateTime): string - TDateTime типіндегі мәнді жолға айналдырады.

function DateToStr(Date: TDateTime): string - TDateTime типіндегі күнтізбелік мерзімді жолға айналдырады.

function TimeToStr(Time: TDateTime): string - TDateTime типіндегі уақытты жолға түрлендіреді.

Мысалы: Label1.Caption:=TimeToStr(Time);function UpperCase(const S:String):String – жолдарды жоғарғы регистрдің

символдарына түрлендіреді. function LowerCase(const S:String):String – жолдарды төменгі регистрдің

символдарына түрлендіреді.function StringOfChar(Ch:Char; Count:Integer):String – берілген нақты

символдардың көшірмелерімен толтырылған жолды қайтарады. Мысалы: S:= StringOfChar('A'; 10):

85

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 86-сі

2 ПРАКТИКАЛЫҚ ЖҰМЫСТАР

Практикалық жұмыс № 1 «Delphi интерфейсінің элементтері»

Бірінші тәжірибелік жұмыс Delphi ортасы мен осы тіл туралы негізгі ұғымдарға кіріспеден басталады. Сіздер жобамен Delphi ортасының қосымшасы ретінде танысасыздар, ал пішінді құрауыштарынан бағдарлама құрылатын жобаның қалауы ретінде қарастырасыздар. Нақты мысалдарда Delphi ортасында бағдарламалаудың концепциясы тереңдетіліп оқылады, олар: жобаны анықтау, жаңа пішінді құру, пішінге құрауыштарды қосу, осы құрауыштардың қасиеттерін анықтау және бағдарламаның орындалуы.

Жұмыстың мақсаты: Delphi ортасымен және оның негізгі терезелерімен танысу. Өзіңнің бірінші қосымшаңды құру және оны сақтауды үйрену.

Delphi — Windows жүйесінде жұмыс істеуге арналған бағдарламалаудың көрнекілік тілі. Оның қосымшасы, яғни Delphi ортасында құрылған бағдарлама да Windows жүйесіне арналған.

Delphi ортасында бағдарламалау объектілі-бағытталған технологияға сүйенеді. Бағдарламалаудың базалық тілі ретінде Object Pascal тілі таңдап алынған.

Delphi ортасында бағдарлама құру жұмысының көп бөлігі құрауыштарды таңдау, оларды тышқанның көмегімен экранға орналастыру және осы құрауыштардың қасиеттерін анықтауға кетеді. Құрауыштар — «құрылысшы блоктар» деп саналады, олардан Delphi ортасының қосымшалары құрылады. Олар өз кезегінде көрінетін болуы мүмкін, олар қолданбалы интерфейстің бөліктері (айналдыру жолағы, басқару батырмалары, меню т.б.), сонымен бірге көрінбейтінде болуы мүмкін — таймер, деректер базасы.

Тапсырма 1. Delphi - ді іске қосу Delphi – ді іске қосу үшін 3 әдістің біреуін орындаңыздар: 1. Егер сіз Windows ортасында отырсаңыз , онда Жұмыс

стөліндегі Delphi пиктограммасына тышқанның көмегімен екі рет шертіңіз .

2. Келесі қадамдарды орындаңыз: Пуск – Программы – Borland Delphi 6 – Delphi 6

3. Windows бағыттауышынан (Каталог Program Files\Borland\Delphi 6\Bin) delphi32.exe файлын тауып алып, соны орындаңыз.

Тапсырма 2. Delphi интерфейсінің элементтерін оқып – үйрену. Ортаның интегралдық құрылымы (IDE – Integrated Development Environment).

Delphi ортасының интегралдық құрылымына қосымшаларды құрайтын және жобаны басқаратын келесі құралдар кіреді:

86

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 87-сі

Негізгі меню Құрал – саймандар панельі Жоба диспетчері (Project Manager) Код редакторы (Code Editor) Құрауыштар палитрасы (Component Palette) Пішін терезесі Объект инспекторы (Object Inspector) Объект бұтақтары (Object Tree View) Меню конструкторы (Menu Designer) Зерттеуші (Browser)Delphi 6 ортасын іске қосқанда компьютер экраны сурет 1.3 – де

көрсетілгендей көрініс табады.

Бағдарламалау ортасының негізгі терезесін қарастырайық. Ол терезенің тақырыбы — Delphi 6 – Project 1, яғни Delphi сізге бірінші жобаңызды құруға нұсқау береді және оған Project 1 деген ат тағайындайды. Төмен қарай негізгі меню, 16 батырмадан тұратын құрал-саймандар панельі және құрауыштар палитрасы орналасқан. Негізгі меню бағдарламалау ортасының командаларына қатынасты

Объект бұтақтары терезесі

Объект инспекторы терезесі

Код редакторы терезесі

Негізгі пішіннің терезесі

Құрылымның негізгі терезесі

Негізгі

меню

Құрал-саймандар панелі Құрауыштар палитрасы

87

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 88-сі

қамтамасыз етеді, олардың көбі Windows ортасынан және оның қосымшаларынан белгілі, ал қалғандары Delphi – ді оқып – үйренгенде кең түрде талқыланады.

Құрал – саймандар панелі негізгі менюде жиі қолданылатын командаларды жылдам орындауға мүмкіндік береді.

Құрал – саймандар панельінің батырмалары.

Кейбір батырмалар мен терминдердің не үшін тағайындалғаны Delphi ортасымен жан – жақты танысқанда меңгеріледі.

Осы батырмалардың біреуіне біраз уақыт тышқанның курсорын апарып қоя тұрсақ , онда көмек өрісінде анықтама жолы пайда болады, онда берілген батырманы таңдап алғанда қандай әрекет орындалатыны жазылады.

Құрауыштар палитрасы — пішінге қосуға болатын көптеген объектілер жиынтығынан тұрады. Delphi ортасында қосымшаны құруға осы құрауыштар қолданылады. Олардың әрқайсысы үшін орындауға болатын бағыныңқы бағдарлама немесе Windows интерфейсінің элементі белгіленген. Құрауыштар ортақ қасиеттері бар топтарға біріктірілген (Standard, Additional және т.б.), олардың әрқайсысы өздеріне сәйкес бетбелгіге тышқанның көмегімен шерткенде шақырылады.

Құрауыштар палитрасының кейбір парақтарын қарастырайық:

88

Жоғарғы сол жақтағы екі батырма Windows ортасының басқа қосымшаларынан белгілі файлды ашуға (Open) және файлды сақтауға (Save) тағайындалған.

Файл жобасын ашу (Open Project) және файл жобасын сақтауа (Save Project As…).

Файлды жобаға қосу (Add file to project) және файлды жобадан жою (Remove file from project).

Тізімнен модульді таңдау (View Unit).

Ағымды жобадағы пішіннің тізімін шақыру (View Form). Сіз пішінді таңдаған кезде ол активтенеді, ал онымен байланысты модуль Кодтар редакторында активтенеді.

Бағдарламаның орындалуы (Run).

Бағдарламаның орындалуын тоқтату (Pause).

Пішіннің өзіне сәйкес бағдарламаның кодында жазылған модульге ауыстырып қосу және керісінше (Toggle Form / Unit).

Пішіннің жобаға қосылуы (New).

Бағдарламаны жөндегенде оның қадаммен орындалуын қамтамасыз ететін батырмалар (Trace into, Step over).

New Items диалогтық терезесін ашады. Ол алдын – ала даярланған элементтер жиынынан тұрады және сіздер ол элементтерді өздеріңіздің жасап жатқан қосымшаларыңызға қолдана аласыздар.

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 89-сі

Standard –Windows – де қосымшасы бар стандартты басқару элементтерін жүзеге асыратын құрауыштар жиынынан тұрады. (батырмалар, тізімдер және т.б.).

Additional – қосымша басқару элементтері (графиктер мен диаграммаларды салуға арналған құрауыштар, графикалық көріністерді бейнелеу және т.б.).

Data Access – деректер базасына қатынауды жүзеге асыратын арнайы құрауыштар жиынынан тұрады.

Data Controls – қолданушымен қарым – қатынас орнататын көрнекілік құрауыштардан тұрады және деректер базасы үшін берілгендерді басқару үрдісін орындайды.

Dialogs – стандартты қарым - қатынас құратын құрауыштар (қаріпті таңдау, файлдармен операциялар жасау және т.б.).

System – операциялық жүйемен қарым – қатынасты орнататын құрал.VBX –Visual Basic стиліндегі құрауыш. Бетбелгіде жазылған сөздерді оқыңыздар және сөздердің

мағынасын аударыңыздар. Әрбір топты шақырыңыздар, көмек кеңесін қолдану арқылы әрбір құрауышты қараңыздар.

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

Жоба диспетчері - жобаға кіретін пішіндер мен модульдердің аттарын көруге, жобаға пішіндер мен модульдерді қосуға, жобадан жоюға және т.б. орындауға мүмкіндік береді.

Диалог терезесінде келесі бағандар бар:Unit – жоба модульдері.Form – жоба пішіндері.Path – модульдерге жол.

Қарым – қатынас терезесіндегі батырмалар:Add – файлды жобаға қосу.Remove – файлды жобадан жою.View unit –модульді көру.View form – пішінді көру.Options – жоба параметрлері.

Код редакторы бағдарлама кодынан тұрады, олар бағдарлама кодын құруға және редакциялауға тағайындалған.Код редакторының ағымды менюінің командаларын қарастырайық.

Open File at Cursor – атына тышқанның көрсеткіші орналасқан файлды ашады

Browse Symbol at Cursor – терезедегі кез – келген модульді, объектіні және айнымалыны көруге мүмкіндік береді

Toggle Breakpoint – тоқтату нүктесін тағайындайдыRun to Cursor – қосымшаны тышқанның көрсеткішіне дейін орындайды

89

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 90-сі

Debug – Evaluate/Modify – айнымалыны өзгерту және көру үшін қарым – қатынас терезесін ашады

Debug – Add Watch to Cursor – айнымалыларды бағдарламаның орындалуы барысында көру үшін қосады

Read Only – файлда мәтінді редакциялауға тиым саладыОбъект инспекторы қосымша құрамындағы объектілерді қадағалауға

мүмкіндік береді.. Оның көмегімен объектінің қажетті қасиеттері және олардың стандартты оқиғаларға әрекеті тағайындалады (пернеге басу, екі рет шерту, өзгерту және т.б.).

Объект бұтақтары Delphi 6 ортасында пайда болған жаңалық болып табылады. Бұл терезеде пішінде, берілгендер модульінде немесе фреймде орналасқан құрауыштар бейнеленеді және олардың арасындағы логикалық қарым – қатынас, мысалы «аталық» – «еншілік» қарым - қатынасы.

Delphi 6 ортасының құрылымын баптаңыздар. Tools – Environment Options меню командасын таңдаңыз. Келесі

өрістерге қарама – қарсы таяқшалар қойыңыздар, егер олар Preferences қалташасында тұрмаса:

Autosave options тобында (автосақтау опциясы): Editor files ( Run

командасын таңдағанда немесе Delphi – ден шыққанда кодтар редакторында өзгертілген файлдарды сақтайды.);

Project Desktop ( Егер сіз Delphi – ден шықсаңыз немесе жобаны жапсаңыз сіздің жұмыс стөліңіздің орналасуын сақтайды).

Compiling and running тобында(компиляторлау және іске қосу):

Show Compiler Progress (Сіздің жобаңыздың компиляциясы туралы есепті көруге мүмкіндік береді);

Minimize On Run (Сіз қосымшаңызды іске қосқанда Delphi – ді кішірейтеді. Егер сіз қосымшаңызды жапсаңыз Delphi орнына қайта келеді);

Hide Designers On Run (Қосымша іске қосылып тұрған кезде Object Inspector және Form window типіндегі жобалау терезелерін тығып қояды. Қосымша жабылғанда терезе пайда болады.).

OK батырмасына басыңыздар.

90

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 91-сі

Тапсырма 3. Delphi – дің негізгі терезелерінің қасиеттерін оқып – үйрену.

Delphi – де он негізгі терезе бар. Delphi іске қосылғанда біз төртеуін көреміз: негізгі терезе, негізгі пішіннің терезесі, Объект бұтақтарының терезесі және Объект Инспекторы терезесі. Төртінші терезе — Бағдарламалау Кодының Редакторы — ол ашық тұрады, бірақ пішін терезесінің артына тығылған, оны көру үшін құрал – саймандар панельіндегі Toggle Form/Unit батырмасына шерту керек.

Пішін терезесі — Құрауыштар палитрасындағы құрауыштардан бағдарлама жинақталатын негізгі орын. Пішіннің өзі орындауға болатын дайын бағдарлама.

Тышқанның көмегімен Run батырмасына шертіңіз және осы бағдарламаны орындаңыз.

Пішіннің бағдарламасы откомпилируется, экрандағы көмекші терезелер жойылады, пішіннің координаталық торы жоғалады және ол кәдімгі Windows терезесінің қасиетін меңгереді.

Осы терезенің қасиетін зерттеңіз . Оның өлшемін өзгертіңіз , экран бойынша жылжытыңыз , жоғарғы сол жақтағы батырманы активтеңіз, терезені бүкіл экранға дейін үлкейтіңіз.

Сіз байқағандай, пішін терезесі «жанданды». Alt+F4 батырмаларының комбинациясы Delphi ортасын алғашқы

қалпына әкеледі.Инспектор Объектісінің терезесі құраушы немесе пішіннің өзіне

тышқанмен шерткенде активтенетін қасиеттерден тұрады. Активтенген құрауштың аты терезенің тақырыбынан кейін орналасады (сурет 1.3. жағдайында ол пішіннің өзі). Терезе екі парақтан тұрады: Properties (қасиеттер парағы) және Events (оқиғалар парағы).

Құрауыштардың стандартты палитрасындағы Button батырмасына басып, содан кейін пішіннің кез – келген жеріне шертіңіз.

Пішінде батырманың бейнесі пайда болады (сурет 1.4). Бұндай іс-қимыл пішінге құрауышты қосу деп аталады. Қойылған құрауышқа шертіңіз. Оның айналасында квадраттары бар тіктөртбұрыш жақтау пайда болды.

Бұл дегеніміз құрауыш активтенді дегенді білдіреді және Объект Инспектірінде құрауыштың аты пайда болды Button1: TButton. Бұл жағдайда Button TButton типіндегі айнымалы, бастапқы T әрібі тип дегенді білдіреді.

91

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 92-сі

TButton типі объект ретінде сипатталған және оның барлық құрауыштары да объект ретінде сипатталған, сондықтан құрауыштардың қасиеттерін басқаратын терезе Объект Инспектірі терезесі деп аталады. Properties парағы 2 бағанаға бөлінген: қасиеттер аты бағанасы және қасиеттер мәні бағанасы. Сол жақ бағанада құрауыштың қасиеттерінің аттарының тізімі, оң жақта — қасиеттердің нақты мәні көрсетілген. Қолданушы кез – келген қасиеттің мәнін өзгерте алады..

Тапсырма 4. «Программа "Тест"» жобасын құру. Form1 пішінін ерекшелеңіз. Объект Инспектіріндегі Caption қасиетіне «Программа «Тест»»

деп жазыңыз. MainMenu құрауышының көмегімен (сурет 1.5. көрсетілгендей)

меню құрыңыз, ол құрауыштың стандартты палитрасында бірінші орын алады: соған шертіңіз, одан кейін пішінге шертіңіз ; пайда болған MainMenu пиктограммасына екі рет шертіңіз. Экранда «Программа “Тест”» пішінінің үстіне Form1.MainMenu1

тақырыбымен тағы бір терезе пайда болады;Объект Инспектіріндегі Caption жолына бірінші элемент меню Тест

– ті енгізіңіз , ол меню жолағының оң жақ жоғарғы шетінде орналасқан көк тіктөртбұрышқа жазылады.

Enter батырмасын басу арқылы менюдің бірінші элементінің бірінші командасын жазуға кірісіңіздер ;

Caption жолына Тестирование деп жазып, Enter – ді басыңыз. Аналогиялық түрде келесі командалар үшін Результат және

Выход сөздерін жазыңыздар.Меню командаларын бөлуші сызық арқылы топтарға бөлуге болады, ол

үшін Результат командысынан кейін , Caption жолына тақырып ретінде алу белгісін енгізіңіздер – “-”.

Менюдің келесі элементін құрыңыздар — Помощь:

Құрауыштың типі

Құрауыштың аты

Қасиеттің аты

Қасиеттің мәні

Пішінге қосылған құрауыш

92

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 93-сі

Меню Тест командасының оң жағында орналасқан тіктөртбұрышты тышқанның көмегімен активтеңіз;

Caption жолына Помощь деп жазып, Enter – ді басыңыз;Аналогиялық түрде келесі операцияларға Инструкция және О

программе командаларын жазыңыздар. Тышқанмен негізгі пішінге шерту арқылы негізгі пішінге Form 1.

MainMenu1 терезесінде құрылған менюді орналастырыңыз.

Выход командасы орындалу үшін оған бағдарлама жазыңыздар:- Выход командасына шертіңіз.Кодтар Редакторы терезесінде жанып - өшіп тұрған тышқанның

көрсеткіші бар бағдарламаның коды пайда болады (Delphi ортасы осы оқиғаны өңдеу үшін автоматты түрде бос процедураны құрды );

Тышқанның көрсеткіші тұрған позицияға пернетақтаның көмегімен төмендегі сөзді енгізіңіз:

Close;

Сонда мынаны аламыз:procedure TForm1.N5Click(Sender: TObject);begin Close;end;

5 – тапсырмада көрсетілген ереже бойынша жобаны сақтаңыздар. Run батырмасының көмегімен бағдарламаны орындаңыздар.Біз «Программа “Тест”» жобасының құрылымдық негізін құрдық. Егер

жобаның жұмыс істеу қабілетін тексеретін болсақ, онда менюдің Выход (оған біз арнайы бағдарламалық кодты жаздық) командасынан басқа командалары орындалмайтынын көрдік. Менюдің қалған командаларын әрекетке келтіруді келесі тәжірибелік жұмыстарда қарастырамыз.

Тапсырма 5. Жобаны және пішіннің модулінің файлын сақтау. «Мои документы» папкасында өзіңіздің меншік папкаңызды келесі

түрде құрыңыз: Топ_Фамилия_Delphi (Мысалы, 3ПМИ-1_Ахметов_Delphi). Оған салынған «Программа_Тест_» папкасын құрыңыз. Delphi – дің негізгі менюінде келесі командалар тізімін орындаңыз:

File – Save Project As… немесе құралдар панельіндегі Save Project As батырмасына тышқанмен шертіңіз.

93

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 94-сі

«Save Unit1 As» тақырыбы бар диалогтық терезе пайда болады, ол бағдарлама кодының файлын сақтауға арналған (сурет 1.6). Үнсіздікпен файлға «Тип файла» өрісінде көрсетілгендей .PAS кеңейткіші беріледі.

Папканы таңдаңыз C:\…\Мои документы\…\Программа_Тест_. «Имя файла» өрісіне – MainForm сөзін енгізіңіз және Сохранить

батырмасына басыңыз.Осыдан кейін жоба файлын сақтау үшін «Save Project1 As»

тақырыбымен келесі қарым – қатынас терезесі пайда болады (сурет 1.7). Үнсіздікпен ол файлға .DPR (Delphi PRoject) кеңейткіші беріледі.

«Имя файла» өрісіне – Test сөзін енгізіңіз және Сохранить батырмасына басыңыз.

Енді сіздің жобаңыз «Test» деп аталады , ал оның файлдары «Программа_Тест_» папкасында орналасады.

Файлдарды жазудың мұндай тізбегі жоба файлы алдын – ала пішіннің бағдарламалық модульінің денесінен тұратын файл сақталмағанша сақталмайтынын білдіреді.

Жобаны жабыңыз.

Сонымен сіздер Delphi ортасымен таныстыңыздар: негізгі терезенің құрама бөліктерімен – құрал – саймандар панельімен, құрауыштар палитрасымен, Delphi ортасының негізгі терезелерімен: пішіндер, Объект Инспектірі және Код Редакторы; пішіннің тақырыбын жазуды үйрендіңіздер, меню командаларын енгізу, менюдің Выход командасын шерткенде орындалатын оқиғаның бірінші өңдеуішін құрдыңыздар; жобаны және оның

94

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 95-сі

әзірше жалғыз бағдарламалық модульін сақтауды үйрендіңіздер.

95

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 96-сі

Практикалық жұмыс № 2 «Негізгі пішіннің жобасы мен модульінің бағдарламалық коды»

№2 практикалық жұмыста негізгі пішіннің жобасы мен модульінің бағдарламалық коды қарастырылады; Delphi ортасы пішінге құрауышты қосқан кезде оның бағдарламалық кодын автоматты түрде қосады, «оқиға» деген түсінік кіргізіледі және оның оқиғаны өңдеу прцедурасының көмегімен қалай өңделетіні көрсетіледі.

Тапсырма 1. №1практикалық жұмыста құрылған жобаны іске қосу және жоба мен модульдің бағдарламалық кодын көру.

Delphi – ді іске қосыңыз. Негізгі менюдің командасын орындаңыз: File \ Open Project Ашылған терезенің жобалар тізімінен (.DPR кеңейткіші бар

файлдар) TEST.DPR аты бар жобаны тауып алыңыздар, оған тышқанның сол жағымен бір рет шертіп, ОК - ді таңдаңыз немесе пернетақтадан Enter пернесіне басыңыз.

Экранда «Программа «Тест»» тақырыбымен пішін пайда болады. Жобаның бағдарламалық кодын көру үшін негізгі менюдің Project\

View Source командасын орындаңыздар. Көңіл қойып жобаның бағдарламалық кодын қараңыздар (Сурет

1.8).

Жобаның бағдарламалық коды бағдарламаның тақырыбынан, модульді қосу бөлімінен, компилятор директивасынан және бағдарламаның негізгі денесінен тұрады.

Бағдарламаның тақырыбы Program қызметші сөзінен тұрады, одан кейін жобаның атымен сәйкес келетін бағдарламаның аты орналасады. Жобаның аты оны сақтар кезде беріледі және ол Delphi ортасында орындалатын файлдың атын анықтайды.

Бағдарламаның аты

Модульді қосу бөлігі

Компилятор директивасы

Бағдарламаның денесі

96

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 97-сі

Модульді қосу бөлімі Forms жүйелік модульі мен Mainform модульінен тұрады, олардың бағдарламалық коды Mainform.pas. файлында жазылады.

Компилятор директивасы {$R *.RES} бағдарламалық файлдың орындалуы үшін берілгендерден тұратын (мысалы, қосымшаның пиктограммасын сипаттау) файлдық ресурсты жүктеу үшін тағайындалады. Жұлдызша белгісінің тұруы ресурс файлының аты жоба файлының атымен дәл келеді, бірақ кеңейткіші .res болатындығын білдіреді.

Бағдарлама денесі begin сөзінен басталады және end сөзінен аяқталады. Ол үш жолдан тұрады: бірінші жол қосымшаны инициализациялау үшін, ал екінші жол Form1 негізгі пішінді құру және оны Application қосымшасының құрамына қосу, ал соңғы үшінші жол - қосымшаны іске қосу үшін тағайындалған.

Mainform модульінің бағдарламалық кодын көріп шығыңыздар (сурет 1.9). Ол үшін құрал – саймандар панельінің View Unit (тізімнен модульді таңдау) батырмасына басыңыздар.

View Unit (модульдерді көру) терезесі пайда болады. ( Бұл терезені негізгі менюден View\Units… командасын орындау арқылы немесе Ctrl+F12 пернелерінің комбинациясын басу арқылы шақыруға болады.)

Тізімнен Mainform атын таңдап, OK батырмасына басыңыздар.Модульдер Object Pascal бағдарламалық тілінде қарастырылған

стандартты конструкциядан тұрады (бөлімдердің тізбегі мен аттары). Жалпы түрдегі модульдің құрылымы:

Unit < модульдің аты>;interface…implementation…initialization…finalization…

end.

97

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 98-сі

Модульдің тақырыбы Unit қызметші сөзінен тұрады, ол сіздің алдыңызда модульдің бағдарламалық коды тұр дегенді білдіреді, одан кейін модульдің аты орналасқан. Модуль онымен негізгі бағдарлама немесе басқа модуль қолданылуы үшін құрылады (біздің жағдайда модуль TEST.DPR жобасына қосылған).

Модульдің бағдарламалық коды модульдің тақырыбы мен төрт бөлімнен тұрады: интерфейс, жүзеге асыру, инициализация және қорытынды бөлім.

Интерфейс бөлімі interfase сөзінен басталады. Бұл бөлімде негізгі бағдарламаға немесе басқа модульдерге қатынау мүмкіндігі бар модульдің барлық ауқымды объектілерін жариялау жатыр (типтер, тұрақтылар, айнымалылар және бағыныңқы бағдарлама) Ол мыналардан тұрады:

а) модульді қосу бөлімі, uses сөзінен басталады. Біз көріп отырғанымыздай біздің модульімізге бірнеше жүйелі модульдер қосылған, олардың әрқайсысы белгілі функцияны атқарады;

б) типтерді сипаттау бөлімі, type сөзінен басталады. Оның құрамында Delphi ортасында құрылған форма типін сипаттау жатыр (TForm1 класы). Бұл класс құрауыштар типтерінің тізімі мен қандай да бір оқиғаны өңдеу процедураларының сипатталуынан тұрады. Біздің класс мыналардан тұрады: TmenuItem типтес меню элементтері N1, N2, .... N8 , олардың екеуі негізгі менюдің «Тест» және «Помощь» элементтері, ал қалған алтауы меню командаларына сәйкес келеді: «Тестирование», «Результат», «----», «Выход», «О программе» және «Инструкция». Delphi құрауыштарды пішінге орналастырған кезде автоматы түрде осы элементтерді бағдарламалық кодқа қосады; процедураны сипаттау Procedure N5Click(Sender: Tobject);

в) ауқымды айнымалыларды жариялау бөлімі var сөзінен басталады.

98

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 99-сі

Жүзеге асыру бөлімі implementation сөзінен басталады. Ол меню командасына тышқанмен шерту, қарым – қатынас терезесінің батырмасына басу, пернетақтадағы пернеге басу және т.б. оқиғаларды өңдеу процедурасының денесінен тұрады. Сонымен бірге программистің меншік процедурасы мен функциясының сипаттамасынан тұруы мүмкін, олар өз кезегінде оқиғаны өңдеу процедурасынан шақырылады.

Нақ осы жағдайда бұл бөлімде біз бір ғана процедурамен жұмыс істейміз:

procedure TForm1.N5Click(Sender: TObject);begin Close;end;

Бұл процедура меню элементі «Выход» - қа тышқанмен шерту оқиғасын өңдейді.

Компилятор директивасы {$R *.DFM}, жүзеге асыру бөлімінің басында орналасады, ол компиляторға жүзеге асыру бөліміне модульдің атымен сәйкес келетін .dfm кеңейткіші бар файлда орналасқан пішіннің қасиетінің мәнін орнататын команданы қою туралы бұйрық береді.

Инициязациялау және қорытындылау бөлімдері міндетті емес.Инициялизациялау бөлімі модульдің аяғында болады және міндетті

емес. Егер ол бар болса, онда ол initialization сөзінен басталады немесе begin ... end оператор жақсаларымен аяқталады. Бұл бөлімнің операторлары негізгі бағдарламаның басқаруына дейін орындалады және оның жұмыс істеуіне дайындық ретінде қолданылады.

Қорытындылау бөлімі finalization сөзінен басталады және бағдарламаның аяқталуы кезінде орындалатын операторлардан тұрады.

Тест орындалуы үшін қосымшаның негізгі модульі «Tест» -тің бағдарламасына қажетті оқиғаларды өңдейтін процедуларды атап өтіңдер.

Біз жасап отырған қосымша өзіміз қосқан менюі бар негізгі пішіннен тұрады. «О программе» меню командасының көмегімен біз анықтама терезі ретінде тағы бір қосымша пішінді шақыруымыз керек. Дайын шаблонды біз New Items қарым – қатынас терезесінен таңдап аламыз, ол үшін құрал – саймандар панельінің New батырмасына басу керек.

Тапсырма 2. Aboutbox пішінінің шаблонының негізінде «О программе» (сурет 1.10.) терезесін құру.

File негізгі менюінен New пунктін таңдап алыңыз, осы пункттің ағымды менюінен Other... таңдаңыз, сонда New Items қарым - қатынас терезесі пайда болады, Forms вкладкасынан Aboutbox пішінін таңдаңыз.

Келесі элементтерден тұатын Aboutbox стандартты терезесі пайда болады:

- графикалық сурет, ол пішінге Additional құрауыштар палитрасының Image (кескін) батырмасының көмегімен қойылады;

- мәтіндік құрауыштар (TLabel);

99

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 100-сі

- ОК батырмасы. Aboutbox пішінінің Объект Инспектірінің Caption қасиетіне О

программе терезенің тақырыбын жазыңыздар. Image құрауышына тышқанмен шерту арқылы активтеңіз.Суреттің маңайында қара квадраттары бар жақтау пайда болады. Жақтаудың қара кадраттарын тышқанмен ұстай отырып Image

құрауышының шекарасын қойылатын графикалық объектінің шекарасына дейін өзгертіңіз.

Image құрауышының Объект Инспектірінің Picture қасиетінің үш нүктесі бар батырмасына шертіңіз.

Picture Editor (Сурет редакторы) терезесінің Load командасын орындаңыздар.

Load Picture терезесінің «Папка:» өрісінен 256color каталогқа өтіңіздер (C:\Program Files\Common Files\Borland Shared\Images\Splash).

Каталог файлының тізімінен SHIPPING.BMP таңдаңыз (қалауларыңа қарай басқасын таңдауға болады) және «Открыть» басыңыз.

Picture Editor терезесінің OK батырмасына басу арқылы суретті «О программе» пішінінің дайындалып жатқан жақтауына орналастырыңыздар.

Инспектор Объектісін Image құрауышына бейімдеңіз және Stretch (масштабтау) қасиетіне true параметрін қойыңыз.

Сурет жақтауға толығымен орналасады.

Пішіндегі барлық мәтіндік құрауыштарды ( TLabel) жойыңыздар. Ол үшін әрбір құрауышты тышқанмен шерту арқылы белгілеңіз және Delete батырмасына басыңыз.

Aboutbox пішініне Label құрауышын қосыңыз (Standart палитра құрауышынан ). Оған мәтінді кіргізесіздер.

Label1 құрауышы үшін Объект Инспекторінінің AutoSize қасиетіне false параметрін орнатыңыз (бұл қасиет Label - дің ұзындығын енгізілген мәтіннің ұзындығы бойынша алады). Alignment және Layout қасиеттеріне taCenter, tlCenter параметрлерін орнатыңыздар, ол мәтінді құрауыштың центрі бойынша орналастыруға қолданылады. WordWrap қасиетіне – True (сөзді буынға бөлуге рұқсат етіледі).

100

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 101-сі

Caption қасиетіне Программа Тест © Copyrighte by Makeew S. деп жазыңыздар (өз фамилияңызды көрсетіңіз).

Тышқанның көмегімен Label1 құрауышына қажетті өлшемді беріңіз және оны терезенің оң жақ жоғарғы бұрышына орналастырыңыз.

Color қасиетіне фонның түсін орнатыңыз. Font қасиетінің үш нүктесі бар батырмасына басу арқылы Қаріп

қарым – қатынас терезесін шақырып, қаріптің түсін, өлшемін және түрін белгілеңіздер.

Әртүрлі қаріпі бар мәтінді енгізу үшін тізбекпен бірнеше Label қолданылады және әрбіреуі үшін өз қасиеті орналастырылады. Әрбір Label – ге 256 символ орналастырылады.

Пішіндегі ОК батырмасын активтеңіздер. Объект Инспектірінің осы батырмасының Caption қасиетін

Продолжить деп өзгертіңіздер. Осы батырманың «О программе» терезесінде орналасуы мен

өлшемін өздеріңіз белгілеңіздер.Тапсырма 3. «О программе» пішінінің бағдарламалық модульін

MainForm негізгі пішінінің модульіне қосу. Ағымды терезе ретінде «Программа «Тест»» неізгі пішінінің

терезесін алыңыздар (терезенің бос жеріне тышқанмен шерту арқылы немесе 1 – ші практикалық жұмыста көрсетілген әдісті қолдану арқылы).

«Помощь» менюін ашыңыздар және «О программе» командасына тышқанмен шертіңіздер.

«О программе» меню командасына тышқанмен шерткенде өңделетін процедурасы бар редактор терезесінің бағдарлама коды ашылады.

Тышқанның көрсеткіші жанып - өшіп тұрған жерге мынаны жазыңыздар:

AboutBox.ShowModal;

Бұл команда бағдарламаның орындалуы барысында модальдық режимде экранға «О программе» терезесін шығарады.

Құрылған модульді сақтаңыздар: құрал – саймандар панельінің Save All батырмасына басыңыздар; модульді сақтау терезесінің «Имя файла» өрісіне about_x деп жазып, «Сохранить» батырмасына басыңыздар, ал жоба мен қалған модульдер автоматты түрде сақталады.

Toggle Form/Unit батырмасына тышқанмен шерту арқылы код редакторы терезесінен MAINFORM.PAS негізгі пішінінің модульінің кодын шақырыңыздар (пішіннің өзіне сәйкес бағдарламалық модульге ауыстырлып қосылуы және керісінше). Бағдарламаның мәтінінің uses модульді ауыстырып қосу бөліміне үтір арқылы about_x деп жазыңыздар.

Бағдарламаны орындаңыздар. «Tест» бағдарламасының менюіндегі «О программе» командасының жұмыс істеу қабілетін тексеріңіздер.

101

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 102-сі

Бұл практикалық жұмыста біз қосымша қарым – қатынас терезелерін құруды үйрендік, оқиғаларды өңдеу, модульдерді негізгі бағдарламаға қосу, пішіндерге құрауыштарды орналастыру ( мәтіндер, графикалық суреттер және т.б.), сонымен бірге бағдарламалық модульдердің және жоба файлдарының құрылымдарын қарастырдық.

102

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 103-сі

Практикалық жұмыс № 3 ««Тест» қосымшасын құру»№3 – ші практикалық жұмыста №1 – ші практикалық жұмыста

ұсынылған көлемдегі «Tест» қосымшасын құруды аяқтаймыз; «Тестирование» және «Результат» пішіндерін құру үрдістерін қарастырамыз; негізгі модульдің бағдарламалық кодында бағдарлама құрудың қарапайым әдістерін көрсетеміз.

Тапсырма 1. Жобаны іске қосу. «Тестирование» пішінін құру. Алдыңғы практикалық жұмыста құрылған (TEST.DPR)

бағдарламасын іске қосыңыздар және оның жұмыс істеу қабілетін тексеріңіздер. Жұмыс бағдарламасынан Выход командасын таңдап, жобалау режіміне қайтып оралыңыздар.

Енді «Тестирование» пішінін құруға кірісеміз.Біздің тест 3 – 4 варианттан тұратын жауабы бар 5 сұрақтан тұрсын. Бізге

осы 5 сұрақ жауабымен сиятындай пішін керек. Бұл мақсатта бізге парақтар тобынан тұратын жазба кітапша түріндегі пішін қажет, әрбір парақ парақтың нөмірі бар бетбелгіден тұрады. Delphi ортасындағы мұндай пішін шаблон түрінде болады. Бұл пішінді біздің жобамызға қосамыз.

Құрал – саймандар панельінің New командасын орындаңыздар, New Items терезесінен Forms қалташасын таңдаңыз, одан кейін Tabbed pages пішінін таңдап (Tabbed Notebook Dialog – бетбелгісі бар диалогтық жазба кітапша), ОК батырмасына басыңыздар.

Пішінді оқып – үйреніңіздер. Ол бетбелгісі бар үш парақтан және үш басқару батырмаларынан тұрады. Пішіннің әрбір парағы жұмыс істеп тұрған бағдарламада сәйкес бетбелгіге тышқанмен шерткенде шақырылады. Қайта таңдалған пішіннен Cancel және Неlр батырмаларын жойыңыздар. Объект Инспектірінен құрауыштар тізімін ашыңыздар. Бұл құрауыштар тізімінде әрбір құрауыш объект ретінде көрсетілген. Тізім келесі объектілерден тұрады: PagesDlg пішіні, PageControl1 жазба кітапшасы, үш парақ TabSheet1, TabSheet2, TabSheet3, Panel1, Panel2 екі панельдері және ОКBtn батырмасы.

Пішінге тақырып және объектілерге қысқартылған ат тағайындаңыздар: PagesDlg – ды таңдаңыздар, Caption қасиетіне Тестирование деп жазыңыздар, Name қасиетіне — TestDlg және Enter – ді басыңыздар. Енді қарым – қатынас терезесі «Тестирование» деген тақырыптан және TestDlg аты бар объектіден тұрады, ол Инспектір Объектісінің тізімдерінен шақырылады. Color қасиетіне пішіннің түсін орнатыңыздар, мысалы сары.

Жазба кітапшасының парақтар санын беске дейін өзгертіңіздер (сәйкес тестің сұрақтар санына байланысты) және олардың бетбелгілеріне Вопрос1, Вопрос 2 және т. б. деп жазыңыздар. Ол үшін Инспектір объектісінен TabSheet1 таңдаңыздар және Caption қасиетіне Вопрос 1 және т.б. деп жазыңыздар.

Парақ қосу үшін парақтың өрісіне тышқанның оң жақ батырмасымен шертіңіз, сонда контекстік меню пайда болады, одан New Page – ді

103

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 104-сі

таңдаңыздар. «Тестирование» пішініндегі барлық 5 бетбелгі бір жолға сиюы үшін,

жазба кітапшасының TabWidth (бетбелгінің кеңдігі) қасиетінің мәнін орнатыңыздар. Width қасиетінің мәні болып жазба кітапшасының кеңдігі алынады.

Тапсырма 2. Графикалық элементі бар тестің бірінші сұрағын көркемдеу.

Біздің жазба кітапшамыздың әрбір парағына сұрақ пен оның жауаптарын орналастырайық. Бірінші парақтан бастайық. Сұрақтың мәтінін жақтаудың түрлі – түсті панельіне жазамыз. Ол үшін Panel және Label құрауыштарын қолданамыз.

Объект Инспектірінен PageControl1 – ді таңдаңыздар және ActivePage (актив парақ) қасиетінен TabSheet1 – ді таңдаңыздар.

Активті парақ жазықтығынан жақтаудағы панель түрінде мәтінді енгізетін орын дайындаңыздар. Ол үшін бірінші параққа құрауыштар палитрасынан Panel құрауышын қосыңыздар және оны тышқанның көмегімен парақтың жоғарғы бөлігіне дейін созыңыздар (сурет 1.11). Align қасиетіне - alClient мәнін беріңіздер.

Объект Инспектірінің Color қасиетіне тышқанды екі рет шерту арқылы түстер палитрасын шақырыңыздар және панельдің мысалы, жасыл түсін орнатыңыздар.

Caption қасиетінен Panel3 деген жазуды жойыңыздар. Панельге картинадағы сияқты жақтау жасаңыздар. Ол үшін

Bevelinner (ішкі фаска) қасиетіне Lowered (төмендетілген) мәнін Bevelouter (сыртқы фаска) қасиетіне —Raised (көтеріңкі) мәнін тағайындаңыздар.

Дайын панельге Label құрауышын қосыңыздар, оны панельдің кеңдігіне дейін созыңыздар және мәтіннің центр бойынша жазылуы үшін Label құрауышының Autosize қасиетіне False мәнін орнатыңыздар. Alignment қасиетіне — taCenter (көлденеңінен алғанда центрлеу), Layout қасиетіне – tlCenter мәнін (көлднеңінен – центрі бойынша туралау),

Word Wrap қасиетіне (сөзді бөлуге рұқсат етіледі) – True мәнін тағайындаңыздар.

Label1 құрауышының Caption қасиетіне “ Заставкой какого программного продукта является эта картинка?” деп жазыңыздар, Font қасиетіне тышқанмен екі рет шерту арқылы Шрифт терезесін шақырып, қаріптің түсін, түрін және өлшемін орнатыңыздар.

Сурет қою үшін панель аймағына Additional қасиетінен Image құрауышын қосыңыздар және қара жақтауға тышқанмен екі рет шерту арқылы суретті редакциялау үшін Picture Editor терезесін шақырыңыздар. Load батырмасының көмегімен осы терезеден файлды жүктеу терезесін шақырып, C:\Program Files\Common Files\Borland Shared\Images\Splash\16color каталогынан Athena.bmp файлын жүктеңіздер.

104

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 105-сі

Суреттің Stretch қасиетіне true мәнін тағайындаңыздар. Қозғалысты бағыттау пернелері мен Shift батырмасының

комбинациясын қолдана отырып, құрауыштың өлшемін өзгертуге болады, ал Ctrl батырмасымен комбинациясы арқылы құрауышты пішіннің бойымен жылжытуға болады.

Қарым – қатынас парағына біз жауаптың бірнеше варианттарын орналастыруымыз керек, оның ішінен тестен өтуші дұрыс деген бір жауапты таңдауы қажет. Қатардан балама таңдау жасау үшін Standard палитрасының RadioGroup деген құрауышын қолданамыз, ол бірнеше радиобатырмаларды бір топқа біріктіреді. (Мұндай атау аналогия бойынша көптеген радиобағдарламалардың ішінен біреуін таңдағанда бір ғана батырма іске қосылатын радиоқабылдағыштың батырмаларына қолданылады.)

«Тестирование» пішінінің бірінші сұрағының парағына RadioGroup құрауышын қосыңыздар және оның Caption қасиетіне топтың тақырыбын Варианты ответов беріңіздер.

Items (элементтер) қасиетіне тышқанның екі шертуімен String List Editor (Жол тізімінің редакторы) терезесін шақырыңыздар.

Бұл редактордың бірінші жолына Delphi, екінші жолына — Windows 95, үшіншісіне — Microsoft Office 95 деп жазып, ОК батырмасына басыңыздар.(бірінші жауап дұрыс болады). Жауаптың әрбір варианты RadioGroup құрауыш панельінің радиобатырмаларының қарама – қарсы жағында орналасады.

Қарым – қатынас терезесінің екінші парағына бірінші парақтың дайын панельін көшіріңіздер. Ол үшін бірінші парақтың панельін тышқанмен шерту арқылы ерекшелеңіз және Edit (редакциялау) менюінің Сору (көшіру) командасын орындаңыздар. Екінші парақты активтеңіз және Edit менюінің Paste (қою) командасын орындаңыздар.

Өздіктеріңнен №2, №3, №4, №5 сұрақтардан тұратын жауабы бар тағы 4 парақ құрыңыздар.

Пішіннің құрылған «Тестирование» модульін Test_x.pas деген атпен сақтаңыздар.

105

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 106-сі

Негізгі пішіннің бағдарламалық кодына жобаның негізгі менюінен «Тестирование» пішінін іске қосатын команданы енгізіңіздер. Ол үшін «Программа «Тест»» пішінінің Тест\Тестирование меню командасына тышқанмен шертіңіздер – сонда осы оқиғаны өңдейтін дайындалған бағдарламалық коды бар терезе пайда болады. Тышқанның көрсеткіші жанып - өшіп тұрған жерге мыныны жазыңыздар

TestDlg.Showmodal; Uses бөліміне қосылған модульдің атын test_x енгізіңіздер;Тапсырма 4. “Результат” пішінін құру және жобаны аяқтау.

New Items қарым – қатынас панельінен Dialogs қалташасын таңдаңыздар және онда Standard Dialog (стандарттық қарым – қатынас терезесі) пішінінің шаблонын таңдаңыздар. Пішінге «Результат» тақырыбын беріп, Name қасиетіне объектінің атын Resultdlg жазыңыздар (сурет 1.12).

Пішіндегі батырмалардың ішінен ОК батырмасын ғана қалтырыңыздар. Оны пішіннің төменгі жағының центріне орналастырыңыздар. Ол үшін пішіннің аймағында тышқанның оң жақ батырмасымен батырмаға шертіңіздер. Пайда болған контекстік менюден Align командасын таңдап, пайда болған қарым – қатынас терезесінен Center in window параметрін таңдаңыздар.

Пішіннің панельінің жоғарғы жағына Label құрауышын қосыңыздар, оның Autosize қасиетіне false мәнін, ал Alignment қасиетіне— taCenter мәнін орнатыңыздар. Қаріптің атрибуттарын орнатыңыздар. Label құрауышының хабарламасы жобаның негізгі модульінің бағдарламалық кодына енгізіледі және хабарламаның мәтіні тестің нәтижесіне байланысты болады.

Пішінге сурет қойыңыздар. Пішіннің файлын Result_x атымен сақтаңыздар және оны

MainForm.pas модуліне қосыңыздар. Тестен өткенде жауаптарды өңдейтін бағдарламалық кодты

құрыңыздар. Негізгі пішіннің Тест\Результат меню командасына шерту арқылы

106

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 107-сі

Mainform модульінің кодын шақырыңыздар және тышқанның көрсеткіші жанып - өшіп тұрған жерге пернетақтаның көмегімен бағдарламаның мәтінін енгізіңіздер (көп нүктенің орнына дұрыс жауаптарының нөмірін ескере отырып, қалған 4 сұрақтың бағдарламасының жолын жазу керек.).

Mainform модулінің соңғы бағдарламалық кодыvar ball:byte;begin

ball:=0;if TestDlg.RadioGroup1.ItemIndex=0 then ball:=ball+1;if TestDlg.RadioGroup2.ItemIndex=......ResultDlg.Label1.Caption:=’Ваш результат:’+IntToStr(Ball);ResultDlg.ShowModal;

end;Тестілеу нәтижесінде әрбір дұрыс жауап 1 балл деп есептелінеді және

балдардың жалпы қосындысы, максимум 5 жағдайында, Результат пішініне шығуы керек. Көрнекілік бағдарламалау құралдарының көмегімен бұл есепті шешу мүмкін емес, сондықтан қарапайым бағдарламалауға көшейік.

procedure TForm1.N6Click(Sender: TObject);

процедурасы тестілеу нәтижесінің балдарын қосады және нәтижені ball айнымалысына орналастырады. Тестен өтуші дұрыс жауабы бар радиобатырмаға басқан кезде ғана бал есептелінеді. Әрбір радиотопта бір ғана батырма дұрыс және ол бағдарламада өзінің топтық нөмірінің индексі бойынша белгіленеді, 0 – ден басталады. Бұл сұрақта дұрыс жауап бірінші жауап, радиобатырманың индексі 0 – ге тең және т.б. Бағдарламалық жолда

if TestDlg.RadioGroup1.ItemIndex=0 then ball:=ball+1;

шартты көшу командасы орындалады. Мұнда былай деп айтылады, егер тышқанмен бірінші топтың бірінші батырмасына шертсек (элемент индексі ItemIndex=0), онда ball айнымалысына 1 балл (ball:=ball+1) қосылады. Басқа жағдайда бұл команда орындалмайды. Осылайша TestDlg пішінінің барлық радиотобына жазып шығамыз. Тәжірибелік тұрғыдан алғанда бірдей жолдарды енгізуді жеңілдету үшін бірінші жолды жазғаннан кейін оны ерекшелеп, Edit менюінің Сору және Paste командаларын қолдана отырып, тағы да төрт көшірме жасап, оған сәйкесінше өзгертулер енгізіңіздер.

Бағдарламалық жолдаResultDlg.Label1.Caption:=’Ваш результат:’+IntToStr(Ball);

ResultDlg пішінінде орналасқан Label1 құрауышының Caption қасиетіне 'Ваш результат:' деген мәтін және алынған балдар саны меншіктелінеді, IntToStr(Ball) (Integer to string сөздерінің басқы әріптері— бүтінді жолға айналдыру) функциясы ball айнымалысындағы бүтін санды жолдық форматқа айналдырады.

ResultDlg.ShowModal;

107

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 108-сі

командасы Результат пішінін демонстрация жасайды. Бағдарламаны орындап, онда өз жолдастарыңызды тестен

өткізіңіздер және оларға Паскаль тілінде мұндай бағдарламаны құру үшін 1500 – ге жуық жол жазу керек, ал ол бір жұмалық немесе айлық уақытты алатынын айтыңыздар. Delphi тілін меңгеру арқылы мұндай бағдарламаны 30 минут уақыт ішінде жасауға болады. Delphi сияқты күшті, әрі әдемі бағдарламалық тілді үйреніп, біліп жатқандарыңызға мақтаныңыздар.

108

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 109-сі

Практикалық жұмыс №4 «Полиморфизм және көрнекілік әдістер»

Полиморфизм — бұл әртүрлі кластарға кіретін әдістерге бірдей ат тағайындау мүмкіндігі. Полиморфизмнің концепциясы Концепция полиморфизма обеспечивает в случае применения метода к объекту использование именно того метода, который соответствует классу объекта.

Біреуі қалған екеуіне базалық класс болатындай үш класс анықталсын: type

// базалық классTPerson = class

FName: String; // өрістің атыConstructor Create(AName: String);Function Info: String; virtual;

end; // TPerson – нан туынды TStud = class (TPerson)

FGr: Integer; // оқу тобының нөміріConstructor Create(Aname: String; Gr: Integer);Function Info: String; override;

end; // TPerson – нан туынды TProf = class(TPerson)

FDep: String; // құжыраның аты Constructor Create(AName: String; Dep: String); Function Info: String; override;

end; Әрбір класта Info әдісі анықталған. Базалық класта virtual

директивасының көмегімен Info әдісі көрнекі болып анықталған. Әдістің көрнекі болып анықталуы еншілес класқа көрнекілік әдісті өз меншік әдісімен айырбас жасауға мүмкіндік береді. Әрбір еншілес кластың өзінің Info класы анықталған, ол аталық кластың сәйкес келетін әдісін айырбастайды (аталық кластың көрнекілік әдістерін ауыстыратын туындалған кластың әдісі, override директивасында орналастырылады).

Төменде әрбір класс үшін Info әдісінің анықталуы келтірілген. function TPerson.Info: String;begin

result := ' '; end;functicn TStud.Info: String; begin

result := FName + ' группа ' + IntToStr(FGr) end; function TProf.Info: String; begin

result := FName + ' кафедра ' + FDep;end;

109

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 110-сі

Екі класс та бір базалық кластан туындағандықтан студенттер мен оқытушылардың тізімін былай жариялауға болады (бұл жерде мынаны еске алу қажет, объект дегеніміз - бұл нұсқағыш):

list: array[1..SZL] of TPerson; Тізімді осылай жариялауға болады, өйткені Object Pascal аталық кластың

нұсқағышына еншілес кластың нұсқағышының мәнін меншіктеуге мүмкіндік береді. Сондықтан list массивінің элементі Tstud класының және TProf класының элементтері бола алады.

Студенттер мен оқытушылардың тізімін Info әдісін массив элементтеріне қолдану арқылы шығаруға болады. Мысалы, былай:

st := ' ';for i := 1 to SZL do // SZL – тізім – массивінің өлшемі if list[i] <> NIL then st := st + list[i] .Info + #13;ShowMessage(st);

Бағдарламаның орындалуы барысында массивтің әрбір элементі TStud типті объектіден де, TProf типті объектіден де тұра алады. Полиморфизмнің коцепциясы объектіге объектінің типіне сай келетін әдісті қолдануды қамтамасыз етеді.

Келесі бағдарлама жоғарыда қарастырылған TPerson, TStud және TProf кластарының жариялануын қолдана отырып, студенттер мен оқытушылардың тізімін қалыптастырады және шығарады. Бағдарламаның мәтіні 2.1 листингісінде, ал қарым – қатынас терезесі сурет 2.1 келтірілген.

2.1 листингісі Полиморфизмнің демонстрациясыUnit polimor_;InterfaceUses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

typeТForm1 = class(TForm)

Edit1: TEdit;

RadioButton1

RadioButton2

Edit1

Edit2

Button1

Button2

110

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 111-сі

Edit2: TEdit; GroupBox1: TGroupBox; RadioButton1: TRadioButton; RadioButton2: TRadioButton; Label1: TLabel; Label2: TLabel; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);

private ( Private declarations )

public ( Public declarations )

end;type

// базалық классTPerson = class

FName: String; // өрістің атыConstructor Create(AName: String);Function Info: String; virtual;

end; // Студент класыTStud = class (TPerson)

FGr: Integer; // оқу тобының нөмірі Constructor Create(AName: String; Gr: Integer);Function Info: String; override;

end; // Оқытушы класыTProf = class(TPerson)

FDep: String; // құжыраның аты Constructor Create(AName: String; Dep: String); Function Info: String; override;

end; const

SZL = 10; // тізімнің өлшемі var

Forml: TForml List: array[1..SZL] of TPerson; // тізім n: Inteqer = 0 // тізімдегі адамдар саны

implementation ($R *.DFM} constructor TPerson.Create(AName: string);

begin FName:=AName;

end; constructor TStud.Create(AName: string; Gr: integer);

begin inherited Create(AName); // базалық кластың конструкторын шақыру

111

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 112-сі

FGr:=Gr;end;

constructor TProf.Create(AName: string; Dep: string);begin

inherited Create(AName); // базалық кластың конструкторын шақыруFDep:=Dep;

end; function TPerson.Info: string;

begin result:=FName;

end; function TStud.Info: String;

beginresult := FName + ' группа ' + IntToStr(FGr)

end; function TProf.Info: String;

begin result := FName + ' кафедра ' + FDep;

end;// Добавить батырмасына шертуprocedure ТForm1.Button1Click(Sender: TObject);

begin if n < SZL then begin // объектіні класқа қосу n:=n+1; if RadioButton1.Checked then // TStud объектісін құру List[n]:=TStud.Create(Edit1.Text,StrToInt(Edit2.Text)) else // TProf объектісін құру

if RadioButton2.Checked then List[nl:=TРrоf.Create(Edit1.Text,Edit2.Text);

// енгізу өрісін тазалауEdit1.Text :=' ';Edit2.Text :=' ';Edit1.SetFocus; // Тышқанның меңзері Фамилия өрісінде

endelse ShowMessage('Список заполнен!');

end;procedure ТForm1.Button2Click(Sender: TObject);

var i:integer; // индексst:string; // тізім

begin for i:=1 to SZL do if list[i] <> NIL then st:=st + list[i].info + #13;ShowMessage(' Список ' + #13 + st);

end;end.

112

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 113-сі

Добавить (Button1) батырмасын басқанда іске қосылатын TForm1.Button1Click процедурасы TStud немесе TProf класының list[n] объектісін құрады. Құрылып жатқан объектінің класы RadioButton ауыстырып қосу батырмасының күйімен анықталады. Ауыстырып қосу батырмасының студент (RadioButton1) жағдайында орнатылуы TStud класын анықтайды, ал оқытушы (RadioButton2) жағдайы – TProf класын анықтайды.

Список (Button2) батырмасын басқанда іске қосылатын TForm1.Button2Click процедурасы тізімнің әрбір объектісіне (массив элементтеріне) Info әдісін қолдана отырып,барлық тізімді көрсететін жолды қалыптастырады.

113

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 114-сі

Практикалық жұмыс №5 "Қаситтер мен әдістер"

Кластың сипатталынуы "Қос мәнді теріс емес бүтін сан" (TN2).Қасиет – аты, мәні, тақтық, бірінші сан, екінші сан.Әдістер: – процедуры: мәнді орнату (SetN2), сандарды ауыстыру (Swap); – функциялар: басқа санға қарағанда кіші (LessThen), ақпарат

(Info); – конструктор (Create).

Листинг 2.2 «TN2» класын жүзеге асыратын бағдарламаның демонстрациясы

program Class_TN2;{$APPTYPE CONSOLE} {Компилятор директивасы – бағдарламаның жұмыс істеу

режимінің тапсырмасы.} {MS-DOS режиміне тәріздес мәтіндік режимнің эмуляторы

құрылады}uses SysUtils;

type TN2 = class fName: String; fVal: integer; constructor Create(aName: String); procedure Swap; function Info: String; function LessThen(aNum: TN2): Boolean; procedure SetVal(Value:Integer); function GetOdd:string; function GetD1:byte; procedure SetD1(Value:byte); function GetD2:byte; procedure SetD2(Value:byte); property Name:string read fName; property Odd:string read GetOdd; property Val:integer read fVal write SetVal; property D1:byte read GetD1 write SetD1; property D2:byte read GetD2 write SetD2; end;constructor TN2.Create(aName: String);begin fName:=aName; fVal:=1;end;procedure TN2.Swap;begin SetVal(D2*10+D1);end;function TN2.Info: String;

114

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 115-сі

begin Result:='Naturalnoe dvuznachnoe '+odd+ ' chislo '+Name+'='+IntToStr(Val)+#10#13+' first number=' +IntToStr(D1)+' second number='+IntToStr(D2);end;procedure TN2.SetVal(Value: Integer);begin if (Value>=0) and (Value<=99) then fVal:=Value;end;function TN2.LessThen(aNum: TN2): boolean;begin Result:= Val<aNum.Val;end;function TN2.GetOdd: string;begin if (val mod 2=1) then Result:='nechetnoe' else Result:='chetnoe';end;function TN2.GetD1: byte;begin Result:=Val div 10;end;procedure TN2.SetD1(Value: byte);begin if Value in [0..9] then SetVal(Value*10+D2)end;function TN2.GetD2: byte;begin Result:=Val mod 10;end;procedure TN2.SetD2(Value: byte);begin if Value in [0..9] then SetVal(D1*10+Value)end;var a,b : TN2;begin a:= TN2.Create(' a '); b:= TN2.Create(' b '); { Бағдарламаның орындалуының нәтижесі b.Val:= 23; { Writeln(a.Info); { Writeln(b.Info); { b.swap; { a.D1:= 5; { a.D2:= 8; { Writeln(a.Info); { Writeln(b.Info); { a.Free; { b.Free; { Readln; {

end.

115

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 116-сі

Өз бетінше орындауға арналған тапсырмаКластың сипатталынуы "Жазықтықтағы нүкте" (TDot).

Қасиеттер – аты, декарттық координаталар, полярлық координаталар, жазықтықтың нөмірі (егер оське тиісті болса, онда 0-ге тең), оське тиісті ме?

Әдістер:– процедуралар: басқа нүктеге дейінгі ара қашықтық (RoFrom),

векторға көшу (dx,dy) (MoveRel); координаталар басына қарағанда симметриялық бейнелеу (SimmZero), x=y осіне қарағанда симметриялық бейнелеу (SimmXY);

– функциялар: ақпарат (Info);– конструктор (Create).

Практикалық жұмыс №6 "Оқиғалар"

Кластың сипатталынуы "Кәдімгі бөлшек" (TDrob).Қасиеттері – аты, мәні, бөлінді және бөлгіш.Әдістер:

– процедуралар: бөлшекті орынымен ауыстыру (Swap), басқа бөлшектің мәнін қосу (Add);

– функциялар: ақпарат (Info);– конструктор (Create).

Оқиғалар: – бөлшек өзгерді (OnChange), стандарттық; – бөлгіш нөлге тең (OnZero), параметрлері – ескі мән.

2.3 листингі «TDrobs» класының жариялануынан тұратын DROBS модульі

unit Drobs; interface  uses SysUtils,Classes; type TMyEvent=procedure(Sender:TObject;OldP,OldQ:longint) of Object; TDrob=class private

fName:string; fp,fq:longint; fOnChange:TNotifyEvent; fOnZero:TMyEvent; procedure SetP(NewP:longint); procedure SetQ(NewQ:longint);

public constructor Create(aName:string); procedure Swap;

116

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 117-сі

procedure Add(a:TDrob); function Info:string; function GetValue:real; procedure SetValue(NewValue:real); procedure SetPQ(NewP,NewQ:longint); property Name:string read fName write fName; property Value:real read GetValue write SetValue; property p:longint read fp write SetP; property q:longint read fq write SetQ; property OnChange:TNotifyEvent read fOnChange write

fOnChange; property OnZero:TMyEvent read fOnZero write fOnZero;

end; implementation 

procedure TDrob.SetPQ(NewP, NewQ: longint);var pp,qq : longint;begin if (NewP<>p) or (NewQ<>q) then begin pp:=p; qq:=q; if NewQ<>0 then begin fp:=NewP; fq:=NewQ; Normalization; end else begin fp:=NewP; fq:=1; if assigned(fOnZero) then OnZero(Self,pp,qq) end; if assigned(fOnChange) then OnChange(Self); end;end;constructor TDrob.Create;begin inherited Create; Name:=aName; SetPQ(1,1);end; 

function TDrob.Info: string;begin Result:='Дробь '+Name+'= '+IntToStr(p)+'/'+IntToStr(q)+'='+ FloatToStrF(Value,ffFixed,9,5);end; 

procedure TDrob.Swap;begin SetPQ(q,p);end; 

procedure TDrob.Add(a: TDrob);begin SetPQ(p*a.q+q*a.p,q*a.q);end; 

procedure TDrob.SetP(NewP:longint);begin

117

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 118-сі

SetPQ(NewP,q);end; 

procedure TDrob.SetQ(NewQ: longint);begin SetPQ(p,NewQ);end; 

function TDrob.GetValue: real;begin Result:=p/q;end; 

procedure TDrob.SetValue(NewValue: real);begin SetPQ(round(NewValue*10000),10000);end;

end.Delphi – дегі демонстрациялық бағдарлама

 – Drobs модульі қосылады:uses Windows, Messages, SysUtils, Classes, Graphics, Controls,

Forms, Dialogs, StdCtrls, Drobs;  – екі бөлшекке тағайындалған айнымалылар сипатталынады:

var Form1 : TForm1; a,b : TDrob; 

– пішінге келесі объектілер орналастырылады:

GroupBox1, GroupBox2

бірінші және екінші бөлшектердің демонстрациясы үшін;

Label1, Edit1 бірінші бөлшектің бөліндісі

Label2, Edit2 бірінші бөлшектің бөлгіші

Label3, Edit3 бірінші бөлшектің мәні

Label4, Edit4 екінші бөлшектің бөліндісі

Label5, Edit5 екінші бөлшектің бөлгіші

Label6, Edit6 екінші бөлшектің мәні

Button1 "Орын ауыстыру"

Button2 "+"

118

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 119-сі

Button3 "INFO" бірінші бөлшек үшін

Button4 "INFO" екінші бөлшек үшін

– үш процедура қосылады – бөлшектерді өңдеу үшін: бірінші бөлшектің өзгеруі:

procedure TForm1.AChange(Sender: TObject);begin GroupBox1.Caption:=a.Name; Edit1.Text:=IntToStr(a.p); Edit2.Text:=IntToStr(a.q); Edit3.Text:=FloatToStrF(a.Value,ffFixed,9,5);end; 

екінші бөлшектің өзгеруі:procedure TForm1.BChange(Sender: TObject);begin GroupBox2.Caption:=b.Name; Edit4.Text:=IntToStr(b.p); Edit5.Text:=IntToStr(b.q); Edit6.Text:=FloatToStrF(b.Value,ffFixed,9,5);end; 

екі бөлшек үшін бөлгіштің нольге айналуы:procedure TForm1.ZeroEvent(Sender: TObject; OldP,OldQ:longint);begin with sender as TDrob do if MessageDlg('Дробь '+Name+ ' получила нулевой знаменатель,'+ ' который бы заменен единицей. Восстановить прежнее значение?', mtWarning,[mbYes,mbNo],0) = mrYes then SetPQ(OldP,OldQ);end; 

– бөлшектерді басқаруға арналған көрнекілік құрауыштардың өңдеу - процедуралары қосылып жазылады: Form1.OnCreate оқиғасының өңделуі (пішінді құру):

119

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 120-сі

a:=TDrob.Create('a');a.OnChange:=AChange; a.OnChange(a);a.OnZero:=ZeroEvent;b:=TDrob.Create('b');b.OnChange:=BChange; b.OnChange(b);b.OnZero:=ZeroEvent; 

бөлінді мен бөлгіштің терезелерінде символдық батырмалардың басылуы Edit1, Edit2, Edit4, Edit5 құрауыштары үшін OnKeyPress оқиғасы:var st:string;begin with Sender as TEdit do begin st:=text; if Key='-' then begin if st[1]='-' then Delete(st,1,1) else st:='-'+st; Text:=st; end; if not (Key in ['0'..'9',#8]) then Key:=#0; if Key=#8 then if Length(st)<2 then Key:=#0; end;end; 

бөлінді мен бөлгіштің өзгеруі Edit1.OnChange: a.p:=StrToInt(Edit1.Text);Edit2.OnChange: a.q:=StrToInt(Edit2.Text);Edit4.OnChange: b.p:=StrToInt(Edit4.Text);Edit5.OnChange: b.q:=StrToInt(Edit5.Text);

бөлшектің мәнінің өзгеруі (<ENTER> батырмасын басқанда)Edit3.OnKeyPress: if Key=#13 then a.Value:=StrToFloat(edit3.Text);Edit6.OnKeyPress: if Key=#13 then b.Value:=StrToFloat(edit6.Text);

"Обмен" батырмасының басылуыButton1.OnClick: a.Swap;

"+" батырмасын басуButton2.OnClick: a.Add(b);

бірінші бөлшектің "INFO" батырмасының үстінен тышқанды жылжыту Button3.OnMouseMove: Button3.Hint:=a.info;

екінші бөлшектің "INFO" батырмасының үстінен тышқанды жылжыту Button4.OnMouseMove: Button4.Hint:=b.info; 

Өз бетінше орындауға тапсырма – берілген (TDrob) класына қосу керек: Қасиеттер: – Simple, қарапайымдылық (числитель меньше знаменателя), оқуға; – Changable, өзгертуге рұқсат етіледі, оқу мен жазуға арналған.Әдістер:

120

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 121-сі

– процедуралар: басқа бөлшекпен"–" (Sub), "*" (Mult), "/" (Div) амалдары; басқа бөлшектің ақпараттық өрістерінің көшірмесін жасайтын - Assign(d:TDrob) процедурасы;

– Compare(d:TDrob) функциясы, ағымды бөлшекті басқа бөлшекпен салыстырады (Self=d, Self>d, Self<d жағдайлары үшін сәйкес нәтиже 0, +1, –1).

Оқиға:– OnChanging (бөлшек өзгереді), өңдеу – процедурасының

интерфейсіде (аналогия бойынша с var Accept: Boolean OnDragOver оқиғасы үшін) буль айнымалысы орналасады, ол жаңа мәннің корректілігін анықтайды: (үнсіздік TRUE, FALSE жағдайында алдыңғы мән қайта қалпына келеді). Берілген мүмкіншілкті қолдана отырып бір бөлшекке модульі бойынша 100-ден аспайтын мән қабылдауға, ал екіншісіне жұп бөлгіш қабылдауға рұқсат етілмейді.

121

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 122-сі

Практикалық жұмыс №7 "Қарапайым Windows-қосымшасын құру"

1. «Моя первая программа» атты тақырыбы бар пішіннің терезесін экранда бейнелейтін бағдарлама құрыңыздар. Қосымшаны іске қосыңыз.

2. Бағдарлама өзгертулер енгізіңіздер. Тамғаны пайдалана отырып, терезенің тура ортасына «Hello world!» мәтінін шығарыңыздар. Қаріптің түсін, өлшемін өзгертіңіздер. Қосымшаны іске қосыңыздар.

3. сәйкес келетін командалық батырманы басқанда «Hello world!» сөзінің үстіне «Я программирую на Delphi» сөзі шығатындай етіп бағдарламаны өзгертіңіздер. Мәтінді шығару үшін Edit құрауышын қолданыңыздар. Property Visible:Boolean – бастапқыда құрауыш көрінетін бола ма? соны анықтайды.

4. Құрауыштар ағымды көмекші кеңес тұратындай етіп бағдарламаны толықтырыңыздар. Property Hint: String – элементтер туралы қысқаша анықтама ақпараттан тұрады. Property ShowHint: Boolean – егер мәні True болса, онда меңзер элементтің үстінде тұрғанда Hint қасиетінде берілген қысқаша анықтамадан тұрады.

5. Екі айнымалы жарияланғаннан кейін оларға қандай да бір мәндер меншіктелетіндей бағдарлама құрыңыздар. Осы мәндерді көбейтіңіздер және алынған нәтижені экранда бейнелеңіздер. Бүтін санды мәнді жолға айналдыратын функцияны қолданыңыздар.

6. Негізгі пішіннің терезесіне Memo, Edit, Label құрауыштарын және “OK” және “Close” екі батырмасын орналастырыңыздар. Edit енгізу жолындағы мәтін “OK” батырмасына басқанда өзгеріссіз Label тамғасына және Memo көпжолды редактіріне көшетіндей бағдарлама құрыңыздар. [имя строки ввода].SetFocus операторының көмегімен терезенің экранда пайда болған кезінде (пішіннің оқиғасын қолданыңыздар) және “OK” батырмасына басқанда енгізу жолы үшін енгізу фокусын орнатыңыздар.

Пішіннің оқиғалары:Пішін құрылғанда және оның Visible қасиетінің мәні True болғанда, келесі оқиғалар тіркелген ретімен орындалады:

1. OnCreate – пішінді бастапқы құрғанда орындалады.

2. OnShow – пішін көрінер алдында орындалады.

3. OnActivate – пішін белсенді болғанда өрбиді.

4. OnPaint – пішін экранда салынар алдында өрбиді (пішін белсенді болғанда немесе көрінетін болғанда).

OnDestroy оқиғасы – OnCreate қарама - қарсы, пішінді жойғанда орындалады. 7. №5 – ші тапсырманың бағдарламасын - айнымалылардың мәндері енгізу

жолдары арқылы енгізілетіндей етіп өзгертіңіз. Пішінге келесі әрекетке көмекші кеңес беретіндей тамғаны орналастырыңыз. Ұсыныс: Пішінге 4 құрауышты орналастырыңыз – Button(OK, OK, Close, Результат), 1 – Edit (айнымалылардың мәндерін енгізу үшін), 2 тамға Label - көмек

122

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 123-сі

кеңесті және нәтижені шығару үшін. Visible қасиетін және SetFocus әдісін қолданыңыздар.

123

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 124-сі

Практикалық жұмыс №8 “TForm объектісі”

1. Жаңа жоба құрыңыздар. Пішінге тақырып беріңіздер "Лабораторная работа №8, Фамилия Имя". Жеке каталогқа жобаны сақтаңыздар.

2. Пішіннің өлшемін 500 де 400 пиксельге және орнын экранның центрі бойынша орнатыңыз.

3. Пішінге өзіңіздің фирмалық иконыңызды орнатыңыз. Осы иконканы қосымшаға да орналастырыңыздар. (Қосымшаны көріңіздер).

4. Пішінге "Моя формочка" деген көмекші кеңесті орнатыңыздар. Көмекші кеңестің түсіне қошқыл жасыл түс беріңіздер. (clLime).

5. Тышқанның көрсеткішін пішіннің үстімен жылжыту кезінде, ол өз түсін бұрыштардағы мәндерге байланысты баяу өзгерту керек: сол жақтағы жоғарғы бұрыштың түсі - қара, сол жақтағы төменгі бұрыштың түсі - көгілдір, оң жақтағы жоғарғы - қызыл, оң жақ төменгі - ақ. Ctrl-Alt-C басу арқылы осы режимді қосуға/өшіруге болады.

6. Тышқанның екі рет шертілгенде немесе Alt-X батырмаларының комбинациясына немесе F10 батырмасына басқанда пішін жабылады (рұқсат сұрату арқылы).

7. Бағыттары көрсетілген пернелерге басқанда пішін жылжиды (экранның шекарасында).

8. Тышқанның оң жақ батырмасына басқанда пішін жан – жағынан 5 пиксельге кішірейеді. Тышқанның оң жақ батырмасы мен Shift пернесіне басқанда пішін жан – жағынан 5 пиксельге үлкейеді.

Өздіктеріңнен.1. Пішіннің өлшемі өзгергенде шертпенің дыбысы шығады, ал өлшемнің өзі

экранның төменгі жағындағы минимизация терезесінде көрсетіледі. 2. Тышқанның ортаңғы батырмасына немесе екі шеткі батырмаларына

басқанда пішін тышқанның көрсеткішінің нұсқағышына байланысты центрленеді.

Қосымша . 1. Beep(0) процедурасы қысқа дыбыстық дабылды шақырады. 2. RGB(r,g,b) функциясы r,g,b (от 0 до 255) параметрінің мәніне

байланысты қызыл, жасыл және көк түстердің реттік нөмірін қайтарады.

3. Application объектісі бағдарламаның маңызды қасиеттері мен әдістерін инкапсуляция жасайды Application объектісінің кейбір қасиеттері: HintColor Оперативті көмекші кеңестің таңбашасының түсі. HintHideP

auseКөмекші кеңестің таңбашасы пайда болып және

жоғалғанға дейін миллисекунд тұратын үзіліс. Icon Минимизацияланған бағдарлама батырмасының

124

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 125-сі

пиктограммасы.Title Минимизацияланған бағдарлама батырмасындағы

мәтін.4. Screen объектісі ДК экранының жұмысын жеңілдететін маңызды

қасиеттер мен әдістерден тұрады. Screen объектісінің кейбір қасиеттері: Fonts Барлық экрандық қаріптердің тізімі.Height,

WidthЭкранның ұзындығы мен ені.

IconFont Минимизацияланған бағдарлама батырмасының мәтінінің қаріпі.

PixelsPerInch

Пиксельден дюмге өтетін экранның рұқсат беретін қабілеті.

125

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 126-сі

Практикалық жұмыс №9 "Экрандық объектілерді сүйреу"

Экрандық объектілерді сүйреу тышқанның көмегімен жеке құрауыштардың арасында ақпаратты тиімді тасымалдауға мүмкіндік береді. Жолды бір тізімнен екінші тізімге сүйреу тетігін мысалда қарастырайық. Жоғарғы жақта жазбасы бар ListBox1 және ListBox2 құрауыштарынан тұратын жоба құрыңыздар. Бірінші тізімді апта аттарының атымен толтырыңыздар. Келесі қадамдар сүйреудің төрт қадамынан тұратын хабарламаны өңдеу мысалдарынан тұрады.

1 этап. Сүйреудің басталуы . Тышқанды сол жақ батырмасына басып жылжытқанда өрбиді. ListBox1 құрауышының DragMode қасиетіне dmAutomatic орнатыңыздар, яғни құрауыш өзіне осы этаптың өңделуін алады. Егер осы қасиетке dmManual орнататын болсақ, онда бағдарлама құрушы сүйреудің басын (мысалы, MouseDown оқиғасы бойынша) және оның тетігін іске қосуды (BeginDrag әдісі) өзі қолмен анықтауы керек болады. Сүйреуді бастау сәтінде құрауыш OnStartDrag оқиғасын өрбітеді. Осы қасиетті өңдеу оқиғасына мына жолды жазыңыздар:

Color:=clRed;

2 этап. Құрауыштан объектіні сүйреу. Тышқанның көрсеткішін құрауыштың үстінен жылжытқанда болатын сүйреуде ол OnDragOver оқиғасын өрбітеді. Осы оқиғаны өңдеудің келесі параметрлерін қарастырайық: Source - объект — сүйреудің көзі, X,Y – тышқанның көрсеткішінің координаталары, Accept – құрауыш сүйреп әкелінген ақпаратты қабылдай ма? жоқ па?, соны анықтайтын буль типтес айнымалы. ListBox2 құрауышының осы оқиғасы үшін келесі жолды жазыңыздар, ол тек ListBox1 құрауышынан ғана сүйреуге рұқсат береді:

Accept := Source=ListBox1;

3 этап. Ақпаратты толық құрауышқа лақтыру . Құрауыштан тышқанның батырмасын босатқан сәтте орындалатын сүйреу OnDragDrop оқиғасын өрбітеді. Осы оқиғаның өңдеуішіне сүйреу сәйкес келетін қимыл жазылуы керек. Біздің жағдайда ол жолды сол жақ тізіменен оң жақ тізімге тасымалдау қимылы. ListBox2.OnDragDrop оқиғасының өңдеуішіне ListBox1 тізімінде ерекшеленген жолды ListBox2 тізіміне қосатын операторды жазыңыздар:

with ListBox1 do ListBox2.Items.Add(Items[ItemIndex]);

4 этап . Сүйреуді аяқтау . Құрауыш - сүйреудің көзі оны босатқан сәтте OnEndDrag оқиғасын өрбітеді, оның Target параметрі басқа толық құрауышқа сәйкес келеді (біздің жағдайда ListBox2). Бұл оқиғаның өңдеуішіне бірінші тізімнен таңдап алынған жолды жоятын операторды және пішіннің түсін өзгертетін операторды жазыңыздар:

if Target = ListBox2 then with ListBox1 do Items.Delete(ItemIndex);

126

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 127-сі

Color := clYellow;

Компиляцияны орындаңыздар және сүйреу тетігінің жұмысын тексеріңіздер.

Өздік жұмысқа тапсырма №9_1Екі ListBox тізімінен, Edit құрауышынан, Panel құрауышынан, екі

батырмадан және төрт жазбадан тұратын жоба құрыңыздар. Берілген жоба келесі функциялардың жұмысын қамтамасыз етуі керек:

жолды Edit құрауышынан екі тізімге тасымалдау; жолды бірінші тізімнен екінші тізімге тасымалдау және керісінше; жолды қара панельге сүйреу арқылы жою; файлдағы жолды бірінші тізімде оқу; екінші тізімнің жолдарын файлға сақтау.

Көп таңдау жасалғанда барлық таңдап алынған жолдарды тасымалдау.Edit - тен <Ctrl> пернесі басылған тасымал жасалғанда, көшірме алынады

(тышқанның көрсеткішінің түрі – crCross).

Өздік жұмысқа тапсырма №9_2Екі ListBox тізімдерінен, Edit құрауышынан және екі батырмадан тұратын

жоба құрыңыздар. Ерекшеленген сөзді тасымал жасағанда орындалатын функцияларды іске асыратын бағдарлама құрыңыздар:

ListBox1 пішін: ListBox1 – дегі сөз қосарланады; ListBox2 пішін: ListBox2 – дегі сөз жойылады; ListBox1 ListBox2: сөздердің қарапайым тасымалдануы; ListBox1 Edit1, ListBox2 Edit1: сөздердің орынмен ауысуы; Edit1 ListBox1, Edit1 ListBox2: тышқанның сол жақ пернесі –

тасымал, оң жағы – сөздің көшірмесі. ListBox1 (ListBox2) Button1: файлдан барлық тізімді оқу; ListBox1 (ListBox2) Button2: барлық тізімді файлға сақтау.

Көп таңдау жасалғанда барлық таңдап алынған жолдарды тасымалдау. Edit1 – ден көшірмесін алғанда тышқанның көрсеткішінің түрі – crCross.

Ұсыныс : Edit1 – ден сүйреудің бастамасын өңдеуді қолмен ұймдастырыңыздар,

яғни Edit1.DragMode=dmManual орнатыңыздар және Edit1.OnMouseDown өңдеуішіне келесіні жазыңыздар (бұл толық емес):

if (Button=mbLeft) and (Edit1.Text<>'') then Edit1.BeginDrag(False);

Практикалық жұмыс №10 «Мәтіндік редактор»

127

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 128-сі

Қадам 1. Пішінді TextEditor атпен атау және жобаны Editor.dpr атпен сақтау. (Пішін үшін фирмалық таңбашаны орнатуды, сонымен бірге тақырыбы мен қосымша үшін де таңбашаны, барлық батырмаларға көмекші кеңесті орнатуды ұмытпаңыздар.)

Қадам 2. Пішінге Panel1 құрауышын орналастырыңыздар және оның қасиеттерін орнатыңыздар (осы және басқа қасиеттердің не үшін тағайындалғанын міндетті түрде қарау.)

Align = alTop;Caption = ’’;

Қадам 3. Пішіге Memo1 құрауышын орналастырыңыздар және оны қасиеттерін беріңіздер

Align = alClient;Lines = ’’;WordWrap = TRUE;ScrolBars = ssBoth;HideSelection = False; (фокус басқа құрауышқа өткенде ерекшеленген

мәтіннің ерекшеленуі өшпейді).Қадам 4. Пішінге келесі қасиеттері бар OpenDialog1 құрауышын

орналастырыңыздар DefaultExt = TXT;Filter = ’Текстовые файлы | *.txt’ + ’Все файлы | *.*’;Title = ’Открытие текстового файла’;Options (TRUE – ні орнату)

ofHideReadOnly - диалог терезесінен “Открыть только для чтения” қосқышы жойылады ”;

ofFileMustExist - егер жоқ файл таңдап алынатын болса, онда қате туралы хабарлама генерацияланады;

ofNoReadOnlyReturn - егер ReadOnly типті файл таңдап алынса, онда қате туралы хабарлама шығады.

Қадам 5. Пішінге келесі қасиеттері бар SaveDialog1 құрауышын орналастырыңыздар

DefaultExt = TXT;Filter = ’Текстовые файлы | *.txt’ + ’Все файлы | *.*’;Title = ’Сохранение текстового файла’;Options (установить в TRUE)

ofHideReadOnlyofNoReadOnlyReturnofOverwritePrompt - бар файл таңдап алынған кезде қате туралы хабарлама

генерацияланады.Қадам 6. Панелге &Open атпен батырманы орналастырыңыздар және

келесі OnClick оқиғасының өңдеуішін жазыңыздар (міндетті түрде әр команданың мағынасын түсініңіздер) With OpenDialog1 do

if Execute then begin Memo1.Lines.LoadFromFile(FileName); Caption:='TextEditor - '+ExtractFileName(FileName);

128

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 129-сі

SaveDialog1.FileName:=FileName; FileName:='';end;

Қадам 7. Панелге &Save атпен батырманы орналастырыңыздар және OnClick оқиғасының өңдеуішін жазыңыздар: Memo1.Lines.SaveToFile(SaveDialog1.FileName);

Қадам 8. Панелге Save&As атпен батырманы орналастырыңыздар және OnClick оқиғасының өңдеуішін жазыңыздар: With SaveDialog1 do

if Execute then begin Memo1.Lines.SaveToFile(FileName); Caption:='TextEditor - '+ExtractFileName(FileName);end;

Қадам 9. Панелге E&xit атпен батырманы орналастырыңыздар және OnClick оқиғасының өңдеуішін жазыңыздар:

Close;Қадам 10. Пішінге OnApply оқиға өңдеуіші бар FontDialog1 құрауышын

орналастырыңыздарMemo1.Font := FontDialog1.Font;

Қадам 11. Панелге &Font атпен батырманы орналастырыңыздар және OnClick оқиғасының өңдеуішін жазыңыздар:

With FontDialog1 do if Execute then Memo1.Font:=Font;

Қадам 12. Пішінге PrinterSetupDialog1 құрауышын орналастырыңыздар.Қадам 13. Панелге Printer Set&up атпен батырманы орналастырыңыздар

және OnClick оқиғасының өңдеуішін жазыңыздар:PrinterSetupDialog1.Execute;

Қадам 14. Пішінге PrintDialog1 құрауышын орналастырыңыздарҚадам 15. Панелге &Print атпен батырманы орналастырыңыздар және

OnClick оқиғасының өңдеуішін жазыңыздар:var FileOut : TextFile; k : Integer;begin

if PrintDialog1.Execute then beginAssignPrn(FileOut);Rewrite(FileOut);Printer.Canvas.Font:=Memo1.Font;for k:=0 to Memo1.Lines.Count-1 do Writeln(FileOut,Memo1.Lines[k]);CloseFile(FileOut)

end;end;

Принтермен жұмыс істеу процедурасы Printers модулінде орналасқан. Оның атын Unit1 модулінің interface бөлімінің uses тізімінде белгілеңіздер.

129

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 130-сі

Қадам 16. Панелге Fi&nd атпен батырманы орналастырыңыздар және OnClick оқиғасының өңдеуішін жазыңыздар:

FindDialog1.Execute;Қадам 17. Панелге &Replace атпен батырманы орналастырыңыздар және

OnClick оқиғасының өңдеуішін жазыңыздар:ReplaceDialog1.Execute;

Қадам 18. Пішінге FindDialog1 және ReplaceDialog1 құрауыштарын орнатыңыздар және Options тобының жалпы қасиеттеріне TRUE мәнін орнатыңыздар

frHideMachCase - “С учетом регистра” қосқышын тығып қояды,frHideWholeWord - “Только слово целиком” қосқышын тығып қояды,frHideUpDown - іздеу бағытын таңдау батырмаларын тығып қояды.

Қадам 19. FindDialog1 құрауышының OnFind оқиға өңдегішін анықтау:

Өңдеуіштің мәтіні Түсініктеме

var Buff,FT,P : PChar; BuffLen : Integer;

Көмекші айнымалылардың сипаттамасы.

Begin With Sender as TfindDialog do

begin

Процедураның басында төменде қолданылатын қасиеттер мен әдістер TFindDialog класының объектісі ретінде қарастырылатын Sender (оқиға көзі) объектісіне қатысты екені көрсетіледі.

BuffLen:=Memo1.GetTextLen+1; GetMem(Buff,BuffLen); Memo1.GetTextBuf(Buff,BuffLe

n);

Memo1 – дегі мәтін динамикалық Buff айнымалысына көшіріледі. Ол үшін BuffLen - ге мәтіннің ұзындығы кіргізіледі, Buff айнымалысына жадыда орын бөлінеді және көшіру орындалады.

GetMem(FT,Length(FindText)+1);

StrPCopy(FT,FindText);

Аналогиялық түрде FT динамикалық айнымалысына іздеу жолындағы мәтін көшіріледі.

P:=Buff+Memo1.SelStart+ Memo1.SelLe

ngth;

P айнымалысына іздеудің басқы адресі кіргізіледі.

P:=StrPos(P,FT); P айнымалысына іздеу үлгісіне сай келетін бағыныңқы жолдың адресі кіргізіледі.

If P=Nil then MessageBeep(0)

Егерадрес ноөлдік болса (үлгі табылған жоқ), онда дыбыстық дабыл генерацияланады.

else begin Memo1.SelStart:=P-Buff; Memo1.SelLength:=Length(Find

Әйтпесе, егер үлгі табылса, ол Memo1 – де ерекшеленеді.

130

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 131-сі

Text) end;

FreeMem(FT); FreeMem(Buff,BuffLen); end;end;

Процедура аяқталғанда динамикалық айнымалылар бүлінеді.

Қадам 20. ReplaceDialog1 құрауышы үшін OnFind өңдеуішін FindDialog1 құрауышының оқиғасы ретінде (Object Inspector терезесінде) көрсету керек (сондықтан бұл процедурада FindText іздеу жолы нақты FindDialog1 немесе ReplaceDialog1 құрауыштарынан емес, оқиға көзі Sender – ден алынады.).

Қадам 21. ReplaceDialog1 құрауышы үшін OnReplace оқиға өңдеуішінің мәтінін енгізу.

Өңдеуіштің мәтіні Түсініктеме

With ReplaceDialog1 doRepeat

Цикл ұйымдастырылады.

if Memo1.SelText<>FindText then

FindDialog1Find(Sender);

Егер ерекшеленген үзінді іздеу үлгісіне сай келмесе, онда FindDialog1 құрауышының OnFind оқиға өңдеуішін шақыру арқылы келесі сай келетін үзіндіні табу.

if Memo1.SelLength=0 then Break;

Егер үзінді табылмаса, онда цикл жабылады.

Memo1.SelText:=ReplaceText; Ерекшеленген үзіндіні айырбас үлгісіне айырбастау.

until not (frReplaceAll in Options);

Егер “Заменить все” режимі таңдалмаса, онда циклді тоқтату керек.

Өз беттеріңше : ( тәжірибелік жұмыстан 5 деген баға алам деушілер 3 және 6 пункттерін орындаулары қажет ) 1. Панельге келесі функцияларды орындауға мүмкіндік беретін батырманы қосу

Вариант Тапсырма

1, 6, 11, 16, 21, 26

Мәтінді жолдағы сөздер саны бойынша сұрыптау

2, 7, 12, 17, 22, 27

Жолдарды кері ретпен қою

3, 8, 13, 18, 23, 28

Мәтінді жолдағы цифрлар саны бойынша сұрыптау

131

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 132-сі

4, 9, 14, 19, 24, 29

Мәтінді жолдағы бос орын саны бойынша сұрыптау

5, 10, 15, 20, 25, 30

Жолдарды ереже бойынша қою 0-1, 2-3, 4-5,…

2. Панельге ‘proba.txt’ файлына келесілерді сақтауға мүмкіндік беретін батырманы қосу

Вариант Тапсырма

1, 7, 13, 19, 25 Соңғы K жолды

2, 8, 14, 20, 26 Жұп санды сөздерден тұратын жолды

3, 9, 15, 21, 27 L - ден басталатын K жолды

4, 10, 16, 22, 28

Тура К сөзден тұратын жолды

5, 11, 17, 23, 29

Бірдей сөздер кезігетін жолды

6, 12, 18, 24, 30

Барлық символдары өзгеше жолдарды

K және L сандары панелде орналасқан SpinEdit құрауышына енгізіледі (SpinEdit - тегі мәндер мәтіннің жағдайына сай келуі керек).

3. Панельге файлдан (файлдың аты диалог терезесінде анықталады) 2 – ші тапсырмада (варианта – сіздікінен кейінгі вариант) берілген жолдарды есептеуге мүмкіндік беретін батырманы қосу. Жолдар бар мәтінді ауыстырады немесе оған қосылып жазылады (басына, аяғына, N – ші жолдан кейін – қолданушының таңдауына қарай). Барлық баптау диалогтың уақытында негізгіні айырбастайтын диалог панельінде анықталады. Диалогты болдырмау мүмкіндігін де қарастырыңыздар.

4. Мәтіннің көрінісінің түсін таңдауға тағайындалған батырманы қосу.5. TMainMenu құрауышының көмегімен жобаның негізгі менюін ұйымдастыру

қажет, оған негізгі панельдің барлық батырмаларының функциясын саналы түрде орналастырыңыздар (Әрине, бұл функцияларды қайта жазбай, меню пунктінің OnClick оиғасының дайын өңдеуішін тағайындауға (атын қайта өзгерту) болады).

6. Тәжірибелік жұмыстан 5 деген баға алам деушілер, жобада қосымшаның 2 және 3 пункттерін іске асырулары қажет (төменнен қараңыздар).

Қосымша : 1. Memo - құрауышы қосымшамен жұмыс істегенде ғана қолдануға болатын

қасиеттердентұрады.

132

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 133-сі

Қасиет Мән

SelText

Мәтіннің ерекшеленген үзіндісі

SelLength

Ерекшеленген үзіндінің ұзындығы

SelStart

Ерекшеленген үзіндінің бірінші символының нөмірі, барлық мәтіннің басынан бастағанда. Егер ерекшелеу жоқ болса, онда тышқанның нұсқағышы мәтіннің ішінде

Modified

TRUE, егер мәтін өзгерсе.

2. Келесі бағдарламалық код Memo1 құрауышындағы тышқанның ңұсқағышының орынын анықтауға мүмкіндік береді:var X,Y : Integer;begin Y:=Memo1.Perform(EM_LINEFROMCHAR, Memo1.SelStart, 0); X:=Memo1.Perform(EM_LINEINDEX, Y, 0); Y:=Y+1; X:=Memo1.SelStart-X+1;end;

3. Memo1 редактіріндегі әрекетті болдырмау үшін келесі бағдарламалық кодты қолдануға болады:Memo1.Perform(EM_UNDO, 0, 0);

Әрекетті болдырмау мүмкіндігін тексеру үшін функцияның мәнін нөлмен салытыруға болады:Memo1.Perform(EM_CANUNDO, 0, 0);

133

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 134-сі

Практикалық жұмыс №10 «Бейнелерді құру»

1. Келесі түрдегі Y=F(x) функциясының графигін тұрғызыңыздар:0≤x<50 Y=050≤x<100 Y=x-50 100≤x<150 Y=50150≤x<200 Y=-(x-200)200≤x<250 Y=0Барлық өлшемдері пиксельмен берілген.Пішінге график тұрғызу үшін Image құрауышын орналастырыңыз. Пішінге екі батырманы орналастырыңыз «Операция» және «Закрыть». «Операция» батырмасына басқанда график тұрғызылады.

2. Rectangle әдісін қолданып, оған қажетті координаталарды бере отырып, тіктөртбұрыш сызыңыздар.Төмендегі қасиеттерді орнатыңыз:property Canvas.Pen – шекараларды сызу үшін.Property Canvas.Width – сызықтың қалыңдығын анықтайды, пиксельмен беріледі.property Canvas.Brush – оның ішкі облысын бояу үшін қолданылады.TextOut әдісінің көмегімен келесі хабарламаны шығарыңыз: «’Прямоугольник с координатами (’+IntToStr(x1)+’;’+IntToStr(y1)+’),(‘+IntToStr(x2)+’;’+IntToStr(y2)+’)’ ”»

3. RadioGroup құрауышын және TCanvas класының негізгі әдістерін қолдана отырып, геометриялық фигураларды сызатын қосымша құрыңыз (шеңбер, элиипс, бұрыштары дөңгелектенген тіктөртбұрыш, бұрыштары дөңгелектенген квадрат, квадрат және т.б.).

4. Алдыңғы тапсырманың бағдарламасын өзгертіңіз, геометриялық фигураны салу үшін Additional парағының Shape құрауышын қолданыңыз. property Shape – геометриялық фигураның түрін анықтайды.

134

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 135-сі

Samples парағының ColorGrid құрауышын қолдана отырып, геометриялық фигураның түрін өзгертіңіз. Shape1.Brush.Color:= ColorGrid1.ForeGroundColor;

5. Пішіннің канвасында сурет салуға мысал:Инспектор объектісінің Events парағынан пішін үшін келесі оқиғаларды табыңыздар: OnMouseDown, OnMouseMove, OnMouseUp. Бұл оқиғалар пішінге тышқанмен әсер еткенде қолданылады – тышқанды басу, тышқанның қозғалысы, сәйкесінше тышқанның батырмасын босату. Келесі оқиғаларға реакцияны өңдейтін процедурураларды жазыңыздар:procedure TForm1.Form1MouseDown(…)begin

isdown:=true;form1.canvas.moveto(x,y);

end;procedure Tform1.Form1MouseMove(…);begin

if isdown then Form1.Canvas.LineTo(X,Y);end;procedure Tform1.Form1MouseUp(…);begin

isdown:=false;end;

Осы бағдарламаны іске қосыңыз, сонда сіз пішіннің терезесінде тышқанның көмегімен сурет сала аласыз.

6. Image немесе PaintBox құрауыштарын қолдана отырып, көпбұрыштардың интерактивті салынуын көрсетіңіз (сызықтың тізбектей салынуын қолмен жүргізіңіздер).

7. Pixels қасиетін қолдана отырып функциясының графигін шығаратын бағдарламаны құрыңыз және талдаңыз. Графикті тұрғызу үшін барлық мүмкін аймақтар қолданылады, сонымен қатар бағдарламаның орындалу барысында терезенің өлшемі өзгеретін болса, онда график нақты өлшемді ескере отырып, қайтадан шығады.

135

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 136-сі

property Pixels – Canvas обектісінің пиксельінің екі өлшемді массиві. Мысалы,

Form1.Canvas.Pixels[10,10]:=clRed инструкциясы пішіннің бетіндегі нүктені қызыл түске

бояйды. event OnPaint пішін қандай да бір себепке байланысты

қайта бояуды талап еткенде өрбиді. event OnResize пішіннің өлшемі әрбір кез өзгергенде

өрбиді. Pixels массивінің өлшемі графикалық беттің өлшемімен

анықталады. Пішіннің графикалық бетінің өлшемі ClientWidth және ClientHeight қасиеттерінің мәндері арқылы анықталады, ал Image құрауышының графикалық бетінің өлшемі Width және Height қасиеттерінің мәні арқылы анықталады. Пішіннің жұмыс аймағының сол жақ жоғарғы бұрышына Pixels[0,0] элементі сәйкес келеді, ал оң жақ төменгі бұрышына - Pixels[ClientWidth-1,ClientHeight-1]. Графикті шығаруға арналған пішіннің аймағын толығымен алатындай масштабты қалай есептеуге болады?

Мысалы, қандай да бір функциясы нөлден 1000 – ға дейінгі мәндерді қабылдаса және оның графигін шығару үшін биіктігі 250 пиксель болатын аймақ қолданылатын болса, онда у осінің масштабы келесі формула бойынша орындалады: . Сол себепті мәніне облыстың кординатасы , болатын нүкте сай келеді, ал мәніне кординатасы

( ) болатын мән сәйкес келеді (ең үлкен бүтінге дейін дөңгелектенеді). unit Grfunc_1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls,

Forms, Dialogs;type TForm1 = class(TForm) procedure FormPaint(Sender: TObject); procedure FormResize(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;Implementation

136

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 137-сі

{$R *.DFM}

procedure Gr0fFunc; {Функцияның графигін тұрғызу}var x1,x2:real; // функция аргументінің өзгеру шекарасы y1,y2:real; // функция мәнінің өзгеру шекарасы x:real; //функция аргументі y:real; // х нүктесіндегі функцияның мәні dx:real; // аргументтің ауысуы l,b:integer; // графикті шығару аймағының сол жақ төменгі бұрышы w,h:integer; // графикті шығару аймағының биіктігі мен ені mx,my:real; // X және Y осьтері бойынша координаталар x0,y0:integer; // нүкте - координата басы

{Графикті тұрғызатын функция}function f(x:real):real;begin f:=2*sin(x)*exp(x/5);end;

begin// Графикті шығару аймағыl:=10; // Х – сол жақ жоғарғы бұрыштың координатасыb:=Form1.ClientHeight-20; // Y – сол жақ жоғарғы бұрыштың координатасыh:=Form1.ClientHeight-40; // биіктігіw:=Form1.ClientWidth-40; // ені

x1:=0; //аргумент диапазонының төменгі шекарасыx2:=25; //аргумент диапазонының төменгі шекарасыdx:=0.01; // аргумент қадамы {[x1,x2] бөлігіндегі функцияның максимальды және минимальды мәндерін табайық }y1:=f(x1); // минимумy2:=f(x1); // максимумx:=x1;repeat y:=f(x); if y<y1 then y1:=y; if y>y2 then y2:=y; x:=x+dx;until (x>=x2);my:=h/abs(y2-y1); // Y осі бойынша масштабmx:=w/abs(x2-x1); // X осі бойынша масштаб {остер} Gr0fFunc процедурасы арқылы тұрғызылған график

137

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 138-сі

x0:=1;y0:=b-abs(Round(y1*my));with form1.Canvas dobegin // оси MoveTo(l,b); LineTo(l,b-h); MoveTo(x0,y0); LineTo(x0+w,y0); TextOut(l+5,b-h,FloatToStrF(y2,ffGeneral,6,3)); TextOut(l+5,b,FloatToStrF(y1,ffGeneral,6,3)); // построение графика x:=x1; repeat y:=f(x); Form1.Canvas.Pixels[x0+Round(x*mx),y0-Round(y*my)]:=clRed; x:=x+dx; until (x>=x2); end; end;

procedure TForm1.FormPaint(Sender: TObject);begin Gr0fFunc;end;

procedure TForm1.FormResize(Sender: TObject);begin // очистить форму with form1 do Canvas.FillRect(Rect(0,0,ClientWidth,ClientHeight)); Gr0fFunc;end;end.

8. №7 тапсырманың бағдарламасына басқа функцияның графигі тұрғызылатындай өзгеріс енгізіңіздер. Бағдарламаны барлық диапазонда тек оң немесе тек теріс мәндер қабылдайтын функцияның графигін тұрғызатындай етіп өзгертіңіздер.

9. №1 тапсырмасындағы қосымша сияқты синус функциясының графигін тұрғызатын қосымша құрыңыздар.

10. Бағдарлама терезесінің шекарасымен сол жақтан оң жағына қарай бағытта жылжитын шеңбердің қозғалысын көрсететін бағдарлама құрыңыздар (TCanvas класының әдістерін қолданыңыздар).

138

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 139-сі

Суреттің орын ауыстыруын қамтамасыз ету өте қарапайым түрде ұйымдастырылады: ең алдымен суретті шығару керек, содан соң бірнеше уақыттан кейін оны өшіріп, қайта шығару керек, бірақ ол алдыңғы орынына қарағанда бірнеше ара қашықтықтан кейін шығады. Шеңберді қайта - қайта салуды ұйымдастыратын процедураны периодты түрде шақырып тұру үшін пішінге System парағынан Timer көрнекі емес құрауышын орналастырыңыздар.

139

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 140-сі

3 КУРСТЫҚ ЖҰМЫС

Бұл пәннің типтік бағдарламасы бойынша курстық жұмыс қарастырылмаған

140

ПОӘК 042-18-11.1.20.84/01-2013 №1 баспа 26.08.2013 ж. 141 беттің 141-сі

ӘДЕБИЕТТЕР ТІЗІМІ

Негізгі әдебиеттер тізімі

1. Бекбаева Р.С. Delphi ортасында бағдарламалау. Әдістемелік құрал. Шәкәрім атындағы СМУ, 2009

2. Кандзюба С.П. Delphi 6\7. Базы данных и приложения. Лекции и упражнения. Спб.: ООО «ДиаСофтЮП», 2002. –576с.

3. Архангельский А.Я. Object Pascal в Delphi. -М., 2002г. 4. Гофман В.Э., Хомоненко А.Д. Delphi 5. –СПб.: БХВ – Санкт-Петербург,

1999. – 800 с.:ил.5. Дарахвелидзе П.Г., Марков Е.П., Котенок О.А. Программирование в

Delphi 5. –СПб.: БХВ-Питербург, 2001.6. Епанешников А.М., Епанешников В.А. Delphi 5. Язык Object Pascal. –М:

«Диалог –МИФИ» 20007. Епанешников А.М., Епанешников В.А. Программирование в среде

Delphi: Часть 3. Проектирование программ. –М: «Диалог –МИФИ» 19988. Культин Н. Delphi 6. Программирование на языке Object Pascal.

Қосымша әдебиеттер тізімі

1. Дарахвелидзе П.Г., Марков Е.П. Delphi-среда визуального программирования. Спб.: BHV - Санкт-Петербург, 1996г.

2. Архангельский А.Я. Приемы программирования в Delphi. –М.: ООО «Бином-Пресс», 2003 г. –784 с.

3. Джон Матчо, Дэвид Р. Фолкнер. Delphi на примерах. –М.: БИНОМ, 1995г.

4. Орлик С.В. Секреты на примерах: –М.: Восточная книжная компания, 1996г.

5. Конопка Рэй Создание оригинальных компонент в среде Delphi. Киев: DiaSoft Ltd, 1996г. -512с.

1. Епанешников А.М., Епанешников В.А. Программирование в среде Delphi: Часть 4. Работа с базами данных. Организация справочной системы. –М: «Диалог –МИФИ» 1998

6. Пономарев В.А. COM и ActiveX в Delphi. –СПб.: БХВ-Питербург, 2001.7. Елманов Н.З., Трепалин С.В. Delphi 4. Технология COM, OLE, ActiveX,

Automation, MIDAS, Microsoft Transaction Server. –М.: Диалог-МИФИ, 1999 –320с.

8. Федоров А., Елманов Н. ADO в Delphi. Пер. с англ. –СПб.: БХВ-Питербург, 2002.

141