Delphi. Учимся на примерах - [25]

Шрифт
Интервал

>

> 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);

> procedure Image1Click(Sender: TObject);

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

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

> procedure p2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

> procedure p2MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

> procedure p3MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

> procedure p3MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

> procedure p4MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

> procedure p4MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

> procedure p5MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

> procedure p5MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

> procedure N1Click(Sender: TObject);

> procedure N2Click(Sender: TObject);

> procedure N4Click(Sender: TObject);

> procedure FormDestroy(Sender: TObject);

>private

> { Private declarations }

> procedure start; //начало теста

> procedure question_select; //выбор вопроса

> procedure vars(var variant: integer); {сортировка и определение правильного варианта ответа}

> procedureverno(); {проверка: правильно ли ответил пользователь}

>public

> { Public declarations }


Рекомендуем почитать
Графика DirectX в Delphi

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Вторая жизнь старых компьютеров

Сейчас во многих школах, институтах и других учебных заведениях можно встретить компьютеры старого парка, уже отслужившие свое как морально, так и физически. На таких компьютерах можно изучать разве что Dos, что далеко от реалий сегодняшнего дня. К тому же у большинства, как правило, жесткий диск уже в нерабочем состоянии. Но и выбросить жалко, а новых никто не дает. Различные спонсоры, меценаты, бывает, подарят компьютер (один) и радуются, как дети. Спасибо, конечно, большое, но проблемы, как вы понимаете, этот компьютер в общем не решает, даже наоборот, усугубляет, работать на старых уже как-то не хочется, теперь просто есть с чем сравнивать.


DirectX 8. Начинаем работу с DirectX Graphics

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.