Вход


Главная страница >> Учебный процесс >> Конспекты >> Delphi. Библиотека визуальных компонентов VCL >> Структура справочника и соглашения >> События и делегирование >> Делегирование событий
Переход на главную страницу

Сервер поддерживается
кафедрой информатики и вычислительной техники ГрГУ
тел. +375-(0)152-445-101
E-mail :
kadan@grsu.grodno.by


[Назад]    [Содержание ]    [Вперед]

  


Делегирование событий


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

Object1.OnMouseMove := Object2.OnMouseMove ;

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

Можно также при необходимости выбирать один из нескольких возможных вариантов обработчиков событий.

Но какой механизм позволяет подменять обработчики, ведь это не просто процедуры, а методы? Здесь как нельзя кстати приходится введенное в Object Pascal понятие указателя на метод. Напомним, что помимо явно описанных параметров методу передается еще и указатель на вызвавший его экземпляр (Self). Вы можете описать тип процедуры, которая будет совместима по присваиванию с методом (т. е. предусматривать получение Self). Для этого в ее описание нужно добавить зарезервированные слова of object. Указатель на метод ? это указатель на такую процедуру.

type
══TMyEvent = procedure(Sender: TObject; var AValue: Integer) of object;
══T1stObject = class;
════FOnMyEvent: TMyEvent;
════property OnMyEvent: TMyEvent read FOnMyEvent write FOnMyEvent;
══end ;
══T2nd0bject = class;
════procedure SetValue1(Sender: TObject; var AValue: Integer);
════procedure SetValue2(Sender: TObject; var AValue: Integer);
══end;
══.....................
══var
════Obj1: T1stObject;
════Obj2: T2nd0bject;
══begin
════Obj1 := T1stObject.Create;
════Obj2 := T2nd0bject.Create;
════Obj1.OnMyEvent := Obj2.SetValue1;
════Obj1.OnMyEvent := Obj2.SetValue2;
══end.

Как в этом примере, так и повсюду в Delphi за свойствами-событиями стоят поля, являющиеся указателями на метод. Таким образом, при делегировании можно присваивать методы других классов. Здесь обработчиком события OnMyEvent объекта Obj1 по очереди выступают методы SetValue1 и SetValue2 объекта Obj2.



[Назад]    [Содержание ]    [Вперед]

  


Для комментария : kadan@grsu.grodno.by

  
За содержание страницы отвечает Гончарова М.Н.
©
Кафедра СПиКБ, 2002-2017