Ноу Інти, лекція, програмування на vba

відстеження подій

Існує три типи подій - рівня додатки, рівня документа і рівня об'єкта. Події першого типу пов'язані з відкриттям, збереженням, закриттям і печаткою документа, завантаженням-розвантаженням додатків, зміною системних змінних. Події другого типу пов'язані з додаванням, видаленням, зміною об'єктів, активацією меню. зміною розмірів вікна малюнка, регенерацією, відкриттям, закриттям, печаткою креслення та ін. І події рівня об'єкта виникають тільки тоді, коли об'єкт змінився.

Написання обробників подій

Обробники подій рівня додатки

Дані події не стають автоматично доступні при завантаженні VBA. тому вони повинні бути дозволені вручну. Після цього будуть доступні наступні події:

  • AppActivate - відбувається відразу перед активацією головного вікна програми;
  • AppDeactivate - відбувається відразу перед деактивацією головного вікна програми;
  • ARXLoaded - відбувається при завантаженні ARX -Додатків;
  • ARXUnLoaded - відбувається при вивантаженні ARX -Додатків;
  • BeginCommand - відбувається як тільки почала виконуватися команда, але ще не завершена;
  • BeginFileDrop - відбувається коли файл "скинутий" в головне вікно програми;
  • BeginLISP - відбувається коли AutoCAD отримує запит на виконання вираження LISP;
  • BeginModal - відбувається відразу перед появою модального вікна;
  • BeginOpen - відбувається відразу після того як AutoCAD отримує запит на відкриття файлу;
  • BeginPlot - відбувається відразу після того як AutoCAD отримує запит на друк;
  • BeginQuit - відбувається відразу перед тим як завершується сесія;
  • BeginSave - відбувається відразу після отримання AutoCADом запиту на збереження;
  • EndCommand - відбувається відразу при завершенні команди;
  • EndLISP - відбувається відразу при завершенні обчислення виразу LISP;
  • EndModal - відбувається відразу після закриття модального вікна діалогу;
  • EndOpen - відбувається відразу після закінчення процесу відкриття креслення;
  • EndPlot - відбувається відразу після завершення відправки на принтер;
  • EndSave - відбувається відразу по завершенні збереження;
  • LISPCancelled - відбувається при скасуванні вираження LISP;
  • NewDrawing - відбувається відразу перед створенням креслення;
  • SysVarChanged - відбувається коли змінюється значення системної змінної;
  • WindowChanged - відбувається при зміні вікна програми;
  • WindowMovedOrResized - відбувається при переміщенні або зміні розміру вікна програми.

Як дозволити події рівня додатки

Перед тим як почати використовувати події рівня додатки слід створити новий модуль класу і оголосити об'єкт типу AcadApplication із застосуванням ключового слова WithEvents. Порядок роботи наступний:

  1. У VBA IDE вставити модуль класу
  2. Вибрати новий модуль класу в вікні проекту
  3. Змінити ім'я на EventClassModule
  4. У вікні коду для класу додати рядок:

Після того як новий об'єкт оголошений з подіями він з'явиться у вікні списку об'єктів в модулі класу і можна вибирати процедури подій для новоствореного об'єкта зі списку. Однак перед тим як запустити процедуру потрібно з'єднати оголошений об'єкт з об'єктом Application. робиться це за допомогою такого коду в вікні основного модуля:

Після того як виконається процедура InitializeEvents об'єкт App модуля класу буде вказувати на об'єкт Додаток (Application) Приклад перехоплення процесу завантаження, коли файл методом Drag-And-Drop перенесений у вікно AutoCAD. виводить вікно повідомлення з ім'ям файлу

Обробка подій рівня документа

Події рівня документа постійно відбуваються в процесі роботи AutoCADа. Це означає, що вони автоматично робляться доступними при завантаженні проекту VBA. проте не доступні, наприклад, для VB. Тобто для інших ActiveX Automation додатків їх треба вирішувати вручну. Доступні наступні події:

  • Activate - відбувається в момент активації документа;
  • BeginClose - відбувається перед закриттям документа;
  • BeginCommand - відбувається відразу після початку виконання команди, але до її завершення;
  • BeginDoubleClick - відбувається в момент подвійного клацання мишею;
  • BeginLISP - відбувається відразу після отримання AutoCADом запиту на обчислення виразу LISP;
  • BeginPlot - відбувається відразу після отримання AutoCADом запиту на друк документа;
  • BeginRightClick - відбувається після "клацання" мишею у вікні документа;
  • BeginSave - відбувається відразу після отримання AutoCADом запиту на збереження документа;
  • BeginShortcutMenuCommand - відбувається після "клацання" мишею, але до появи спливаючого меню в режимі команд;
  • BeginShortcutMenuDefault - відбувається після "клацання" мишею, але до появи спливаючого меню в режимі за замовчуванням;
  • BeginShortcutMenuEdit - відбувається після "клацання" мишею, але до появи спливаючого меню в режимі редагування;
  • BeginShortcutMenuGrip - відбувається після "клацання" мишею, але до появи спливаючого меню в режимі "ручки";
  • BeginShortcutMenuOsnap - відбувається після "клацання" мишею, але до появи спливаючого меню в режимі об'єктної прив'язки;
  • Deactivate - відбувається при деактивації вікна документа;
  • EndCommand - відбувається відразу після завершення команди;
  • EndLISP - відбувається при завершенні обчислення виразу LISP;
  • EndPlot - відбувається після відправки документа на друк;
  • EndSave - відбувається коли закінчено збереження документа;
  • EndShortcutMenu - відбувається після появи спливаючого меню;
  • LayoutSwitched - відбувається після перемикання на інший Layout;
  • LISPCancelled - відбувається коли перервано обчислення виразу LISP;
  • ObjectAdded - відбувається коли доданий об'єкт;
  • ObjectErased - відбувається якщо було вийнято об'єкт;
  • ObjectModified - відбувається коли змінений об'єкт;
  • SelectionChanged - присходит коли змінений вибір;
  • WindowChanged - відбувається коли змінено вікно документа;
  • WindowMovedOrResized - відбувається відразу після зміни розміру або переміщення вікна документа.

Приклад кодування обробників подій рівня документа

Для цього потрібно просто вибрати об'єкт AutocadDocument з меню, що випадає у вікні коду середовища VBA IDE. Доступні події з'являться у вікні процедур, після вибору будь-якої з них буде вставлений каркас процедури обробки події. Дані процедури будуть стосуватися тільки активного документа. Приклад поновлення спливаючого меню при виникненні подій BeginShortcutMenuDefault і EndShortcutMenu шляхом додавання до нього пункту. Зміна не впливає на файли меню.

Обробка подій рівня об'єкта

Події рівня об'єкта не доступні на момент завантаження VBA. Після того як вони зроблені доступні стає доступно подія Modified. Наступний приклад створює полілінію з обробником події, який показує нову площу при зміні полилинии.

Схожі статті