Урок Delphi | Система проверки знаний. (оболочка теста на Delphi) Часть 2

 Усовершенствование программы

Очевидно, что приведенный выше текст программы был бы намного проще и изящней, если бы поля вывода альтернативных ответов и переключатели выбора ответов были бы объединены в массивы. Тогда программа могла бы обращаться к полям и переключателям не по имени, а по индексу. 

Delphi позволяет объединить компоненты в массив, однако создаваться такие компоненты должны не во время создания формы приложения, а динамически — во время работы программы. На рис. 15.7 приведен вид формы усовершенствованного приложения.

Рис. 15.7. Форма приложения Тест, версия 2

 

 

На форме отсутствуют поля вывода альтернативных ответов и переключатели выбора правильного ответа. Они будут созданы во время работы программы.

Объявление массива компонентов ничем не отличается от объявления обычного массива — указывается имя массива, диапазон изменения индекса и тип элементов массива. Ниже приведено объявление массивов компонентов формы разрабатываемой программы:

 

1.answer: array[I..N_AMSWERS] of TLabel; // альтернативные ответы
2.selector: array[1..N_ANSWERS+1of TRadioButton; // кнопки выбора ответа

 

Однако, для того чтобы компонент появился в форме, одного объявления недостаточно. Компонент — это объект Delphi, и его объявление — это только указатель на область памяти, который без наличия объекта ни на что не указывает. Создается компонент применением метода create к указателю на компонент, в нашем случае — к элементу массива.

Например, инструкции

 

1.answer[l] := TLabel.Create(self];
2.answer[1].Parent := Forml;

 

создают компонент Label и помешают его в форму.

После создания компонента программа должна выполнить его настройку, т. е. ту работу, которую во время создания формы приложения выполняет программист при помощи Object Inspector. Под настройкой понимается присваивание начальных значений тем свойствам компонента, предопределенные значения которых не отвечают предъявляемым требованиям.

Если компонент должен реагировать на некоторое событие, то нужно написать процедуру обработки этого события и поместить объявление созданной процедуры в объявление типа формы. Например, объявление типа формы разрабатываемой программы должно выглядеть так:

 

01.type
02.TForml = class(TForm)
03.Labels: TLabel; // поле вывода вопроса
04.Image1: TImage; // область вывода иллюстрации
05.Panellr TPariel;
06.Button!: TButton,- // кнопка Ok, Дальше, Завершить
07.procedure FormActivate(Sender: TObject);
08.procedure FormCreate{Sender: TObject);
09.procedure ButtonlClick(Sender: TObject);
10.procedure SelectorClickOender: TObject];
11.private
12.{ Private declarations )
13.public
14.{ Public declarations }
15.end;

 

 В отличие от других, сгенерированных Delphi, строк объявления типа, строка procedure SelectorClicMSender: TObject) вставлена В объявление вручную.

Примечание: При создании процедуры обработки события для обычного компонента (компонента, который добавлен в форму во время разработки формы программы) Delphi автоматически генерирует заготовку процедуры обработки события и ее объявление. Программист должен написать только инструкции процедуры. В случае создания процедуры обработки события для компонента, который создается динамически, программист должен полностью написать текст процедуры и поместить ее объявление в объявление формы.

 

После того как будет написана процедура обработки события, нужно связать эту процедуру с конкретным компонентом. Делается это путем присвоения имени процедуры обработки свойству, имя которого совпадает с именем обрабатываемого события. Например, инструкция

 

1.selector.onclick := SelectorClick;

 

задает процедуру обработки события onclick для компонента selector [1]. В листинге 15.2 приведен полный текст программы Тест, версия 2.

См. исходник

dle

Помоги проекту! Расскажи друзьям об этом сайте: