Выбрать главу

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.

Рис. 13.3. Отображение результата теста

Единственное, что осталось сделать, — реализовать имитацию нажатия кнопки при щелчке на панели мышью. Для того чтобы "оживить" панель, для нее следует создать обработчики двух событий: OnMouseDown и OnMouseUp. Первое событие возникает при щелчке мышью, а второе — при отпускании кнопки мыши. Для панели pi эти обработчики будут выглядеть следующим образом:

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

begin

 p1.BevelInner:= bvLowered;

 p1.BevelOuter:= bvRaised;

end;

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

begin

 p1.BevelInner:=bvRaised;

 p1.BevelOuter:=bvLowered;

end;

Для всех остальных панелей обработчики этих событий будут выглядеть аналогичным образом за исключением того, что имя p1 потребуется изменить на имя р2, p3, р4 или р5.

Программа тестирования в действии показана на рис. 13.4.

Рис. 13.4. Программа тестирования в действии

Полный исходный код модуля

Полный код модуля программы-теста представлен в листинге 13.1.

Листинг 13.1. Модуль программы-теста

unit Unit1;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, IniFiles, jpeg, Menus;

type TForm1 = class(TForm)

 Memo1: TMemo;

 RadioGroup1: TRadioGroup;

 p1: TPanel;

 p2: TPanel;

 p3: TPanel;

 p4: TPanel;

 p5: TPanel;

 an1: TRadioButton;

 an2: TRadioButton;

 an3: TRadioButton;

 an4: TRadioButton;

 Label1: TLabel;

 Label2: TLabel;

 MainMenu1: TMainMenu;

 N1: TMenuItem;

 N2: TMenuItem;

 N3: TMenuItem;

 N4: TMenuItem;

 Open1: TOpenDialog;

 procedure FormCreate(Sender: TObject);

 procedure p1Click(Sender: TObject);

 procedure p2Click(Sender: TObject);

 procedure p3Click(Sender: TObject);

 procedure p4Click(Sender: TObject);

 procedure p5Click(Sender: TObject);