Текст программы
После создания формы в окно редактора кода, в секцию implementation следует поместить описание глобальных констант (раздел const) и переменных (раздел var). Затем можно приступить к созданию процедур обработки событий.
Их в программе три: обработка события onActivate для стартовой формы, обработка события Onclick для командной кнопки Button1 и процедура обработки события onclick – одна, общая для переключателей выбора ответа.
В листинге 15.1 приведен полный текст программы.
Листинг 15.1. Программа тестирования.
unit test1_; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCTRLs, ExtCTRLs; type TForm1 = class (TForm) // вопрос Label3: TLabel; // альтернативные ответы Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; // переключатели выбора ответа RadioButton1: TRadioButton; RadioButton2: TRadioButton; RadioButton3: TRadioButton; RadioButton4: TRadioButton; Image1: TImage; // область вывода иллюстрации Button1: TButton; // кнопка Ok, Дальше RadioButtonS: TRadioButton; // "служебная" кнопка Panel1: ТPanel; procedure FormActivate(Sender: TObject); procedure ButtonlClick(Sender: TObject}; procedure RadioButtonClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; // форма implementation const N_LEV=4; // четыре уровня оценки N_ANS=4; // четыре варианта ответов var f:TextFile; fn:string; // имя файла вопросов 1evel:array[1..N_LEV] of integer; // сумма, соответствующая уровню mes:array[1.,N_LEV] of string; // сообщение, соответствующее уровню score:array[1..N_ANS] of integer; // балл за выбор ответа summa:integer; // набрано очков vopros:integer; // номер текущего вопроса n_otv:integer; // число вариантов ответа otv:integer; // номер выбранного ответа // вывод начальной информации о тесте procedure info(var f:TextFile;l:TLabel); var s,buf:string; begin buf: = ''; repeat readln(f,s); if s[l] <> '.' then buf: = buf + s+ ' '; until s[l] ='.'; l.caption: = buf; end; // прочитать информацию об оценках за тест Procedure GetLevel(var f:TextFile); var i:integer; buf:string; begin // заполняем значения глобальных массивов i: = l; repeat readln(f,buf); if buf[1] <> '.' then begin mes[i]: = buf; readln(f,level[i]); i: = i+1; end;