Table1.Active:=false;
Application.MessageBox('Не могу подключить базу с вариантами начальных данных.','Ошибка базы данных.',MB_OK or MB_ICONERROR);
exit;
end;
end;
//Выравниваем ширину столбцов в таблице
for i:=1 to fmVar.DBGrid1.Columns.Count - 1 do
fmVar.DBGrid1.Columns[i].Width:=45;
// Показываем форму
fmVar.ShowModal;
end;
end.
Б.3 Содержание файла Unit2.pas
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
{Описываем новый тип for вопроса теста}
type
TQuestion = record
Question : string;
Variants : array [1..4] of string; {4 варианта ответа - строки}
Answer : integer; {правильный вариант ответа - целое}
Asked : bool; {флаг, проверяющий, задавался ли вопрос}
end;
type
TResult = record
right : integer;
wrong : integer;
end;
type
TForm2 = class(TForm)
Timer1: TTimer;
Memo1: TMemo;
Button1: TButton;
Questions: TRadioGroup;
Label1: TLabel;
Label2: TLabel;
lbAnswer: TLabel;
leTrue: TLabeledEdit;
leFalse: TLabeledEdit;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
//устанавливает номер теста и подготавливает вопросы и результаты.
procedure SetTest(idx: integer);
//Отображает вопрос теста в окне.
procedure ShowQuestion();
procedure FormClose(Sender: TObject; var Action: TCloseAction);
//function GetRight(test_num : integer) : integer ;
//function GetWrong(test_num : integer) : integer;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
vremya: integer; //Переменная для времени теста.
var test_res: array [1..5] of TResult; //Массив результатов тестов.
var tests: array [1..5] of array [1..8] of TQuestion; //Массив из 5-ти тестов по 8 вопросов.
var test_num, question_count, question_num : integer; //Текущий номер теста, количество показанных вопросов.
implementation
uses Unit1;
{$R *.dfm}
procedure TForm2.ShowQuestion();
var
a : set of byte;
mas : array [1..4] of byte;
i,k : Byte;
begin
Randomize;
question_num:=0;
while true do
begin
question_num:=random(8)+1;
if not tests[test_num][question_num].Asked then break; // Если вопрос не показан
end;
tests[test_num][question_num].Asked:=true; // Запись о том, что вопроc показан
label1.Caption:='Вопрос №'+IntToStr(question_count)+' из 5:';
Memo1.Text:=tests[test_num][question_num].Question;
// Формируем случайный массив для задания вопросов
a := [1..4];
for k := 1 to 4 do
begin
repeat
i := Random(4) + 1;
until (i in a)=true;
Exclude(a,i);
mas[k] := i;
end;
Questions.Items[0] := tests[test_num][question_num].Variants[mas[1]];
Questions.Items[1] := tests[test_num][question_num].Variants[mas[2]];
Questions.Items[2] := tests[test_num][question_num].Variants[mas[3]];
Questions.Items[3] := tests[test_num][question_num].Variants[mas[4]];
end;
procedure TForm2.SetTest(idx: integer);
var i:integer;
begin
//Задаёт номер теста.
test_num:=idx;
leTrue.Text := '0';
leFalse.Text := '0';
//Сбрасываем флаги для вопросов.
for i:=1 to 7 do
tests[test_num][i].Asked:=false;
test_res[test_num].right:=0;
test_res[test_num].wrong:=0;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
if Button1.Caption = 'Ответить' then
begin
//Проверяем правильнось ответа и заполняем статистику.
if Questions.Items[Questions.ItemIndex] = tests[test_num][question_num].Variants[tests[test_num][question_num].Answer] then
begin
test_res[test_num].right:=test_res[test_num].right+1;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.