Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практика_Delphi.doc
Скачиваний:
11
Добавлен:
25.08.2019
Размер:
2.92 Mб
Скачать

Лабораторна робота № 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.