Зачем прекращать? Полезная вещь Ж:о) Как для себя делал.
Функция рассылает широковещательное сообщение всем вставленным в рабочую область приложения интерфейсам. Обрабатывать оное сообщение следует в обработчике интерфейсных событий (а не табличных или оконных). Если в обработчике вызвать Stop, то рассылка сообщения прервется, и Notify вернет ненулевой результат. Таким образом можно реализовать схему опросов-ответов, так сказать, диалог между интерфейсами.
Но более функциональной мне представляется схема нотификаторов, центральной фигурой которой является разделяемая копия реализации некоторого объектного интерфейса. Эта копия играет роль передатчика сообщений. Выглядит объектный интерфейс приблизительно так:
Код: Выделить всё
objinterface INotifier;
function Notify(...): boolean; // не путать с зарегистрированной функцией
event function OnNotify(...): boolean;
end;
а его реализация и того проще:
Код: Выделить всё
vipinterface Notifier implements INotifier;
interface Notifier;
create view Dummy;
function INotifier.Notify(...): boolean;
{
Result := OnNotify(...);
}
end.
Желающие получать сообщение заводят в своей логической таблице переменную, которая, как уже говорилось, инициализируется ссылкой на разделяемую копию Notifier-а, и подписываются на событие OnNotify. Желающие рассылать сообщение делают то же, но вместо подписки в нужный момент вызывают метод Notify. Таких пар вида "инициация - рассылка" может быть сколь угодно много.
Подобную методу использует, к примеру, мегаинтерфейс редактирования карточек физических лиц в модуле "Кадры" для синхронизации содержимого разных разделов карточки (это теперь отдельные интерфейсы) при изменении позиции в списке персон, удалении или вставке записи и для переключения между разделами. Может и еще для чего, но я всего не помню.