Рис. 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 }
end;
var
Form1: TForm1;
i, a, n, balls, vopr: integer; {различные счетчики и переменные для подсчета баллов}
dir, dir2, ss, zz, yes: string; {путь к файлу с вопросами, к программе и расшифрованной базе}
win: TIniFile; //переменная для работы с ini-файлами
mass: array[1..100] of integer; {содержит номера уже заданных вопросы, чтобы они не повторялись}
f1, f2: file of char; //переменные для работы с файлами
сор: char; //для работы с каждым символом отдельно
implementation
{$R *.dfm}
procedure TForm1.vars(var variant: integer);
begin
//вызываем процедуру выбора случайного вопроса question_select();
case variant of
1:
begin
Win:= TIniFile.Create(dir2); //открываем ini-файл
//считываем вопрос
Memo1.Text:= Win.ReadString('Q', IntToStr(a), Memo1.Text);
//считываем правильный вариант ответа
an1.Caption:= Win.ReadString('A', IntToStr(a), an1.Caption);
//считываем три неверных варианта к данному вопросу
an2.Caption:= Win.ReadString('W1', IntToStr(a), an2.Caption);
an3.Caption:= Win.ReadString('W2', IntToStr(a), an3.Caption);
an4.Caption:= Win.ReadString('W3', IntToStr(a), an4.Caption);
Win.Free; //освобождаем ini-файл
//помечаем первый вариант как правильный
yes:= an1.Caption;
end;
2:
begin
Win:= TIniFile.Create(dir2);
Memo1.Text:= Win.ReadString('Q', IntToStr(a), Memo1.Text);
an2.Caption:= Win.Readstring('A', IntToStr(a), an2.Caption);
an1.Caption:= Win.Readstring('W1', IntToStr(a), an1.Caption);
an3.Caption:= Win.ReadString('W2', IntToStr(a), an3.Caption);
an4.Caption:= Win.ReadString('W3', IntToStr(a), an4.Caption);
Читать дальше