Тема: Не генерируется событие деактивации (подробности далее)

Для свежесозданных и открытых старых документов не генерируется событие деактивации при переходе в другие документы (через меню Window). Глюк пропадает, только если создать или открыть ещё один документ, находясь в этом свежесозданном (или открытом) чертеже.
Для исследования глюка удобно набрать в Бейсике следующий код:

Private Sub AcadDocument_Activate()
i = 7 'Эта строка только для того, чтобы поставить BREAKPOINT слева от неё
End Sub
Private Sub AcadDocument_Deactivate()
i = 8 'Эта строка только для того, чтобы поставить BREAKPOINT слева от неё
End Sub

И, конечно, поставить BREAKPOINT там, где написано.

Re: Не генерируется событие деактивации (подробности далее)

Неужели не интересно ?

Re: Не генерируется событие деактивации (подробности далее)

Дело не в интересе. Просто, что Вы хотите услышать? Что метод Deactivate работает некорректно (вернее не так, как хотелось бы)? Так это Вы и сами знаете. Почему не работает? Ну а кто его знает. Разбираться ради спортивного интереса - времени жалко.
А вообще-то не понятно, чего Вам дался этот  Deactivate? Из любви к искусству? Не работает, так и хрен с ним. Скажем метод  Activate работает вполне корректно. Так его и используйте. Приблизительно так.

Option Explicit
'Создаем переменную уровня модуля ThisDrawing
Dim deactivateDoc As AcadDocument
'Обрабатываем событие активизации нового документа
Private Sub AcadDocument_Activate()
'Если переменная уже активирована, запускаем нужную процедуру, где делаем все, что необходимо.
If Not deactivateDoc Is Nothing Then
     myProg deactivateDoc
End If
'"Записываем" в переменную новый активный документ.
'Или первый, если АКАД только что запущен.
Set deactivateDoc = AutoCAD.Application.ActiveDocument
End Sub
'Где нибудь в проекте пишете процедуру
Public Function myProg(ByVal deactivateDoc As AcadDocument)
'Или Public Function myProg([b]ByRef[/b] deactivateDoc As AcadDocument)
Dedug.Print deactivateDoc.Name
End Function

Это не вокал, а только эскиз. Но работать будет.

Re: Не генерируется событие деактивации (подробности далее)

Неплохой эскиз, но задачу отслеживания деактивации не решает. Что мне от того, что имя активного чертежа УЖЕ изменилось ? Мне надо было выполнить код ПЕРЕД тем, как! Моя задача простая - при активации прочитать переменные из словаря, при деактивации - записать их туда (возможно, уже изменённые). Здесь существенно, чтобы активация и деактивация обрабатывались как события. А если работает только активация (кстати, бейсик, оказывается, тоже не свободен от глюков при работе в многодокументном режиме;)), то это подобно лодке с одним веслом.
А эту ветку я затеял только с одной "шкурной" целью - узнать, как "грести" на такой "лодочке", послушать, как это делают другие.

Re: Не генерируется событие деактивации (подробности далее)

> Maxim T

задачу отслеживания деактивации не решает

Решает, решает.

Что мне от того, что имя активного чертежа УЖЕ изменилось ? Мне надо было выполнить код ПЕРЕД тем, как!

Почему именно ПЕРЕД тем как? Что, ПОСЛЕ того как активным стал другой документ, со "старым" случается что-то ужасное?

Моя задача простая - при активации прочитать переменные из словаря, при деактивации - записать их туда (возможно, уже изменённые).

Ну и в чем проблема?

Re: Не генерируется событие деактивации (подробности далее)

Да и вообще. Активация, деактивация... Все относительно в этом мире.

Re: Не генерируется событие деактивации (подробности далее)

> bender
Да и вообще, если отбросить демагогию, Басик очередной раз... Как бы это помягче... В общем, не оправдал надежд, причём не только моих.

Re: Не генерируется событие деактивации (подробности далее)

Уважаемый Maxim T, постараюсь кратко и не переходя на личности.
Неоправданные надежды - это лирика и та самая демагогия. VBA - инструмент, имеющий, как и любой другой, свои ограничения. Но которым, как и любым другим, нужно уметь пользоваться. Вы пользоваться им не умеете. Повторю. Пара событий активация-деактивация - это по сути одно и то же событие. Рискну даже высказать как я понимаю крамольную с Вашей точки зрения мысль, что одно из них не нужно вообще. Если необходимо отследить событие перехода из одного документа в другой и при этом сделать какие-нибудь действия над(в) любым(ом) документом(е) данного сеанса работы АКАДа (в частности над тем, который "только что" был активным) - это можно сделать с помощью одного из событий активации/деактивации. Подчеркну: любое действие, над любым документом.
Еще малость по поводу демагогии. Вы не ответили ни на один из моих вопросов. Я понимаю это так, что Вы со всем согласны. Тогда в чем вопрос? Вы теоритическими изысканиями занимаетесь, или дело делаете? Если делом, то см. мое предыдущее сообщение. Если теорией, то корректней надо. С чего Вы решили, что если что-то работает не так как Вам хочется, то это неприменно "глюк" или недоработка разработчиков? В этом надо разбираться.