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

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;

// Копируем следующий вопрос в надпись Label1

Label1.Caption:=ListBox1.Items[nomer];

end;

end;

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

Задание 2. Дополните проект картинками, иллюстрирующими вопрос.

Глава 8

Работа с файлами

8.1. Компоненты tOpenDialog, tSaveDialog – диалоги

открытия и сохранения файлов

Несколько слов о компонентах TOpenDialog и TSaveDialog. Компоненты помещаются на форму в любое место, они не видны в момент работы программы. Стандартный для диалогов метод – метод Execute, он создает и показывает на экране диалоговое окно. Вызов этого метода обычно располагается внутри обработчика какого-либо события. Например, обработчик выбора опции меню «Открыть файл» может вызвать метод Execute диалога TOpenDialog, обработчик нажатия кнопки «Сохранить» может вызвать такой же метод у компонента TSaveDialog. Окно диалога, открываемое мотодом Execute, является модальным окном, поэтому дальнейшее выполнение программы приостанавливается до тех пор, пока пользователь не закроет окно. Поскольку Execute – логическая функция, она возвращает в программу True, если результат диалога с пользователем был успешным.