Усовершенствование программы
Если компонент должен реагировать на некоторое событие, то. нужно написать процедуру обработки этого события и поместить объявление созданной процедуры в объявление типа формы. Например, объявление типа формы разрабатываемой программы должно выглядеть так:
type TForm1 = class(TForm) Label5: TLabel; // поле вывода вопроса Image1: TImage; // область вывода иллюстрации Panel1: TPanel; Button1: TButton; // кнопка Ok, Дальше, Завершить procedure FormActivate(Sender: TObject); procedure FormCreate(Sender: TObject); procedure ButtonlClick(Sender: TObject); procedure SelectorClick(Sender: TObject); private { Private declarations } public { Public declarations } end;
В отличие от других, сгенерированных Delphi, строк объявления типа, строка procedure SelectorClick(Sender: TObject) вставлена в объявление вручную.
Примечание
При создании процедуры обработки события для обычного компонента (компонента, который добавлен в форму во время разработки формы программы) Delphi автоматически генерирует заготовку процедуры обработки события и ее объявление. Программист должен написать только инструкции процедуры.
В случае создания процедуры обработки события для компонента, который создается динамически, программист должен полностью написать текст процедуры и поместить ее объявление в объявление формы.
После того как будет написана процедура обработки события, нужно связать эту процедуру с конкретным компонентом. Делается это путем присвоения имени процедуры обработки свойству, имя которого совпадает с именем обрабатываемого события. Например, инструкция:
selector[1].OnClick: = SelectorClick;
Задает процедуру обработки события Onclick для компонента selector [i]. В листинге 15.2 приведен полный текст программы Тест, версия 2.
Листинг 15.2. Программа тестирования, версия 2.
unit test2_; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCTRLs, ExtCTRLs; type TForm1 = class (TForm) Label5: TLabel; // поле вывода вопроса Image1: TImage; // область вывода иллюстрации Panel1: ТPanel; Button1: TButton; // кнопка Ok, Дальше, Завершить procedure FormActivate(Sender: TObject); procedure FormCreate(Sender: TObject); procedure ButtonlClick(Sender: TObject); procedure SelectorClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; // форма implementation const N_ANSWERS=4; // четыре варианта ответов N_LEVEL=4; // четыре уровня оценки var // динамически создаваемые компоненты answer: array [1..N_ANSWERS] of TLabel; // альтернативные ответы selector: array[1..N_ANSWERS+1] of TRadioButton; // кнопки выбора ответа f:TextFile; fn:string; // имя файла вопросов level:array[1..N_LEVEL] of integer; // сумма, соответствующая уровню mes: array [1..N_LEVEL] of string; // сообщение, соответствующее уровню score:array[1..N_ANSWERS] of integer; // очки за выбор ответа summa:integer; // набрано очков vopros:integer; // номер текущего вопроса n_otv:integer; // число вариантов ответа otv:integer; // номер выбранного ответа