Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.04.2012, 19:25
lady_may lady_may вне форума
Прохожий
 
Регистрация: 16.04.2012
Сообщения: 1
Репутация: 10
Вопрос Повторное использование формы

Доброго времени суток.
При написании программы тестирования знаний учащихся у меня возникла проблема, которая ступорит весь процесс.
Дело в том, что первое прохождение теста происходит нормально - пользователь отвечает на вопросы, суммируются баллы, и в итоге после полного прохождения теста появляется окно с результатами. Где есть возможность повторного прохождения теста. И вот тут-то и возникает проблема.
Когда нажимаешь на кнопку повторного прохождения теста, действительно открывается окно с тестом. НО: в окне отображается последний вопрос, на который ответил пользователь. То есть, если он прошел тест полностью, не прерывая его искусственно, то при повторном запуске теста он оказывается на последнем вопросе теста, отвечает на него и выходит из режима прохождения теста. И все - тупик. Если же пользователь вышел, не ответив на все вопросы (есть кнопка принудительного прерывания тестирования), то при повторном запуске будет отображаться последний вопрос, на котором был произведен выход из режима тестирования. Причем, эта проблема возникает, даже если вернуться в главное окно и оттуда заново запустить тестирование.
Вот фрагмент кода:
Код:
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  
Старый 16.04.2012, 20:04
Аватар для RusMaXXX
RusMaXXX RusMaXXX вне форума
Начинающий
 
Регистрация: 01.10.2008
Сообщения: 138
Версия Delphi: 7
Репутация: 21
По умолчанию

скинь в ЛС полный вариант (исходник) программы, гляну че к чему!
__________________
уволен в запас!!!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:46.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter