Begin
Объектно-событийное программирование. События
Begin
Var
Label1:TLabel;
Label1:= TLabel.Create(Self);
Label1.Parent:=Self;
Label1.Caption:='Дочерний элемент';
end;
Если убрать оператор
Label1.Parent:=Self;
то метка Label1 никогда не узнает о том, что пришла пора прорисовать себя на экране и ее текст не будет виден. Наоборот, изменение свойства Parent подключает метку к списку дочерних элементов формы, и оконная функция формы обратится к нужному методу метки, чтобы заставить ее появиться на экране в момент появления самой формы.
Программистам, работающим в Windows можно не пояснять смысл слова событие. Сама среда Windows и написанные в ней программы управляются событиями, возникающими в результате действия пользователя, а также аппаратуры ПК и других программ. Программирование, ориентированное на события - неотъемлемая черта Windows. Delphi предоставляет полный доступ к подструктуре событий, предоставляемой Windows. С другой стороны, Delphi упрощает программирование обработчиков таких событий.
Событие – это свойство процедурного типа, предназначенное для создания пользовательской реакции на те или иные входные воздействия:
Property OnMyEvent:TMyEvent read FOnMyEvent
write FOnMyEvent;
Здесь OnMyEvent – имя свойства, TMyEvent – процедурный тип; FOnMyEvent – есть поле объекта, содержащее адрес некоторого метода. Присвоить свойству значение – значит указать объекту адрес метода, который будет вызван в момент наступления события.
В Delphi принято называть событиями специальные свойства процедурного типа, которым в качестве значений присваиваются имена методов, где описана реакция на событие. Такие методы называются обработчиками событий.
Все события Delphi принято предварять префиксом On. Например, OnClick – событие при щелчке клавиши мыши, OnKeyPress – при нажатии любой клавиши клавиатуры, OnCreate – при создании компонента, OnMouseMov e – при перемещении мыши.
Щелкнув в инспекторе объектов на странице Events в поле нужного события, вы получите в программе заготовку метода нужного типа. При этом имя метода будет состоять из имени текущего компонента и имени события (без префикса on), относиться он будет к текущей форме. Например, пусть на форме Form1 есть кнопка Button1, тогда для обработки щелчка мыши на кнопке (событие OnClick) будет создана заготовка метода:
procedure Form1.Button1Click(Sender:TObject);
......{вставить программный код}
end;
Приложения Delphi являются интерактивными системами, в которых для организации взаимодействия между пользователем и программой используют методы, управляемые событиями. Приложение Delphi реагирует на событие - сигналы от мыши, клавиатуры и системные события (например, в результате нарушения системных ограничений). Различные объекты могут реагировать на различные совокупности событий.
Для организации реакции на события можно:
1. Проигнорировать событие, т.е. не писать процедуры для реакции на это событие, при этом поведение объекта определяется по умолчанию;
2. Перехватить событие, для этого надо написать текст процедуры – обработчика события, при этом можно модифицировать или изменить поведение объекта, задаваемое по умолчанию. Это может быть, например, изменение вида курсора при попадании в определенную область на экране или изменение доступности компонента с помощью свойства Enabled.
Например, последовательность действий при перехватывании события OnClick - щелчка мыши для управляющей кнопки Button1, состоит в следующем:
1. Возникает событие нажатия на кнопку с именем Button1, для этого пользователь установит курсор на кнопку и нажмет левую клавишу мыши (т.е. осуществит щелчок мыши по кнопке Button1), возникнет событие по имени OnClick - щелчок на кнопке;
2. Объект Button1 перехватывает это событие, так как для него имеется обработчик события;
3. Delphi ищет процедуру с именем, соответствующим имени задействованного объекта (Button1) и имени события (OnClick), т.е. процедуру Button1Click.
Имя процедуры обработчика события состоит из Buttonl1 – имени объекта, на котором произошло событие, и Click – имени события (без префикса On).
Разработчик приложения с помощью Delphi должен писать только обработчики событий. Перехват событий и организацию вызова обработчиков событий реализует программа Delphi.