Страница 1 из 1

Про Notify

Добавлено: 03 дек 2007, 15:29
Лена
Подскажите, пожалуйста, про использование Notify...
Я стою в окне редактирования накладной,
жму Ctrl+P... в присоединенной форме вызывается интерфейс, в котором меняются,добавляются спрецификации накладной + изменяется номер накладной.

Но когда я закрываю отчет, то не вижу изменений на экране...

Попробовала
Notify(cmCheckRecord,0)
Notify(cmCheckField,0)

не перерисовывается...

Добавлено: 03 дек 2007, 15:49
edward_K
весь вопрос стоит ли в указанных командах в исходном файле Rescanpanel(#katsopr) ; Rescanpanel(#spsopr). видимо не стоит.
Опять же вы посылаете событие фейсу а не конкретной панели, а эти команды обычно по таблам срабатывают.
Вы еще сделайте свой фейсик с этими событиями и сообщениями в этих событиях. Запустите его немодально. Потом выполните свою форму - по идее этот фейс должен их тоже поймать. А вообще в vipprog.chm я этой функции уже не нашел - могут прекратить ее использование вовсе.

Добавлено: 06 дек 2007, 01:56
Screw
Зачем прекращать? Полезная вещь Ж:о) Как для себя делал.

Функция рассылает широковещательное сообщение всем вставленным в рабочую область приложения интерфейсам. Обрабатывать оное сообщение следует в обработчике интерфейсных событий (а не табличных или оконных). Если в обработчике вызвать 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. Таких пар вида "инициация - рассылка" может быть сколь угодно много.

Подобную методу использует, к примеру, мегаинтерфейс редактирования карточек физических лиц в модуле "Кадры" для синхронизации содержимого разных разделов карточки (это теперь отдельные интерфейсы) при изменении позиции в списке персон, удалении или вставке записи и для переключения между разделами. Может и еще для чего, но я всего не помню.