Тема: Как организовать отслеживание события(Modified) для произвольного числа объектов

Есть интересная проблемка,как отследить событие объектного уровня для нескольких объектов,число которых может изменяться.Обычно это делается объявлением публичной переменной Withevents в модуле класса,но в этом случае переменная может быть связана лишь с одним объектом.Возможно ли назначить одну процедуру обработки события одновременно нескольким объектам или может в AutoCAD VBA это нереально?

Re: Как организовать отслеживание события(Modified) для произвольного числа объектов

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

Re: Как организовать отслеживание события(Modified) для произвольного числа объектов

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

Re: Как организовать отслеживание события(Modified) для произвольного числа объектов

Одна проблема хуже другой.Сейчас,при работе процедуры обработки события,Acad просто игнорирует инструкции изменить координаты вершин свободного объекта(LWPolyline),совершенно не относящегося к этой процедуре обработки.При этом не возникает никаких ошибок,просто эти инструкции проходят безрезультатно.Помогите разобраться,в чем может быть причина?

Re: Как организовать отслеживание события(Modified) для произвольного числа объектов

так, необходимы подробности:
1. над каким объектом (объектами) производятся действия;
2. какие действия проводятся;
3. что при этом должно выполняться;
4. описан ли обработчик этого действия в "производном классе"

Re: Как организовать отслеживание события(Modified) для произвольного числа объектов

Отслеживается событие Modified для объекта LWPolyline с двумя вертексами.Объект может быть перемещен пользователем либо целиком,либо один из вертексов.При этом есть еше один LWPolyline с четырьмя вертексами,  изначально имеющий общую точку с перемещаемым.Задача в том,чтобы общая точка сохранилась после модификации,поэтому в обработчике события для первого объекта содержаться инструкции изменить координаты двух,ближайших к общей точке,первых или последних вертексов второго объекта(координаты последнего и есть общая точка).Проблема в том,что эти инструкции проходят безрезультатно,т.е. координаты остаются неизменными.Обработчик события описан в отдельном классе,там же и переменная(свойство) Withevents.Для отслеживания события для нескольких объектов создан публичный массив из экземпляров класса,каждому элементу которого назначен отдельный объект.В результате обработчик стартует для каждого из объектов,причем Acad видит и результаты модификации(при отладке ясно видно,что координаты общей точки измененного и требующего изменения объектов разные),но привязать изменяемый объект к измененному невозможно,он остается таким,как был.Еще непонятно,что такое "производный класс",может здесь собака порылась?

Re: Как организовать отслеживание события(Modified) для произвольного числа объектов

1) Событие не может произойти в тех экземплярах класса, которые не подвергались изменению. Это проверенный факт, для этого всё это хозяйство и затевалось.
2) При модификации из программы событие происходит так же, как и при модификации пользователем. Поэтому необходимо при модификации объекта программой делать быстрый выход из процедуры обработки собития без изменения каких либо свойств объекта. Если этого не сделать, то программа зациклит.

Re: Как организовать отслеживание события(Modified) для произвольного числа объектов

to JS - совершенно справедливо, тут надо быть весьма внимательным, и видимо необходим некий механизм флагов состояния.
to StealtH - если я правильно понял, суть такова:
есть, например, 2-е полилинии имеющие какую-то общую точку;
требуется:
при перетаскивании одной из п.линий, так модифицировать 2-ю п.линию, чтобы сохранилась общая точка с 1-й п.линией.
вот тут и возникает циклический вызов обработчиков событий, как написал JS.
а посему необходим именно механизм флагов, чтобы при вызове обработчика события для изменяемой 1-й п.линии ( в котором и происходит корректировка координат для 2-й п.линии ) не работал обработчик события для 2-й п.линии, т.е. если флаг установлен - завершить выполнения обработчика, тогда обработчик 1-й полилинии нормально отработает и сбросит флаг.
вот в таком разрезе.  :)
а "производный класс" - это то, что у тебя имеется класс с Withevents (и я не зря использовал кавычки, потому как в VBA нет механизмов наследования классов)

Re: Как организовать отслеживание события(Modified) для произвольного числа объектов

Дело в том,что обработчик события изначально действует лишь для объектов,которые предположительно будут изменяться пользователем,и модифицирует объекты,которым не назначен экземпляр класса и для которых нет своего обработчика,поэтому в этом случае все срабатытвает штатно,не зацикливаясь.Проблема была в том,что обращение к свойствам в похоже должно быть организовано иначе.Acad не воспринимает инструкции изменить отдельный элемент(или несколько эл-тов) какого-либо свойства,если это свойство-массив,но если перезадать этот массив целиком,то все работает ровно.Интересно,есть ли этому объяснение?Возник еще вопрос,правда не критический,но любопытный: если в модуле класса,в обработчике события есть инструкция
ThisDrawing.Regen acAllViewports или ThisDrawing.Regen acActiveViewport
причем она принимается без ошибок,но по завершении обработчика Acad летит к чертям(FATAL ERROR:Unhandled access violation...)Что же в этом такого деструктивного?
Насчет флагов,очень резонно,для последующих обработчиков по любому использовать нужно.Спасибо!