Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВВЕДЕНИЕ В ОБЪЕКТНО Ориентированное программиро...docx
Скачиваний:
19
Добавлен:
29.08.2019
Размер:
1.01 Mб
Скачать

События

События являются свойствами. В отличие от других свойств, события не должны использовать методы для доступа к полям, где хранится указатель на событие, т.е. после read и write указывается непосредственно имя поля. Рекомендуется использовать следующее соглашение по именам:

· имя свойства начинается с Оn,

· имя поля получено из имени свойства путем добавления в начало буквы F.

Например:

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

Тип свойства события - указатель на метод. В Delphi определены типы методов для всех стандартных событий. При создании своего события можно либо использовать существующий тип, либо определить свой. При определении собственного типа следует помнить следующее. Хотя компилятор позволяет объявить тип указатель на метод-функцию, делать этого не следует. Поскольку пустая функция возвращает неопределенный результат, пустой обработчик события - функция может не всегда работать корректно. Таким образом, все события должны быть свойствами, имеющими тип указатель на метод-процедуру. Если имеется необходимость возвращать значения из обработчика события, то это делается через параметры, передаваемые по имени. Существует ряд стандартных событий Delphi. Они могут быть разделены на две категории: те которые определены для всех элементов управления, и те, которые определены только для оконных элементов управления. Стандартные события для всех элементов управления (потомков TControl):

Стандартные события для всех оконных элементов управления (потомков TWinControl):

Стандартные события имеют соответствующие виртуальные методы с областью видимости protected, объявленные в TControl, либо в TWinControl. Эти методы вызываются при возникновении соответствующих событий и выполняют следующие действия:

· стандартную обработку события;

· проверку наличия обработчика события, назначеннного разработчиком приложения;

· в случае наличия - вызов обработчика события.

Такие методы называют стандартными обработчиками событий. Их имена соответствуют именам событий, например событие onclick вызывает метод, называемый onclick, а событие OnEndDrag - метод DoEndDrag. Стандартный обработчик события может выглядеть следующим образом:

При разработке собственного компонента можно:

1. Повысить видимость унаследованных событий;

2. Изменить стандартные обработчики событий;

3. Создать собственные события.

Рассмотрим эти возможности более подробно. Новый компонент, создаваемый в Delphi, обычно наследует события для большинства сообщений Windows, но они могут быть объявлены protected. В случае необходимости при разработке компонента их видимость следует повысить.

Есть необходимость выполнять какие-либо дополнительные действия с компонентом по какому-либо событию, то стандартный обработчик события следует перекрыть. Этим разработка компонентов отличается от разработки приложения, использующего компонент, в котором в таком случае событию присваивается новый обработчик. При этом не следует забыть вызвать перекрытый метод предка, иначе не будет запускаться назначенный приложением обработчик события. Его можно вызвать либо до, либо после собственной обработки.

Создание собственного события позволяет разработчику, использующему компонент, возможность создавать собственную обработку этого события. При создании собственного события необходимо сделать следующее:

1. организовать запуск события;

2. объявить тип события;

3. объявить событие.

Для организации запуска события нужно выяснить, что вызывает событие. Это может быть либо некоторое системное событие, которое вызываются Windows и события, которые могут возникнуть при изменении каких-либо свойств объекта. В соответствующем месте - например при изменении свойства компонента - должен вызываться стандартный обработчик события. Случай, когда событие вызывается Windows, рассматривается позднее.

Тип события может быть как один из стандартных, так и собственный. В любом случае это указатель на метод, обычно - на метод-процедуру. Для объявления события нужно описать:

· свойство - имя начинается с Оn;

· поле для хранения значения свойства - имя начинается с F,

· стандартный обработчик события - виртуальный или динамический метод, который должен корректно работать в том случае, если значение свойства не установлено.

Рассмотрим пример: компонент - календарь, событие - изменение даты. Предполагается что разработчик приложения, использующий этот компонент, может захотеть выполнять какие-либо действия при изменении даты:

Все объявленные как published события появятся в инспекторе объектов на странице Events. Определение того, что это событие, происходит не по имени, а по типу свойства.