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

Для создания нестандартного события рекомендуется придерживаться следующей последовательности действий:

1. Определение инициатора события.

2. Определение типа обработчика события.

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

4. Создание метода диспетчеризации.

9.3.1. Определение инициатора события

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

Действия пользователя (манипуляции мышью, нажатие клавиш клавиатуры, действия с джойстиком и т. п.) полностью контролируются операционной системой, которая в ответ на эти действия посылает приложению (компоненту) свои сообщения. Подавляющее большинство действий пользователя имеют поддержку в виде ранее рассмотренных стандартных событий. Инициатором нестандартных событий действия пользователя могут быть при его взаимодействии с нестандартными внешними устройствами типа джойстика или сканера. В этом случае компонент должен перехватить нестандартное сообщение Windows, определив соответствующую процедуру с зарезервированным словом message, подобно тому как определяются соответствующие перехватчики стандартных сообщений. Например, стандартное сообщение WM_PAINT перехватывается следующим образом:

type TMyComponent * class (...) private procedure Paint(var Message: TWMPaint);
message WM_PAINT;
end;

Подробнее тема создания события в ответ на сообщение Windows рассматривается в 9.4.

Выполнение некоторого кода также может служить причиной возникновения нестандартного события. Например, в упоминавшемся в 9.1.3 компоненте FarDirExplorer перед просмотром очередной вложенной папки возбуждается событие BeforeDirChange, обработчик которого может запретить просмотр папки. Если инициатором события является программный код, надобность в создании и перехвате сообщения Windows не возникает. Вместо этого программный код либо сам осуществляет диспетчеризацию события, либо обращается к методу его диспетчеризации.

9.2.3. Изменение обработчиков стандартных событий || Оглавление || 9.3.2. Определение типа обработчика события


Искусство создания компонентов Delphi



Новости за месяц

  • Октябрь
    2019
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс