Доброго времени суток.
При написании программы тестирования знаний учащихся у меня возникла проблема, которая ступорит весь процесс.
Дело в том, что первое прохождение теста происходит нормально - пользователь отвечает на вопросы, суммируются баллы, и в итоге после полного прохождения теста появляется окно с результатами. Где есть возможность повторного прохождения теста. И вот тут-то и возникает проблема.
Когда нажимаешь на кнопку повторного прохождения теста, действительно открывается окно с тестом. НО: в окне отображается последний вопрос, на который ответил пользователь. То есть, если он прошел тест полностью, не прерывая его искусственно, то при повторном запуске теста он оказывается на последнем вопросе теста, отвечает на него и выходит из режима прохождения теста. И все - тупик. Если же пользователь вышел, не ответив на все вопросы (есть кнопка принудительного прерывания тестирования), то при повторном запуске будет отображаться последний вопрос, на котором был произведен выход из режима тестирования. Причем, эта проблема возникает, даже если вернуться в главное окно и оттуда заново запустить тестирование.
Вот фрагмент кода:
Код:
procedure TForm7.FormCreate(Sender: TObject);
begin
// Формирование первого вопроса
Label8.Visible := False;
BaseCreate;
Form7.Position:= poDeskTopCenter;
numwin := 1;
Form7.Label6.Caption := BT[numwin].qst;
RadioButton1.Caption := BT[numwin].answ[1];
RadioButton2.Caption := BT[numwin].answ[2];
RadioButton3.Caption := BT[numwin].answ[3];
RadioButton4.Caption := BT[numwin].answ[4];
RadioButton5.Caption := BT[numwin].answ[5];
RadioButton6.Caption := BT[numwin].answ[6];
sum := 0;
end;
procedure TForm7.Button2Click(Sender: TObject);
var answnum : Integer;
flag : boolean;
begin
AssignFile(th,'testhistory.txt');
Append(th);
// Выбор ответа
if (radiobutton1.Checked=true) or
(radiobutton2.Checked=true) or
(radiobutton3.Checked=true) or
(radiobutton4.Checked=true) or
(radiobutton5.Checked=true) or
(radiobutton6.Checked=true) then
begin
if radiobutton1.Checked=true then begin answnum:=1; flag := True; end;
if radiobutton2.Checked=true then begin answnum:=2; flag := True; end;
if radiobutton3.Checked=true then begin answnum:=3; flag := True; end;
if radiobutton4.Checked=true then begin answnum:=4; flag := True; end;
if radiobutton5.Checked=true then begin answnum:=5; flag := True; end;
if radiobutton6.Checked=true then begin answnum:=6; flag := True; end;
end
else begin
MessageDlg('Выберите вариант ответа!',mtError,[mbOK],0);
Dec(numwin);
flag := False;
end;
if flag then
begin
Write(th, numwin, '-', answnum, ' ');
if answnum = BT[numwin].ransw then
sum := sum + maxmark;
end;
// Переход к следующему вопросу
radiobutton1.Checked := false;
radiobutton2.Checked := false;
radiobutton3.Checked := false;
radiobutton4.Checked := false;
radiobutton5.Checked := false;
radiobutton6.Checked := false;
// Окончание тестирования
if numwin < numqst then Inc(numwin) else
begin
if sum > limit then
begin
Form7.Close;
Form8.Show;
Form8.Label6.Caption := IntToStr(sum);
Form8.Label8.Caption := IntToStr(maxmark*numqst) + '.';
sum := 0;
end
else
begin
Form7.Close;
Form9.Show;
Form9.Label6.Caption := IntToStr(sum);
Form9.Label8.Caption := IntToStr(maxmark*numqst) + '.';
maxmark := maxmark - step;
Form9.Label11.Caption := IntToStr(maxmark*numqst) + '.';
sum := 0;
end;
Write(th, sum);
end;
// Переход на следующий вопрос
Form7.Label6.Caption := BT[numwin].qst;
RadioButton1.Caption := BT[numwin].answ[1];
RadioButton2.Caption := BT[numwin].answ[2];
RadioButton3.Caption := BT[numwin].answ[3];
RadioButton4.Caption := BT[numwin].answ[4];
RadioButton5.Caption := BT[numwin].answ[5];
RadioButton6.Caption := BT[numwin].answ[6];
CloseFile(th);
end;
Таким образом: что нужно сделать для того, чтобы при очередном запуске окна оно запускалось как первый раз - "с нуля"?
Заранее благодарна.