На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Макросы 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
Данный код работает следующим образом. Ставим флаг. Пробегаем по всем элементам на листе, и если у нас отсутствует хотя бы один из нужных (мы заранее ставим им нужные ид) после удаления, то делаем откат и показываем пользователю предупреждающее окно.



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



Ну а если вам требуется создать макрос для корела, то вы можете написать мне. За небольшую плату я вам с удовольствием помогу.




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








Видео и книги для устаревшего планшета
Перехват очереди печати на C#


© upread.ru 2013-2019
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Напишите и получите ответ в ближайшее время. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru