Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторна робота №7

.pdf
Скачиваний:
8
Добавлен:
15.02.2015
Размер:
464.28 Кб
Скачать

Лабораторна робота №7

Тема: Програмування з використанням компоненту ListBox на основі

властивостей Items і ItemIndex.

Мета: Отримання практичних навиків використання компоненту ListBox

палітри компонентів Standart на основі властивостей Items і ItemIndex.

Теоретичні відомості

Змінна — це область пам'яті, в якій знаходяться дані, якими оперує програма. Коли програма маніпулює з даними, вона, фактично, оперує вмістом елементів пам'яті, тобто змінними.

Щоб програма могла звернутися до змінної (області пам'яті), наприклад,

для того, щоб отримати початкові дані для розрахунку по формулі або зберегти результат, змінна повинна мати ім'я. Ім'я змінній дає програміст.

Як ім'я змінної можна використовувати послідовність з букв латинського алфавіту, цифр і деяких спеціальних символів. Першим символом в імені змінної повинна бути буква. Пропуск в імені змінної використовувати не можна.

Слід звернути увагу на те, що компілятор мови Delphi не розрізняє прописні і рядкові букви в іменах змінних, тому імена SUMMA, Summa і summa

позначають одну і ту ж змінну.

Бажано, щоб ім'я змінної було логічно пов'язане з її призначенням.

У мові Delphi кожна змінна перед використанням повинна бути оголошена. За допомогою оголошення встановлюється не тільки факт існування змінної, але і задається її тип, чим вказується і діапазон допустимих значень.

Змінна оголошується в розділі оголошення змінних var.

У загальному вигляді інструкція оголошення зміної виглядає так:

var

Ім'я : тип;

де:

ім'я ім'я змінної;

1

тип тип даних, для зберігання яких призначена змінна.

Приклад:

var

а : Real;

b : Real;

i : Integer;

Уприведених прикладах оголошені дві змінні типу real і одна змінна типу integer.

Утексті програми оголошення кожної змінної, як правило, поміщають на окремому рядку.

Якщо в програмі є декілька змінних, що відносяться до одного типу, то імена цих змінних можна перерахувати в одному рядку через кому, а тип змінних вказати після імені останньої змінної через двокрапку, наприклад:

Var

а,b,с : Integer;

x1,x2 : Real;

Компонент Delphi ListBox - це компонент, що використовується для зберігання і обробки текстової інформації. Значок компоненту ListBox

знаходиться на вкладці Standard (рис. 7.1).

Рисунок 7.1 Компонент ListBox на вкладці Standart

Кожен рядок Delphi ListBox зберігає рядок даних в форматі String.

Вигляд ListBox на етапі конструювання та на формі в робочій програмі (Рис.7.2)

2

Компонент Delphi ListBox

Компонент Delphi ListBox

на этапе конструювання

на формі в робочій програмі

 

Рисунок 7.2

Компонент ListBox – це масив рядків. ListBox може завантажувати дані з диску, і зберігати інформацію в файл. Також ListBox може сортувати рядки.

Доступ до рядків надає властивість Items цього компоненту. У відповідності з цим звернення до рядка з номером i відбувається наступним чином:

ListBox1.Items[i-1]; // Минус один, так як нумерація рядків

 

//в компоненті починається з нуля

Таблиця 7.1. Властивості компоненту ListBox

 

 

Властивість

Визначає

 

 

Name

Ім'я компоненту. У програмі використовується для доступу до

 

властивостей компоненту

Items

Елементи списку

ItemIndex

Номер вибраного елементу списку. Номер першого елементу

 

списку рівний нулю

Left

Відстань від лівої межі списку до лівої межі форми

Top

Відстань від верхньої межі списку до верхньої межі форми

Height

Висоту поля списку

Width

Ширину поля списку

Font

Шрифт, що використовується для відображення елементів

 

списку

Parent-Font

Ознака спадкоємства властивостей шрифту батьківської форми

Найбільший інтерес представляють властивості Items і ItemIndex.

Властивість Items містить елементи списку.

3

Властивість ItemIndex задає номер вибраного елементу списку. Якщо жоден з елементів не вибраний, то значення властивості рівне мінус одиниці.

Список може бути сформований під час створення форми або під час роботи програми.

Для формування списку під час створення форми треба у вікні Object Inspector вибрати властивість Items і клацнути на кнопці запуску редактора списку рядків (рис. 7.3).

Рисунок 7.3. Кнопка запуску редактора списку

У діалоговому вікні String List Editor, що відкриється потрібно ввести список, набираючи кожен елемент списку в окремому рядку. Після введення чергового елементу списку для переходу до нового рядка необхідно натиснути клавішу <Enter>. Після введення останнього елементу клавішу <Enter>

натискати не треба. Завершивши введення списку, слід клацнути на кнопці ОК.

Постановка задачі

Створіть програму, що виконує наступні дії. Після запуску програми з’являється зображення аналогічне тому, що зображено на рисунку 7.1.

4

Рисунок 7.1

Користувач, переміщуючись за допомогою клавіш-стрілок по списку

«Фізична величина» обирає любе значення, натиснув клавішу «Enter». Потім він переходить в список «Назва величини» і обирає відповідну назву фізичної величини.

Якщо обрано правильну назву величини, то під словом «Оцінка» з’являється репліка «Правильно», якщо вибрано неправильне слово, то −

«Помилка». Кількість спроб відповіді відповідає кількості записів у списку

«Фізична величина».

Новим в цій роботі є:

Забезпечення взаємодії двух списків ListBox (вкладка палітри компонентів Standard) на основі властивостей Items і ItemIndex,

Створення багаторядкових надписів в компоненті Label.

План розробки програми

1.Відкрийте новий проект.

2.Розмістіть в формі екземпляри компонент у відповідності з рис.7.2 і

привласніть заголовки міткам. Зверніть увагу, що заголовки міток «Фізична величина» і «Назва величини» складаються з двох рядків і отцентровані.

5

 

 

Рисунок 7.2

 

Для виведення багаторядкових надписів в Label задайте:

 

 

 

 

 

 

Виділений

Вкладка

Ім’я властивості/ Ім’я

 

Значення/Дія

об’єкт

вікна

події

 

 

 

Object

 

 

 

 

Inspector

 

 

 

Label1

Properties

AutoSize (зміна

 

False

 

 

розміру в залежності

 

 

 

 

від текста в Caption)

 

 

 

 

WordWrap (розрив

 

True

 

 

рядка)

 

 

 

 

Height Width

 

Встановити потрібні

 

 

 

 

розміри

 

 

Alignment

 

taCenter

 

 

(вирівнювання тексту)

 

 

3.Збережіть код програми і проект під іменами, наприклад, Unit7.pas і Pr7.dpr.

4.Виділіть ListBox1, справа від властивості Items клацніть на кнопці з трьома крапками. В вікні влаштованого редактора String List Editor, що з’явилося введіть фізичні величини, кожну на новому рядку: «Ватт», «Ом», «Вольт», «Ампер».

Збережіть набраний текст під ім’ям Fiz_1.txt. Для цього клацніть правою кнопкою миші і оберіть режим Save. Для вихода з влаштованого редактора клацніть на кнопку «OK» (див. Проект «Довідник»).

6

5.Оберіть ListBox2 і зробіть з ним аналогічну роботу, введіть назви фізичних величин: «Напруга», «Опір», «Сила струму», «Потужність».

Збережіть набраний текст під ім’ям Fiz_2.txt.

6.Вставте в розділі реалізації після ключового слова implementation

об’явлення змінних:

Var Num1,

// номер вибраного запису в першому вікні

Num2,

// номер вибраного запису в другому вікні

CountR,

// кількість правильних відповідей

CountC, // загальна кількість відповідей

CountN

// загальна кількість питань

теста

 

:Byte;

7.Створіть наступні процедури обробки подій:

Виділений

Ім’я події

Дія

об’єкт

 

 

 

 

Form1

OnCreate

CountN:=4; // кількість записів

 

 

CountC:=0;

ListBox1

OnKeyPress

If key=#13 then

 

 

Num1:=ListBox1.ItemIndex;

 

 

ActiveControl:=ListBox2;

 

 

Коментар

 

 

Запам’ятовує в змінній Num1 номер обраного запису в

 

 

першому вікні.

 

 

Робить активним об’єкт ListBox2, тобто після

 

 

закінчення введення фокус перейде в вікно введення

 

 

ListBox2.

ListBox2

OnKeyPress

If key=#13 then

 

 

Begin

 

 

case ListBox2.ItemIndex of

 

 

0: Num2:= 2;

 

 

1: Num2:= 1;

 

 

2: Num2:= 3;

 

 

3: Num2:= 0;

 

 

end;

 

 

if Num1=Num2 then begin

 

 

Label4.Caption:='Правильно!';

 

 

CountR:=CountR+1

 

 

End

 

 

else Form1.Label4.Caption:='Помилка!';

7

CountC:=CountC+1;

if CountC=CountN then ShowMessage('Тест закінчено.

Бали : '+ FloatToStr(CountR/CountN * 5 )+' (правильних

відповідей: '+IntToStr(CountR)+')'); ListBox2.Itemindex:=-1; ActiveControl:=ListBox1;

end;

Коментар

Якщо обраний запис в другому вікні, то його номер порівнюється на відповідність з раніше обраним номером першого вікна (оператор Case). В залежності від результата порівняння видається повідомлення про правильність відповіді, а потім перевіряється чи на всі питання отримано відповідь.

В кінці змінюється властивість ListBox2.ItemIndex для того, щоб вибрати виділення обраного запису в другому вікні і потім робить активним об’єкт ListBox1, тобто після закінчення введення фокус перейде в вікно введення ListBox1.

8.Збережіть проект остаточно, запустіть і протестуйте його.

Завдання для самостійного виконання

1.Списки ListBox1 і ListBox2 зробіть почергово доступними після натиснення

клавіши Enter.

Підказка. Встановіть значення False властивості Enabled компоненту ListBox2,

а в процедуру KeyPressed, що відноситься до ListBox1, додати рядки:

ListBox2.Enabled := True;

ListBoxl.Enabled := False;

2.Внести зміни в програму, щоб при правильному виборі назви фізичної

величини слово в лівому списку зникало.

Підказка. В процедуру KeyPressed, що відноситься до ListBox2, додати:

ListBox1.Items.Delete(Num1);

ListBox1.Items.Insert(Num1, '');

8

Тут видаляється рядок і вставляється на її місце порожній, щоб зберегти відповідність між записами в двох вікнах.

Крім того необхідно в процедуру KeyPressed, що відноситься до ListBox1,

додати:

If (Key=#13) and

(ListBox1.Items.Strings[ListBox1.ItemIndex]<>'') Then...

для того, щоб не розглядався вибір порожнього рядка.

3.Зробіть доступними списки ListBox1 і ListBox2 не тільки після натиснення клавіши Enter, але і по клацанню миші.

4.Збільшіть кількість фізичних величин до 10. Наприклад: довжина (метр), маса

(кілограм), час (секунда), сила світла (кандела), кількість речовини (моль),

частота (герц).

Внесіть необхідні зміни до програми.

5.Введіть додаткову кнопку «Повторити», яка дозволить повторно виконати завдання, відновив списки ListBox1.

Підказка В процедуру обробки натиснення кнопки «Повторити» додати:

CountC:=0;

CountR:=0;

Num1:=0;

Num2:=0;

ListBox2.ItemIndex:=-1;

ListBox1.Items.LoadFromFile('Fiz_1.txt');// повторне

завантаження файлу

ListBox1.SetFocus;

9

Лістинг програми unit Unit7; interface uses

Windows, Messages, SysUtils, Variants, Classes, Graphics,

Controls, Forms,

Dialogs, StdCtrls, Buttons; type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

ListBox1: TListBox;

ListBox2: TListBox;

Label3: TLabel;

Label4: TLabel;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

procedure FormCreate(Sender: TObject);

procedure ListBox1KeyPress(Sender: TObject; var Key: Char);

procedure ListBox2KeyPress(Sender: TObject; var Key: Char);

procedure BitBtn2Click(Sender: TObject); private

{Private declarations } public

{Public declarations }

end;

var

Form1: TForm1;

implementation

{$R

*.dfm}

 

Var

Num1,

// номер вибраного запису в першому вікні

10