logo search
Лекции програм_new_последняя версия1

Особенности реализации событий

Сообщения о наступлении события поступают от Windows. Их сотни. Работать с ними сложно. Одно из больших достижений Delphi состоит в том, что программист не работает с со­общениями Windows, хотя такая возможность у него есть. Он работает со стандартными событиями Delphi, а их около 20 и работать с ними проще.

Рассмотрим, как реализованы события.

Во время выполнения приложения Delphi вызовы обработчиков событий находятся в мето­дах, обрабатывающих сообщения Windows. В этих методах проверяется, известен ли адрес обработчика события, и, если он есть, то обработчик события вызывается.

События различны, но общим для них является параметр Sender типа TObject и ключевая фраза of object после описания типа. Параметр Sender: TObject – отправитель, он указывает на источник события. Помимо явно описанных параметров методу передается еще и Self – указатель на вызвавший его экземпляр (объект).

Самый простой тип события – TNotifyEvent, сообщение об этом событии не имеет других параметров, кроме Sender.

Тип события является указателем на метод, он определяется в самом простом стандартном случае так:

type

TNotifyEvent= procedure( Sender:TObject) of object;

Здесь Sender - параметр, указывающий на источник события.

Обратите внимание! Тип TNotifyEvent - это процедурный тип. Тогда событие OnClick - это свойство процедурного типа TNotifyEvent:

Property OnClick:TNotifyEvent;

События имеют разное количество и тип параметров в зависимости от происхождения и предназначения. Delphi определяет состав событий, на которые может реагировать каждый управляющий элемент формы. Список этих событий представляется на странице Events Инспектора объектов для каждого компонента. Традиционно может быть предусмотрена реакция на 3 вида событий от пользователя:

  1. на нажатие и отпускание любой из кнопок мыши,

  2. перемеще­ние курсора мыши

  3. нажатие клавиш клавиатуры.

При извещении о нажатии клавиши методу передает­ся код нажатой клавиши, а при передвижении мыши - координаты ее положения.

По умолчанию, форма и компоненты не отвечают ни на какое заранее установленное со­бытие. Чтобы приложение реагировало на определенные события, должен быть написан код (метод), определяющий его реакцию на данное событие. Для этого Delphi в разделе interface класса формы добавит строку с заголовком метода обработки события и в разделе реализации implementation разместит заголовок метода и пустой блок для реализации этого метода.