После создания формы в окно редактора кода, секцию implementation следует поместить описание глобальных констант(раздел const)   и переменных (раздел var). Затем приступаем к созданию процедур обработки событий.
Их в программе три:

  1. Обработка события OnActivate  для стартовой формы;
  2. Обработка события OnClick для командной кнопки Button1;
  3. Процедура обработки события OnClick  - она одна общая для переключателей выбора ответа.

Ниже привёдён листинг  Текст программы (исходный код) на  Delphi «Тесты»:

 

 Текст программы (исходный код) на  Delphi «Тесты»

 Текст программы (исходный код) на  Delphi «Тесты»

Текст программы (исходный код) на  Delphi «Тесты»

 Текст программы (исходный код) на  Delphi «Тесты»

Текст программы (исходный код) на  Delphi «Тесты»

Текст программы (исходный код) на  Delphi «Тесты»

Текст программы (исходный код) на  Delphi «Тесты»

 

Текст программы (исходный код) на  Delphi «Тесты»

Текст программы (исходный код) на  Delphi «Тесты»

Текст программы (исходный код) на  Delphi «Тесты»

После запуска и вывода на экран стартовой формы происходит событие OnActivate. Процедура FormActivate сначала вызывает процедуру  ResetForm, которая, присваивая значение False свойству Visible, делает невидимыми поля вывода альтернативных ответов и переключатели. По тому же принципу делается невидимой область иллюстрации. Кроме того , процедура устанавливает максимально возможную ширину полей меток альтернативных ответов. После очистки формы проверяется , указан ли при запуске программы  на  Delphi «Тесты»  параметр – имя тестового файла
В нашем случае мы конкретно указываем файл теста для чтения ( fn:=('Dost.txt');   Assignfile(f,fn); ) и проверку делать не нужно.
Если всё правильно, то открываем файл теста . Файлы теста и иллюстрации должны находится в том же каталоге, что и программа тестирования.
Открывается файл теста следующим образом. Сначала происходит обращение к процедуре AssingnFile  имя файла связывается с файловой переменной, а затем вызывается инструкция открытия файла для чтения.
После успешного открытия вызывается процедура Info, которая считывает из файла информацию о тесте и выводит её присвоением прочитанного текста свойству Caption  поля метки Label5.
Далее вызывается процедура GetLevel, котоая считывает из файла теста информацию об уровнях оценки. Эта прцедура заполняет массивы Level и mes.
После вывода информационного сообщения программа ждёт, когда испытуемый нажмёт на кнопку Ok (Button1).
Данная командная кнопка Button1 используется в программе для:

  • Аварийного завершения работы приложения (в случае если не задано имя файла теста);
  • Начала тестирования(после прочтения информационного сообщения);
  • Переходу к следующему вопросу (после выбора одного из ответов, так как кнопка будет недоступна);
  • Завершение работы программы (после прочтения результатов тестирования).

 

Свойство Tag кнопки Button1  используется для индентификации текущего состояния формы и выбора действия при щелчке на кнопке Button1.
После вывода информации о тесте значение свойства Tag кнопки Button1  равно нулю. Поэтому в результате первого щелчка на кнопке Button1 выполняется та часть программы, которая обеспечивает вывод первого вопроса, замену текста на кнопке Ok на Дальше, и устанавливает выбранное состояние переключателя RadioButton5,  который невиден пользователю( свойство visible:= False). Кроме того, присваиванием значение False свойству Enabled кнопка Button1 делается недоступной, чем блокируется переход к следующему вопросу до выбора альтернативного ответа. Значению свойства кнопки Button1.Tag присваивается единица, тем самым  выполняется подготовка к обработке следующего щелчка  кнопки Button1.
После выбора ответа и нажатия кнопки Дальше (Button1) (то в этом случае значение свойства  Button1.Tag  равно единице) к набранной сумме баллов добавляется количество баллов за выбранный ответ. Затем если достигнут конец файла, то сначала закрывается файл теста, изеняется текст на кнопке Button1 и значение Button1.Tag , а затем с помощью процедуры  Itog  выводятся результаты тестирования.
Далее если значение Button1.Tag   равно двум, то с помощью метода  Close закрывается окно формы, в результате чего программа завершает работу.
Вывод вопроса и альтернативных ответов осуществляет процедура VoprosToStr.  Вначале процедура увеличивает счётчик вопросов vopros  и присвоением значения свойству Caption формы выводит номер текущего вопроса в заголовке окна. Затем процедура читает строки из файла теста до тех пор, пока первым символом очередной прочитанной строки не будет точка или «обратная наклонная черта» (\).
После вывода текста вопроса делается проверка: какой символ используется в качестве конца вопроса. Если это обратная наклонная черта, то это говорит о том, что к вопросу есть иллюстрация, то свойству Form1Image1.Tag присваивается единица и из прочитанной строки выделяется имя файла иллюстрации.
Загрузка иллюстрации осуществляется использованием метода LoadFromFile к свойству Image1.Picture. Однако после загрузки иллюстрации на экране не появляется , так как значение свойства Image1.Visible  равно False.
После считывания иллюстрации процедура считывает вопрос. После обработки последнего вопроса, если была загружена иллюстрация, вызовом процедуры ScaleImage вычисляется и устанавливается размер области иллюстрации. После этого установкой значения свойств Image1.Top задаётся положение верхней границы области иллюстрации, а значение True свойства   Image1.Visible  делает иллюстрацию видимой. Так как количество символов в тексте вопроса и число альтернативных ответов от вопроса к вопросу могут меняться, то есть на экране они могут занимать разное количество строк, то каждый раз перед выводом текста очередного ответа устанавливается значение  свойства Top как расстояние от нижней границы предыдущего альтернативного ответа. Для поля вывода первого альтернативного ответа (Label1) значение Top вычисляется от нижней границы вопроса (Label5), или же от нижней границы поля вывода иллюстрации(Image1), если к вопросу есть иллюстрация. Выбор одного из альтернативных ответов осуществляется щелчком на кнопке RadioButton. После вывода вопроса ни один из переключателей, соответствующих альтернативному ответу, не является выбранным. Выбран только переключатель RadioButton5, который не виден пользователю, так его свойство Visible False.
Для обработки события OnClick переключателей RadioButton1- RadioButton5 в программе используется общая процедура – TForm1. RadioButtonClick.  Эта процедура в качестве параметра объект, на котором произошло событие. Сравнивая полученное значение с именами объектов –кнопок выбора, процедура присваивает значение глобальной переменной otv,  которая используется процедурой VoprosToStr для увеличения выбранной суммы баллов. Кроме того, процедура TForm1. RadioButtonClick делает доступной кнопку перехода (Button1) к следующему вопросу, которая становится недоступной после вывода вопроса.
Процедура Itog, сравнивая набранную сумму баллов  summa со значением элементов массива Level, определяет, сколько баллов набрал испытуемый, и выводит соответствующее сообщение присвоением значением свойству Label5.Caption.

Скачать исходник программы на Delphi «Тесты» :

 

Добавить комментарий


Защитный код
Обновить