procedure TForm1.FormDestroy(Sender: TObject);
begin
DeleteFile('c:\base.bsd');//удаляем расшифрованную базу
end;
Теперь обрабатываем команды меню. Обработчик события OnClick для пункта Игра→Заново:
procedure TForm1.N1Click(Sender: TObject);
begin
Randomize;
ss:= zz;
start();//начало теста
end;
Поскольку у нас весь основной код вынесен в процедуры, теперь достаточно только вызвать процедуру начала игры.
Обработчик события OnClick для пункта меню Игра→Загрузить базу:
procedure TForm1.N2Click(Sender: TObject);
begin
Randomize;
//начинаем обзор с текущего каталога
Open1.InitialDir:= GetCurrentDir;
if not Open1.Execute then ShowMessage('Вы не выбрали файл!')
else begin
ss:= Open1.FileName;//открываем выбранный файл
zz:= ss;//запоминаем путь к базе
start(); //начинаем тест
end;
end;
Здесь мы предлагаем пользователю выбрать через диалоговое окно обзора ini– или любой другой файл, в котором содержатся зашифрованные вопросы и варианты ответов. Когда пользователь выбрал файл, мы запускаем процедуру start и, тем самым, начинаем тест.
Обработчик события OnClick для пункта меню Игра→Выход:
procedure TForm1.N4Click(Sender: TObject);
begin
Halt;//выход из программы
end;
Теперь обработаем щелчок мышью на панели p1:
procedure TForm1.p1Click(Sender: TObject);
begin
Label1.Caption:= 'Второй вопрос:';
verno();//принимаем вариант ответа
p1.Visible:= False;//убираем первую панель
р2.Visible:=True;//активизируем вторую панель
vopr:= Random(4) +1;//выбираем случайный вариант ответа
vars(vopr);//задаем вопрос
end;
Здесь мы вначале изменяем заголовок на "Второй вопрос:", после чего принимаем вариант ответа, выбранный пользователем, вызывая процедуру verno.
Затем готовим форму ко второму вопросу: прячем первую панель и выводим вторую. Вызываем процедуру vars, которая выбирает вопрос и отображает его вместе с вариантами ответа.
Обработаем щелчок мышью на второй панели:
procedure TForm1.p2Click(Sender: TObject);
begin
Label1.Caption:= 'Третий вопрос:';
verno();
p2.Visible:= False;
p3.Visible:= True;
vopr:= Random(4) + 1;
vars(vopr);
end;
Здесь происходит то же самое, что и для панели p1, только надпись метки принимает значение "Третий вопрос", мы прячем вторую "кнопку" и активизируем третью для следующего вопроса.
Аналогичные обработчики события OnClick создаем для третьей и четвертой панелей:
procedure TForm1.p3Click(Sender: TObject);
begin
Label1.Caption:= 'Четвертый вопрос:';
verno();
р3.Visible:= False;
p4.Visible:= True;
vopr:= Random(4) + 1;
vars(vopr);
end;
procedure TForm1.p4Click(Sender: TObject);
begin
Label1.Caption:= 'Пятый вопрос:';
verno();
p4.Visible:= False;
p5.Visible:= True;
vopr:= Random(4) + 1;
vars(vopr);
end;
Для пятой (последней) панели обработчик события OnClick будет выглядеть несколько иначе:
procedure TForm1.p5Click(Sender: TObject);
begin
//проверяем правильность ответа на последний вопрос
verno() ;
//узнаем, сколько баллов набрал пользователь
ss:= IntToStr(balls);
//делаем почти все компоненты невидимыми
Memo1. Visible:= False;
р5.Visible:= False;
RadioGroup1.Visible:= False;
Label1.Visible:= False;
an1.Visible:= False;
an2.Visible:= False;
an3.Visible:= False;
an4.Visible:= False;
Label2.Visible:=True;//показываем метку с результатом
Label2.Align:= alClient;//растягиваем ее на всю форму
//Отображаем процент правильных ответов
Label2.Caption:= 'Правильных ответов' + IntToStr(balls*(100 div 5))+'%';
end;
После проверки правильности ответа на последний вопрос, мы прячем почти все компоненты на форме, оставляя видимой только метку Label2 для вывода результата и меню, чтобы можно было продолжить работу с программой. С помощью метки мы отображаем процент правильных ответов пользователя по формуле: "количество правильных ответов * (100 / количество заданных вопросов)". Пример отображения результата теста представлен на рис. 13.3.
Читать дальше