- •Тема 1. Поняття про об’єктно-орієнтоване програмування. Поняття про об’єктно-орієнтоване програмування
- •Інструмент прискореної розробки програм
- •Список файлів проекту.
- •Деякі важливі принципи візуального програмування.
- •Вікна інспектора об'єктів, форми, модуля.
- •Лабораторна робота №1 «Робота в середовищі Delphi»
- •Тема 2. Основи об’єктно-орієнтованого програмування.
- •Лабораторна робота №2 «Створення типового вікна Windows-додатку. Властивості об’єктів форми.»
- •Теоретичні відомості:
- •I. Властивості об’єкту Форма.
- •Теоретичні питання:
- •Тема 3. Особливості ооп: основні концепції
- •Лабораторна робота №3 Робота з формою та компонентами Panel, Label, Edit, Button.
- •Лабораторна робота №4 Робота над проектом «Альбом картинок» (компонент Image вкладки Additional)
- •Тема 4. Структура програми Структура програми складається з:
- •Структура проекту
- •Структура модуля
- •Елементи програми
- •Елементи мови Алфавіт
- •Лексеми
- •Теоретичні питання
- •Лабораторна робота №5 Робота над проектом «Текстовий редактор»
- •Тема 5. Типи даних. Введення та виведення числових даних. Функції перетворення. Математичні функції
- •Прості типи
- •Порядкові типи
- •Цілі типи
- •Введення та виведення числових даних
- •Допомога 1.
- •Допомога 2.
- •Лабораторна робота №6. «Створення програм лінійної структури. Створення програми «Калькулятор»
- •В аріант завдання для вибору:
- •Тема 6. Оператори мови Delphi
- •Лабораторна робота №7 Створення найпростішого Windows-Додатка в Delphi, з використанням умовного оператора та оператора вибору.
- •1 Спосіб розв’язку квадратного рівняння
- •2 Спосіб розв’язання квадратного рівняння
- •Створити додатки за вказаним варіантом та записати блок-схему алгоритму:
- •Лабораторна робота № 8 «Створення програм з використанням операторів циклів»
- •Лабораторна робота № 9 «Розробка графічного інтерфейсу програми. Основні керуючі елементи.»
- •1. Програмування об’єкту – перемикач (tRadioButton).
- •Програмування об’єкту – прапорець (tCheckBox).
- •Тема 7. Масиви
- •Лабораторна робота № 10 «Структуровані типи даних»
- •Тема 8. Робота з файлами
- •Лабораторна робота №11 «Файлові типи даних»
- •Тема 9. Допоміжні алгоритми
- •Лабораторна робота № 12 «Створення програм з використанням процедур та функцій»
- •Тема 10. Работа з графікою та мультимедіа
- •Реалізація мультимедійних технологій. Відтворення відеокліпів
- •Внимание!
- •Лабораторна робота № 13 «Створення проекту «Побудова графіка функцій»»
- •Тема 11. Створення анімації в Delphi
- •Лабораторна робота № 14 «Створення проекту «Графічний конструктор»»
- •Лабораторна робота № 15 Створення багатовіконного проекту «Тест з географії»
- •Форма «Тестування» — модуль f_Test
- •Форма «Результат» — модуль fRes
- •Форма «Домопога» — модуль fInstr unit f__lnstr;
- •Тема 12. Організація роботи з таблицями та базами даних. Лабораторна робота №16. Розробка проекту «Рейтинг країн за результатами олімпійських змагань»
- •Лабораторна робота № 17 Створення проекту «Довідник по країнах»
- •Лабораторна робота № 18 Створення проекту «Телефонна книга»
- •Лабораторна робота № 19 Створення проекту «Довідник по тваринах»
- •Лабораторна робота № 20 Створення довідкової системи
- •Хід роботи
Лабораторна робота № 15 Створення багатовіконного проекту «Тест з географії»
Мета: 1. Навчитися створювати проекти з декількох форм.
Завдання. Створити програму-тест з географії. Проект має складатися з кількох форм: титульної форми з головним меню тесту, форми тестування, форми допомоги. Після закінчення тестування вивести кількість правильних відповідей.
Аналіз проекту. Розробка багатовіконного проекту. Середовище Delphi забезпечує програмістів такими засобами, які дають змогу швидко створити меню користувача і запрограмувати виклик різних вікон залежно від вибору опцій меню.
Це забезпечується розміщенням на формі компонента MaimMenu (вкладка Standart) — головне меню програми. Цей компонент дає змогу створювати складні ієрархічні меню.
В проекті використовуються нові компоненти Delphi:
Memo1 (вкладка Standart) — багаторядкове текстове поле, яке можна редагувати;
RadioGroup (панель Standart) — група перемикачів, яка містить спеціальну властивість для обслуговування кількох пов'язаних за змістом компонентів.
Алгоритм розробки проекту
1. Створити папку D:\Delphi\Pract_ 15.
2. Створити титульну форму, дати їй назву «Тест з географії». Розмістити на формі компоненти Label1,Label2, Button1, Image1 (рис. 14).
3. Кнопці «Вихід» поставити у відповідність обробку події OnClick зі значенням Close;
4. Створити меню за допомогою компонента MainMenu, який знаходиться на вкладці Standart. Розміщувати значок цього компонента можна в довільному місці форми. Як меню цей компонент буде відкриватися під час виконання програми. Для занесення в меню необхідних режимів необхідно двічі клікнути на піктограмі компонента MainMenu1. З'явиться вікно із заголовком Form 1.MainMenu 1 (рис. 15).
Встановити значення властивості Caption для першого режиму меню — «Тестування» та натиснути Enter. Перейти до чистого поля праворуч від тільки-но створеної опції. Присвоїти властивості Caption цього поля значення — «Результат». У третє поле занести — «Допомога». Кожна опція режиму меню може містити підопції. Для створення підопцій необхідно клікнути лівою кнопкою миші на рядку, що нижче від опції, і ввести першу підопцію. Продовжувати введення доти, доки не буде введено весь список підрежимів.
У назві Caption можна вказувати символ «&» перед тим символом, який буде використовуватись для швидкого вибору цього режиму меню. Отже, якщо буде введено «&Тестування», то цей режим меню може бути обрано і за допомогою комбінації клавіш Alt + Т.
5. Титульна форма готова. Зберегти форму під ім'ям, наприклад, FTitul.pas, а проект — Prtest.dpr.
6. Запустити програму на виконання, перевірити наявність меню на формі.
7. Згорнути вікно форми «Тест з географії» та вікно програмного коду, яке містить поки що одну вкладку F_Titul.pas.
8. Запрограмувати режими меню «Тестування», «Результат», «Допомога». Для цього створити три нові форми відповідно для кожного режиму меню.
9. Створити форму «Тестування». В головному меню середовища Delphi вибрати File, New, New Items. Відкриється вікно New Items (Нові елементи), в якому перейти на вкладку Forms (Форми). Ця вкладка містить набір стандартних форм різного вигляду (шаблонів). Вибрати тип форми Tabbed Page (форма із вкладками). З'явиться стандартне вікно TabbedNotebook Dialog (рис. 16).
Це вікно вже містить три вкладки, що перекривають одна одну (компонент PageControl з палітри компонентів Common Controls), та три спеціальні кнопки. Кожна вкладка може містити свій набір розміщених на ній компонентів. Для того, щоб додати ще одну вкладку, треба на цьому об'єкті викликати контекстне меню правою кнопкою мишки та вибрати New Page (нова сторінка). Для того, щоб активізувати якусь вкладку, треба у вікні Tree Objects (Дерево об'єктів) вибрати необхідну вкладку і вже потім розміщувати на ній нові об'єкти або міняти властивості.
10. Оскільки створена форма буде використовуватись для тестування, то вилучити всі кнопки і розмістити одну кнопку Buttun1, яку назвати «Закінчення тестування».
11. Змінити назву створеної форми із вкладками. Для цього вибрати у вікні Tree Objects (Дерево об'єктів) об'єкт PageDlg, та встановити для нього такі властивості (табл. 12).
Таблиця 12
Компонент |
Вкладка вікна Object Inspector |
Properties/Events |
Значення властивості/обробка події (тіло процедури обробки події) |
PageDlg |
Properties |
Caption |
Тестування |
Name |
U_test |
Пояснення. На ім'я U_test можна буде звернутися до цієї форми з головної (титульної) форми.
12. Зробити на формі «Тестування» п'ять вкладок (рис. 17) , надавши їхнім властивостям Caption відповідні значення «Питання № 1», «Питання № 2»,..., «Питання № 5».
Далі на першій вкладці розмістити об'єкт RadioGroup (панель Standart). До заголовка об'єкта RadioGroup (властивість Caption) занести перше з питань (список питань див. нижче).
Для розміщення перемикачів в об єкті RadioGroup треба:
активізувати цей об'єкт;
у вікні Інспектор об'єктів клікнути двічі праворуч від властивості Items (або один раз на кнопці з трьома точками);
у вікні вбудованого редактора, що відкриється, набрати список варіантів відповідей (кожен в окремому рядку), після цього, натиснувши ОК, вийти з редактора списку;
за допомогою властивості Orientation встановити розташування (горизонтальне або вертикальне) для перемикачів у полі об'єкта RadioGroup;
встановити оптимальний розмір об'єкта RadioGroup,
Виконати аналогічні дії і для інших чотирьої вкладок.
Список запитань з географи та варіанти відповідей на них:
1. За початок відліку географічної довготи місця прийнято:
екватор;
меридіан 180°;
нульовий меридіан;
Північний полюс;
2. Лінії, що з'єднують точки з однаковим атмосферним тиском, називаються:
горизонталями;
ізометрами;
ізобарами;
ізогієтами;
3. Артезіанськими називаються такі води:
ґрунтові;
міжпластові ненапорні;
міжпластові напорні;
глибоководні;
4. Основним географічним наслідком кулеподібної форми Землі є:
зміна дня та ночі;
зміна пір року;
широтна зональність;
висотна поясність;
5. Утворення поясу низького амосферного тиску відбувається через:
низьку температуру повітря;
високу температуру повітря;
циклони;
антициклони.
13. Запрограмувати кнопку «Закінчення тестування» (подія OnClick): заборонити вихід з вікна «Тестування» за цією кнопкою, якщо не на всі запитання тесту дано відповіді. У цьому випадку запропонувати повернутися знову на питання без обраної відповіді. Якщо на всі запитання подано відповіді, підрахувати кількість правильних відповідей та закрити це вікно (якщо в компоненті RadioGroup1 не обрано жодного перемикача, то його властивість Itemlndex дорівнює —1, якщо якийсь перемикач включено, то ця властивість містить його номер 0 або 1, або 2 ...):
procedure TU_Test.Button1Click(Sender: TObject);
Label fin;
begin
if (RadioGroup1.Itemlndex=-1) then
begin
ShowMes sage( 'Поверніться до питання №1' ) ; U_test.PageControl1.ActivePage:=U_test.TabSheet1;
goto fin
end;
if (RadioGroup2.Itemlndex=-1) then
begin
ShowMessage('Поверніться до питання №2'); U_test.PageControll.ActivePage:=U__test.TabSheet2;
goto fin
end;
if (RadioGroup3.Itemlndex=-1) then
begin
ShowMessage('Поверніться до питання №3'); U_test.PageControll.ActivePage:=U_test.TabSheet3;
goto fin
end;
if (RadioGroup4.Itemlndex=-1) then
begin
ShowMessage('Поверніться до питання №4'); U_test.PageControll.ActivePage:=U_test.TabSheet4;
goto fin
end;
if (RadioGroup5.Itemlndex=-1) then
begin
ShowMessage(‘Поверніться до питання №5'); U_test.PageControll.ActivePage:=U_test.TabSheet5;
goto fin
end;
ball : =otv [ 1 , RadioGroup1 . Itemlndex]+otv[2,RadioGroup2.ItemIndex] +
otv[3,RadioGroup3.Itemlndex]+otv[4,RadioGroup4.Itemlndex]+otv[5,RadioGroup5.Itemlndex];
{масив otv — таблиця правильних відповідей - описано заздалегідь в розділі const, див. лістинг програми}
Close;
fin:
end;
14. Зберегти (File, Save) створену форму «Тестування» під ім'ям F_Test.pas (зверніть увагу, що тепер вікно програмного коду містить дві вкладки FTest та F Titul).
15. Зробити перехід з титульної форми «Тест з географії» на форму «Тестування» (щойно створену). Для цього розгорнути титульну форму або вибрати її вікно зі списку вікон (Alt+0). Двічі клікнути на піктограмі об'єкта MainMenu1, двічі клікнути на опції «Тестування» і занести у процедуру (опрацювання події OnCIick) такі оператори:
U_Test.RadioGroup1.Itemlndex:=-1; {Підготовка компонента RadioGroup1 для нової роботи з перемикачами}
U_Test.RadioGroup2.Itemlndex:=-1; {Підготовка компонента RadioGroup2 для нової роботи з перемикачами}
U_Test.RadioGroup3.Itemlndex:=-l; {Підготовка компонента RadioGroup3 для нової роботи з перемикачами}
U_Test.RadioGroup4.Itemlndex:=-l; {Підготовка компонента RadioGroup4 для нової роботи З перемикачами}
U_Test.RadioGroup5.Itemlndex:=-l; {Підготовка компонента RadioGroup5 для нової роботи з перемикачами}
U_Test.PageControll.ActivePage:=U_Test.TabSheetl; {активізація першої вкладки форми «Тестування»} ball:=0; U_Test.ShowModal; {завантаження форми «Тестування»}
Пояснення. Для забезпечення зв'язку головного модуля F_Titul з модулем тестування F_Test треба описати в модулі F_Titul зовнішнє ім'я F_Test, додавши його до блоку реалізації (implementation):Uses F_Test;
Зауваження. Оскільки до змінної ball (кількість правильних відповідей), яка обнуляється в цій процедурі, буде звертання з інших модулів програми, то її треба описати як глобальну змінну в головному модулі F_Titul.
16. Зберегти все (File, Save All).
17. Запустити програму на виконання, перевірити роботу режиму меню «Тестування».
18. Створити форму «Допомога», виконавши дії:
створити нову форму з вкладками Tabbed Page, вилучити кнопки ОК та Help, кнопку Cancel перейменувати на «Вихід»;
дати заголовок формі — «Допомога» (об'єкт PageDlg, властивість Caption);
дати ім'я формі — U_Instr (об'єкт PageDlg, властивість Name);
залишити на формі дві вкладки, дати їм відповідно заголовки: «Правила роботи з тестом» та «Про програму»;
активізувати першу вкладку, розмістити на ній компонент Memol (текстове поле, панель компонентів Standart), вибрати для цього компонента властивість Lines, клікнути на кнопці з трьома точками і у завантаженому редакторі набрати інструкцію щодо роботи з тестом, завершитироботу з редактором кнопкою ОК;
аналогічно заповнити текстом і вкладку «Про програму». Зауваження. Для того, щоб компонент Memol не виділявся на формі,
необхідно виконати наступні дії (табл. 13).
Таблиця 13
Компонент |
Вкладка вікна Object Inspector |
Properties/Events |
Значення властивості/обробка події (тіло процедури обробки події) |
Memo1 |
Properties |
Color |
clBtnFase (колір збігається з кольором форми) |
Ctl3D |
False (відміна тривимірного ефекту об’єкта) |
||
BorderStyle |
bsNone (відміна рамки) |
19. Зберегти (File/ Save) форму у файлі з ім'ям F_Instr (зверніть увагу, що тепер вікно програмного коду містить три вкладки F_Titul, F_Test та FInstr).
20. Зробити перехід з титульної форми «Тест з географії» на форму «Допомога» (щойно створену). Для цього розгорнути титульну форму, активізувати компонент MainMenu1, запрограмувати вибір опції «Допомога» (процедура з опрацювання події OnClick для кнопки меню «Допомога»):
procedure TForm1.N3Click(Sender: TObject);
begin
U_Instr.ShowModal;
end;
He забути описати в модулі F_Titul зовнішнє ім'я F_Instr, включивши його до блоку реалізації (implementation): Uses F_Instr;
21. Зберегти все (File, Save AH).
22. Запустити програму на виконання, перевірити роботу режиму меню «Допомога».
23. Зробити обробку результату та виведення кількості правильних відповідей в окремому вікні. Для цього:
створити нову форму: File, New, Form;
встановити значення заголовка Caption="Результат";
дати ім'я формі (властивість Name) U_Res;
розмістити на формі компонент Label 1 з такими властивостями (табл. 14).
Таблиця 14
Компонент |
Вкладка вікна Object Inspector |
Properties/Events |
Значення властивості/обробка події (тіло процедури обробки події) |
Label1 |
Properties |
Autosize |
False |
WordWrap |
True |
||
Aligment |
taCenter |
||
Caption |
<Чисте поле> |
24. Зберегти (File/ Save) форму у файл з ім'ям F_Res (зверніть увагу, що тепер вікно програмного коду містить чотири вкладки F_Titul, F_Test, F_Instr та F_Res).
25. Зробити перехід з титульної форми «Тест з географії» на форму «Результат» (щойно створену). Для цього розгорнути титульну форму, активізувати компонент MainMenu1, запрограмувати вибір опції «Результат» (процедура з опрацювання події OnClick для кнопки меню «Результат»):
procedure TForm1.N2Click(Sender: TObject);
begin
U_Res.Label1.Caption: = 'У Вас правильних відповідей ‘+IntToStr(ball);
U_Res.ShowModal;
end;
He забути описати в модулі F_Titul зовнішнє ім'я F_Res, додавши його до блоку реалізації (implementation): Uses F_Res;
26. Зберегти все (File, Save All).
27. Запустити програму на виконання, перевірити правильність роботи всіх режимів меню титульної форми.
Завдання для самостійного виконання
1. Зробити так, щоб на початку роботи програми з'являвся запит про ім'я користувача, яке потім виводилось би на екран після повідомлення результату.
Підказка. Описати в модулі F_Titul глобальну змінну name та додати до процедури TForm1.N1Click (опрацювання режиму меню «Тестування») оператор:
name:=InputBox('Початок тестування' ,'Введіть своє ім'я латинськими літерами','');
До процедури TForm1.N2Click (опрацювання режиму меню «Результат») додати оператор:
U_Res.Label1.Caption:=name+', у Вас правильних відповідей ‘ +IntToStr(ball);
Лістинг програми:
Титульна форма «Тест з географії» міститься у модулі FTitul
unit F_Titul;
interface
uses Windows,Messages, SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs, QStdCtrls, QExtCtrls,F_Test,F_Instr, F_Res,QMenus, QTypes;
type
private, public
end;
var Form1: TForm1;
name:string;
implementation {$R *.xfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Close; end;
procedure TForm1.N3Click(Sender: TObject);
begin
U_Instr.ShowModal; end;
procedure TForm1.N1Click(Sender: TObject);
begin
name:=InputBox(‘Початок тестування', ' Введіть своє ім''я латинськими літерами','');
U_Test.RadioGroup1.Itemlndex:=-1;
U_Test.RadioGroup2.Itemlndex:=-1;
U_Test.RadioGroup3.Itemlndex:=-1;
U_Test.RadioGroup4.Itemlndex: =-1 ;
U_Test.RadioGroup5.Itemlndex:=-1;
U_Test.PageControll.ActivePage:=U_Test.TabSheetl;
ball:=0; U_Test.ShowModal; end;
procedure TForm1.N2Click(Sender: TObject);
begin
U_Res.Label1.Caption:=name+', у Вас правильних відповідей '+IntToStr(ball); U_res.ShowModal;
end; end.