|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Повторное использование формы
Доброго времени суток.
При написании программы тестирования знаний учащихся у меня возникла проблема, которая ступорит весь процесс. Дело в том, что первое прохождение теста происходит нормально - пользователь отвечает на вопросы, суммируются баллы, и в итоге после полного прохождения теста появляется окно с результатами. Где есть возможность повторного прохождения теста. И вот тут-то и возникает проблема. Когда нажимаешь на кнопку повторного прохождения теста, действительно открывается окно с тестом. НО: в окне отображается последний вопрос, на который ответил пользователь. То есть, если он прошел тест полностью, не прерывая его искусственно, то при повторном запуске теста он оказывается на последнем вопросе теста, отвечает на него и выходит из режима прохождения теста. И все - тупик. Если же пользователь вышел, не ответив на все вопросы (есть кнопка принудительного прерывания тестирования), то при повторном запуске будет отображаться последний вопрос, на котором был произведен выход из режима тестирования. Причем, эта проблема возникает, даже если вернуться в главное окно и оттуда заново запустить тестирование. Вот фрагмент кода: Код:
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; Заранее благодарна. |
#2
|
||||
|
||||
скинь в ЛС полный вариант (исходник) программы, гляну че к чему!
уволен в запас!!! |