|
Использование компонентов TRadioGroup
и TRadioButton в интерфейсе приложений
7.1. Тест «Знаете ли вы загадки?»
Постановка задачи. Играющему предлагаются загадки и несколько отгадок к каждой загадке, среди которых одна правильная. Играющий выбирает отгадку, а программа выдает результат: верно или неверно.
Реализация. Напишите несколько загадок в текстовом файле, например, как было показано на рис. 42. Напишите соответствующие отгадки (файл ‘Отгадки. txt’ на рис. 43). В этом проекте на каждую загадку приведено три отгадки, из которых одна верная.
Рис. 43. Файл с отгадками
Положите на форму два компонента TListBox, надписи TLabel для подсказок, TEdit для вывода отгадок к выбранной загадке и три компонента TRadioButton. При создании формы загрузите файлы
с загадками в ListBox 1, это видимый список, а файл с отгадками загрузите в невидимый список ListBox 2.
Опишите глобальные переменные:
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 на списке ListBox 1 имеет такой код:
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;
Осталось выбрать отгадку и сравнить с правильным ответом. Откройте события компонента RadioButton 1 и найдите событие OnClick. Справа кликните на стрелочку и в выпадающем списке выберите RadioButtonClick, а затем сделайте двойной клик. Delphi автоматически создаст в тексте модуля процедуру TForm2.RadioButtonClick(Sender: TObject) – обработчик данного события. Аналогичные действия надо проделать с каждым компонентом RadioButton 2 и RadioButton 3. Обработчик будем одним
и тем же для всех трех переключателей. Параметр 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. Дополните проект итогами, где отразите, сколько правильных ответов было из общего числа вопросов.
7.2. Проект «Исторические даты»
Постановка задачи. Создайте тест для проверки задания исторических дат. Проект является примером использования компонента TRadioGroup.
Реализация. Положите на форму один компонент TRadioGroup, две надписи, один компонент TListBox для хранения вопросов (сделайте его невидимым) и одну кнопку. Результат работы приведен на рис. 45.
Рис. 45. Проект «Исторические даты»
Так как вариантов ответа по три на каждый вопрос, то для простоты скопируем их из файла в массив строк otv. А в массив чисел prav_otv перепишем из файла номера правильных ответов. Код всех обработчиков приведен полностью.
Глобальные данные:
const n = 10; // Общее число вопросов в файле
type mas = array[0..3*n-1] of string;
mas1 = array[0..n-1] of integer;
var otv: mas; // На каждый вопрос три ответа
prav_otv: mas1;
nomer, k: integer;
procedure TForm1.FormCreate(Sender: TObject);
var i:integer; f:textfile;
begin
ListBox1.Items.LoadFromFile('Вопрос.txt');
ListBox1.Visible:=false;
i:=0;
nomer:=0; // Номер вопроса
Label1.Caption:=ListBox1.Items[nomer];
AssignFile(f,'Ответ.txt');
Reset(f);
while not eof(f) and (i<=3*n-1) do
begin
readln(f,otv[i]);
i:=i+1;
end;
CloseFile(f);
i:=0;
AssignFile(f,'Прав_ответы.txt');
Reset(f);
while not eof(f) and (i<=n-1) do
begin
readln(f,prav_otv[i]);
i:=i+1;
end;
CloseFile(f);
// Заполним поля у кнопок для вопроса с номером 0
for i:=0 to 2 do
RadioGroup1.Items[i]:=otv[i];
k:=3;
end;
procedure TForm1.RadioGroup1Click(Sender: TObject);
var i:integer;
begin
case RadioGroup1.ItemIndex of
0: i:=1;
1: i:=2;
2: i:=3;
end;
if i= prav_otv[nomer] then
Label2.Caption:= 'Правильно'
else
Label2.Caption:= 'Неправильно'
end;
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
Label2.Caption:='';
RadioGroup1.ItemIndex:=-1; // Воостанавливаем кнопки
nomer:=nomer+1; // Следующий вопрос
if nomer=n then
begin
ShowMessage('Вопросы закончились');
Form1.Close;
End
else
begin
for i:=0 to 2 do
begin
RadioGroup1.Items[i]:=otv[k];
k:=k+1;
end;
// Копируем следующий вопрос в надпись Label 1
Label1.Caption:=ListBox1.Items[nomer];
end;
end;
Задание 1. Усовершенствуйте проект так, чтобы нельзя было исправлять свой выбор, т. е. на каждый вопрос можно отвечать только один раз.
Задание 2. Дополните проект картинками, иллюстрирующими вопрос.
Дата добавления: 2015-08-20; просмотров: 43 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Прорисовка изображений в списке TListBox | | | Просмотр текстовых файлов |