Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задачи_Делфи.docx
Скачиваний:
9
Добавлен:
14.08.2019
Размер:
1.17 Mб
Скачать

Глава 7

Использование компонентов TRadioGroup

и TRadioButton в интерфейсе приложений

7.1. Тест «Знаете ли вы загадки?»

Постановка задачи. Играющему предлагаются загадки и несколько отгадок к каждой загадке, среди которых одна правильная. Играющий выбирает отгадку, а программа выдает результат: верно или неверно.

Реализация. Напишите несколько загадок в текстовом файле, например, как было показано на рис. 42. Напишите соответствующие отгадки (файл ‘Отгадки. txt’ на рис. 43). В этом проекте на каждую загадку приведено три отгадки, из которых одна верная.

Рис. 43. Файл с отгадками

Положите на форму два компонента TListBox, надписи TLabel для подсказок, TEdit для вывода отгадок к выбранной загадке и три компонента TRadioButton. При создании формы загрузите файлы с загадками в ListBox1, это видимый список, а файл с отгадками загрузите в невидимый список ListBox2.

Опишите глобальные переменные:

const n=10;

type mas=array[0..n-1]of integer;

var itog : integer; // Число правильных угадываний

nomer : integer; // Номер выбранной загадки

otvet : mas; // Массив для хранения правильных отгадок

Обработчик события OnCreate формы имеет следующий код:

procedure TForm2.FormCreate(Sender: TObject);

var f:textfile;

k:integer;

begin

ListBox1.Items.LoadFromFile('Загадки.txt');

ListBox2.Items.LoadFromFile('Отгадки.txt');

Listbox2.Visible:=false;

nomer:=0;

itog:=0;

assignfile(f,'Прав_отгадки.txt');

reset(f);

k:=0;

while (not eof(f)) and (k<n) do

begin

readln(f,otvet[k]);

k:=k+1;

end;

closefile(f);

end;

Чтобы выбрать загадку, кликнете мышью на ней. Событие OnMouseDown на списке ListBox1 имеет такой код:

procedure TForm2.ListBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

var i:integer;

begin

for i:=0 to ListBox1.Items.Count-1 do

begin // Ищем выделенную строку

if Listbox1.Selected[i] then

begin

Label3.Caption:='';

RadioButton1.Checked:=false;

RadioButton2.Checked:=false;

RadioButton3.Checked:=false;

nomer:=Listbox1.ItemIndex;

// Соответствующая строка с отгадками копируется в окно редактора

Edit1.Text:=Listbox2.Items[nomer];

end;

end;

end;

Осталось выбрать отгадку и сравнить с правильным ответом. Откройте события компонента RadioButton1 и найдите событие OnClick. Справа кликните на стрелочку и в выпадающем списке выберите RadioButtonClick, а затем сделайте двойной клик. Delphi автоматически создаст в тексте модуля процедуру TForm2.RadioButtonClick(Sender: TObject) – обработчик данного события. Аналогичные действия надо проделать с каждым компонентом RadioButton2 и RadioButton3. Обработчик будем одним и тем же для всех трех переключателей. Параметр Sender – один из компонентов RadioButton.

procedure TForm2.RadioButtonClick(Sender: TObject);

var k:integer;

begin // Определим, какой переключатель выбран

if Sender=RadioButton1 then

k:=1

else

if Sender=RadioButton2 then

k:=2

else

k:=3;

if otvet[nomer]=k then

begin

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

itog:=itog+1; // Число правильных ответов

end

else

label3.Caption:='Неправильно';

end;

Результат работы с тестом приведен на рис. 44.

Рис. 44. Тест «Знаете ли вы загадки»

Задание 1. Сделайте так, чтобы нельзя было исправлять свой выбор, т. е. на каждый вопрос можно кликать только один раз.

Задание 2. Дополните проект итогами, где отразите, сколько правильных ответов было из общего числа вопросов.