Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

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

Движение образа по удерживанию левой кнопки мыши | Код клавиши | По нажатию клавиши со стрелкой | Совмещение управляемого и неуправляемого движений. | В графических приложениях | Создание кнопок | Сортировка массива | Метод обмена | Система предварительной продажи билетов | Рисование в таблице TDrawGrid |


Использование компонентов 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| Просмотр текстовых файлов

mybiblioteka.su - 2015-2024 год. (0.013 сек.)