Макросы CorelDraw: модальное окно и обработка событий документа


Продолжим наш цикл заметок по макросам на CorelDRAW. В этом материале я не раскрою больших секретов, но все же дам некоторые советы, которые помогут начинающим разработчикам скриптов под данное программное обеспечение.

Немодальное окно

Окно формы макроса корелдрав по умолчанию создается модальным для документа (точнее, даже для всей программы). Что это значит? Это значит, что при работе такого макросе у вас не получится что-то делать с изображением и всей программмой. Иногда это необходимо, чтобы пользователь не мог менять в процессе работы исходные данные, но в большинстве случае все же так делать не надо.

Чтобы пользователь мог взаимодействовать с документом при работе макроса, стоит просто установить свойство (properties) ShowModal в значение False.



Обработка событий документа

Кстати, тем интересная. Пришлось порыться в сети, чтобы корректно заработало (конкретно мне надо было запретить удаление определенных объектов). Хотя сейчас, когда уже все понятно – выглядит очень просто. Ну это всегда так. Итак, для обработки событий документа надо сначала определить переменную документа:

Public WithEvents App As Document
Далее в событие при активации формы его инициализируем:

Private Sub UserForm_Activate()
Set App = ActiveDocument
End Sub
Вот теперь можно и работать с событиями. Обработаем, например, удаление элемента:

Private Sub App_ShapeDelete(ByVal Count As Long)
Dim flag As Integer
flag = 0
Dim MyShape As Shape
For Each MyShape In ActiveDocument.SelectableShapes.All
If MyShape.StaticID = obRez Or MyShape.StaticID = grId Then
flag = flag + 1
End If
Next MyShape
If flag <> 2 Then
App.Undo
MsgBox "Действие невозможно. Эти объекты нельзя удалять!"
End If
End Sub
Данный код работает следующим образом. Ставим флаг. Пробегаем по всем элементам на листе, и если у нас отсутствует хотя бы один из нужных (мы заранее ставим им нужные ид) после удаления, то делаем откат и показываем пользователю предупреждающее окно.



Аналогично можно обработать и другие события – закрытие документа, запрос закрытия, создание и удаление страницы, перемещение и трансформация объекта и другие. Вот их список, в вашем редакторе визуал бейсика для приложений тоже будет похожее окно:



Ну а если вам требуется создать макрос для корела, то вы можете написать мне. За небольшую плату я вам с удовольствием помогу.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, CorelDraw, VBA, макросы




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Запуск видео при наведении
История одной и решение любой проблемы с сайтом
Как заменить метод jQuery Ready() помощью простого JavaScript