Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2012, 19:21   #1
kogtishka
 
Регистрация: 21.02.2012
Сообщений: 8
Вопрос Повторное использование формы

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

Лучше прикрепите весь проект.
Чисто эмпирически: перенести форму с тестом в раздел поддерживаемых (а не автоматически создаваемых), при клике на Повтор теста создавать форму.

Или можно засунуть то, что у вас в oncreate еще и в onshow формы.
Возможно это поможет без создания форм.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 16.04.2012 в 20:11.
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Повторное нажатие кнопки активной формы Rust_12 Microsoft Office Excel 3 19.03.2012 01:24
Повторное использование структуры Karmadon Общие вопросы C/C++ 2 29.02.2012 12:00
Использование формы из DLL-сборки AgentSmit C# (си шарп) 1 10.10.2011 11:28
Повторное открытие открытой формы. segail Microsoft Office Excel 12 20.10.2010 18:12
использование компонента TreeWiev другой формы White Общие вопросы Delphi 2 29.08.2008 10:25