- •Введение
- •Лабораторная работа 1. Элементы интерфейса Delphi
- •Лабораторная работа 2. Разработка первого проекта
- •Лабораторная работа 3. Разработка проекта «Диалог»
- •Лабораторная работа 4. Разработка проекта «Справочник»
- •Лабораторная работа 5. Разработка проекта «Словарь»
- •Лабораторная работа 6. Разработка проекта «Ваш вес»
- •Лабораторная работа 7. Разработка проекта «Цвета в формате rgb»
- •Лабораторная работа 8. Разработка проекта «Тест по физике»
Лабораторная работа 8. Разработка проекта «Тест по физике»
Постановка задачи
Создать программу, выполняющую следующие действия.
После запуска программы появляется изображение, аналогичное рис. 16. Пользователь, перемещаясь с помощью клавиш-стрелок по списку «Физическая величина», выбирает любое слово, нажав клавишу Enter. Затем он переходит в список «Название величины» и выбирает соответствующие название выбранной физической величины. Если выбрано правильное название величины, то под словом «Оценка» появляется одобрительная реплика «Правильно», если неправильное слово, то – «Ошибка». Правильные названия ищутся до тех пор, пока не будет получено соответствие всех физических величин и их названий.
Пояснение. Новым в этой работе является обеспечение взаимодействия двух списков ListBox на основе свойств Items и ItemIndex и создание многострочных надписей в объекте Label.
План разработки программы
Открыть новый проект.
Разместить на форме объекты в соответствии с рис. 17 и присвоить заголовки меток «Физическая величина» и «Название величины» состоят из двух строк и отцентрированы.
Рис. 16. Рис. 17.
Для вывода многострочных надписей в объектах Label выполните следующие действия:
Выделенный объект |
Вкладка окна Object Inspector |
Имя свойства |
Действие |
Label 1 |
Properties |
AutoSize (изменение размера в зависимости от текста в Caption) |
Установка значения False |
WordWrab (разрыв строки) |
Установка значения True |
||
Height Width |
Установка подходящих размеров |
||
Alignment (выравнивание текста) |
Установка значения taCenter |
Установить кнопку выхода из программы и выполнить следующие действия:
Выделенный объект
Вкладка окна
Object Inspector
Имя свойства / имя события
Действие
BitBtn1
Properties
Caption
Установка заголовка кнопки: «Выход»
Kind
BkCancel
Events
BitBtn1Click
Close;
Сохранить код программы и проэкт под именами, например, unit8.pas и pr.8.dpr.
Запкстить программу, затем закрыть окно проэкта, щелкнув на кнопке «Выход».
Выделить объект ListBox1, справа от свойства Items щелкнуть на кнопке с тремя точками. В появившемся окне встроенного редактора ввести физические величины, каждую на новой строке: «Ватт», «Ом», «Вольт», «Ампер».
Сохранить набранный текст под именем fiz1.txt. Для этого щелкнуть правой кнопкой мыши и выбрать режим Save. Для выхода из встроенного редактора щелкнуть на кнопке OK.
Выделить объект Listbox2 и проделать с ним аналогичную работу, введя названия физических величин: «Напряжение», «Сопротивление», «Сила тока», «Мощность».
Сохранить набранный текст под именем fiz2.txt.
Выполнить следующие действия:
Выделенный объект |
Вкладка окна Object Inspector |
Имя события |
Действие |
ListBox1 |
Events |
OnKeyPress |
If key = # 13 then Num: = ListBox1. ItemIndex;
|
ListBox2 |
Events |
OnKeyPress |
If key = # 13 then begin Case ListBox2. ItemIndex of O: Num2: = 2; 1: Num2: = 1; 2: Num2: = 3; 3: Num2: = 0; end; if Num1 = Num2 then begin Label4. Caption: = ‘Правильно’; CountR: = CountR + 1 end Else Label4. Caption: = ‘Ошибка’; If CountR = 5 then ShowMessage (‘Текст обычен’)
|
В разделе Var переменные Num1, Num2 и CountR объявить как целочисленные.
9. Сохранить проэкт, запустить и протестировать его.
Задание для самостоятельного выполнения
Списки ListBox1 и ListBox2 сделать поочередно доступными после нажатия клавиши Enter.
Подсказка. Установить значение False свойства Enabled объекта ListBox2, а в процедуру KeyPressed, относящуюся к ListBox1, включить строки:
ListBox2. Enabled: = True;
ListBox1. Enabled: = False;
Form1. ActiveControl: = ListBox2;
Внести изменения в программу, чтобы при правильном выборе названия физической величины слово в левом списке исчезало.
Подсказка. В процедуру KeyPressed, относящуюся к ListBox2, включить:
ListBox1. Items. Delete (Num1);
ListBox1. Items. Insert (Num1, ’’);
Увеличить количество величин до 10.
вывести сообщение о количестве правильных ответов и оценке за тест.
Листинг программы
unit Unit8;
interfase
. . .
private
{Private declarations}
public
{Public declarations}
end;
var
Form1: TForm1;
COUNTR, REZ, num1, num2: integer;
Implementation
{SR * . DFM}
procedure TForm1. BitBtnClick (Sender: TObject);
begin
Close
end;
procedure Tform1. ListBox1KeyPress (Cender: TObject; var Key: Char);
begin
If (Key = # 13) and (Form1. ListBox1. Items. Strings
[Form1.ListBox1. ItemIndex] <> ’ ’) Then
begin
num1 : = form1. listbox1. itemindex;
form1. ListBox1.Enabled: = False;
form1.ListBox2. Enabled: = True;
form1. ActiveControl: = ListBox2
end
end;
procedure TForm1. ListBox2KeyPress (Sender: TObject; var Key: Char);
begin
if key = # 13 then begin
case form1. ListBox2. ItemIndex of
0: num2: = 2;
1: num2: = 4;
2: num2: = 7;
3: num2: = 0;
4: num2: = 3;
5: num2: = 1;
6: num2: = 6;
7: num2: = 8;
8: num2: = 5;
9: num2: = 9;
end;
if num1 = num2 then begin
form1. Label4. Caption: = ‘Верно!’;
REZ: = REZ + 1
end
else form1. Label4. Caption: = ‘Ошибка!’;
COUNTR: = COUNTR + 1
form1. ListBox1. Items. Delete (num1);
form1. ListBox1. Items. Insert (num1,’ ’ );
if c = 10 then showmessage (‘Тест окончен. Оценка:‘ +
inttostr (REZ div 2 + ord(REZ div 2 < 1)) + ’ (правильных ответов:‘
+ inttostr (REZ) + ’)’);
form1. ListBox1. Enabled: = 0;
form1. ListBox2. Enabled: = 0;
form1. ActiveControl: = listbox1
end
end;
procedure TForm1. BitBtn2Click (Sender: TObject);
begin
COUNTR: = 0;
REZ: = 0;
num1: = -1;
num2: = -1;
form1. ListBox1. Items. LoadFormFile (‘fize. txt’);
end;
end.