Программно отписаться от события

Автор SerGoVec, 24.10.16, 19:00:00

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

SerGoVec

Всем привет!

Мне очень нужно подписаться на события для панели свойств PropertyManagerEvent и на события от окна документа DocumentFrameEvent. Примеры подписки и отписки от событий есть в примерах step12 и cube. За основу был взят пример Cube. Они замечательно работают по отдельности. Мне же нужно объединить эти 2 события для своего проекта. Подписаться у меня получилось - см. 2 рисунок.

Но как теперь отписаться? При попытке отписаться возникает вот такая ошибка (cBaseEvents.pas) - см. 1 рисунок.

Для того, чтобы подписаться на события PropertyManagerEvent и DocumentFrameEvent в cBaseEvents.pas переопределил конструктор cBaseEvent.CreateByObj, так как события PropertyManagerEvent и DocumentFrameEvent принимают разное количество параметров - см. 3 рисунок.

Конструктор DocumentFrameEvent - см. 6 рис.
Конструктор PropertyManagerEvent  - см. 7 рис.

Подписка/отписка на события панели свойств (PropertyManagerEvent ) осуществляется в главном файле Cube1.pas при подключении/отключении библиотеки -см. 8 рис.

Как можно решить эту проблему?

SerGoVec

8 рисунок

Нужно отписаться от IDocumentFrameNotify раньше, чем закроется документ, плюс проверять, что отписка прошла успешно, в примерах проверки нет.

SerGoVec

Вроде решилось очень просто). Надо было принудительно еще закрывать события cBaseEvent и событие панели свойств PropertyManager в событии приложения ApplicationEvent.ApplicationDestroy(). Причем в step 12 так и было, я не заметил просто.