Метод IVisEventProc.VisEventProc (Visio)
Частная функция-член IVisEventProc , которая обрабатывает уведомления о событиях, передаваемые ему методом EventList.AddAdvise .
Синтаксис
expression. VisEventProc (nEventCode, pSourceObj, nEventID, nEventSeqNum, pSubjectObj, vMoreInfo)
Выражение Переменная, представляющая объект IVisEventProc .
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
nEventCode | Обязательный | Integer | Событие или события, которые произошли. |
pSourceObj | Обязательный | Object | Объект, коллекция EventList которого содержит объект Event , отправляющий уведомление. |
nEventID | Обязательный | Long | Уникальный идентификатор объекта Event в коллекции EventList . |
nEventSeqNum | Обязательный | Long | Порядковый номер события относительно последовательности событий, произошедших в вызывающем экземпляре приложения. |
pSubjectObj | Обязательный | Object | Субъект события, который является объектом, с которым произошло событие. Примеры см. в разделе Примечания. |
vMoreInfo | Обязательный | Variant | Дополнительные сведения о теме события. Дополнительные сведения см. в разделе Примечания. |
Возвращаемое значение
Variant
Примечания
Для обработки уведомлений о событиях создайте модуль класса, реализующий интерфейс IVisEventProc , а затем создайте экземпляр этого класса для передачи в качестве аргумента методу AddAdvise коллекции EventList . Используйте метод AddAdvise для создания объектов Event , отправляющих уведомления.
Параметр nEventCode определяет конкретное событие или события, которые произошли. Аргумент EventCode метода AddAdvise передается в VisEventProc как nEventCode. В рамках процедуры можно использовать любой метод ветвления, чтобы определить, какое событие произошло, и обработать его. В примере, сопровождаемом этим разделом, используется структура принятия решения select case .
В отличие от свойства Index коллекции EventList , nEventID не изменяется при добавлении или удалении объектов Event из коллекции.
В VisEventProc можно использовать следующий код, чтобы получить объект Event , отправляющий уведомление.
pSourceObj. EventList.ItemFromID(nEventID )
Соединение между исходным объектом pSourceObj и объектом Event существует до тех пор, пока не произойдет одно из следующих действий:
Программа удаляет объект Event .
Программа освобождает последнюю ссылку на исходный объект. (Коллекция EventList и объекты Event содержат ссылку на исходный объект.)
Экземпляр приложения Microsoft Visio завершает работу.
Первое событие, возникающее в экземпляре Visio, имеет nEventSeqNum = 1, второе событие = 2 и т. д. В некоторых случаях можно использовать порядковый номер в сочетании со свойством EventInfo для получения дополнительных сведений о событии.
Параметр pSubjectObj для события ShapeAdded — это объект Shape , представляющий только что добавленную фигуру, а субъект события BeforeSelectionDelete — объект Selection , в котором выбираются фигуры, которые должны быть удалены.
Для многих событий vMoreInfo — это строка, аналогичная командной строке, которая передается приложением в выполняемые надстройки. Если уведомление не содержит дополнительных сведений, для этого параметра задано значение Nothing. Дополнительные сведения о параметрах уведомлений для определенного события см. в разделе о конкретном событии в этом справочнике.
Начиная с Visio 2000 , VisEventProc определяется как функция, которая возвращает значение. Однако Visio просматривает только возвращаемые значения из вызовов VisEventProc , передаваемых кодом события запроса. Объекты-приемники, предоставляющие VisEventProc через IDispatch , не требуют изменения. Чтобы изменить существующие обработчики событий, чтобы они могли обрабатывать события запросов, измените процедуру Sub на процедуру Function и верните соответствующее значение. (Дополнительные сведения о событиях запроса см. в этом справочнике по разделам событий с префиксом Query.)
Если nEventCode идентифицирует событие запроса (события с префиксом Query), верните значение True из VisEventProc , чтобы отменить событие, и значение False , чтобы разрешить его выполнение. Значение является произвольным для других событий. Если явное значение не возвращается, Microsoft Visual Basic для приложений (VBA) возвращает пустой Вариант, который Visio интерпретирует как False.
Пример
В этом примере показано, как создать модуль класса, реализующий IVisEventProc для обработки событий, инициируемых исходным объектом в Visio, например объектом Document . Модуль состоит из функции VisEventProc, которая использует блок Select Case для проверки наличия трех событий: DocumentSaved, PageAdded и ShapesDeleted. Другие события относятся к регистру по умолчанию (Case Else). Каждый блок Case создает строку (strMessage), содержащую имя и код события, которое сработает. Наконец, функция отображает строку в окне Интерпретация.
Скопируйте этот пример кода в новый модуль класса в VBA или Visual Basic, назвав модуль clsEventSink. Затем можно использовать модуль приемника событий для создания экземпляра класса clsEventSink и объектов Event , которые отправляют уведомления о срабатывании события в экземпляр класса. Чтобы узнать, как создать модуль приемника событий, см. пример метода AddAdvise .
Implements Visio.IVisEventProc
'Declare visEvtAdd as a 2-byte value
'to avoid a run-time overflow error
Private Const visEvtAdd% = &H8000
Private Function IVisEventProc_VisEventProc( _
ByVal nEventCode As Integer, _
ByVal pSourceObj As Object, _
ByVal nEventID As Long, _
ByVal nEventSeqNum As Long, _
ByVal pSubjectObj As Object, _
ByVal vMoreInfo As Variant) As Variant
Dim strMessage As String
'Find out which event fired
Select Case nEventCode
Case visEvtCodeDocSave
strMessage = "DocumentSaved (" & nEventCode & ")"
Case (visEvtPage + visEvtAdd)
strMessage = "PageAdded (" & nEventCode & ")"
Case visEvtCodeShapeDelete
strMessage = "ShapesDeleted(" & nEventCode & ")"
Case Else
strMessage = "Other (" & nEventCode & ")"
End Select
'Display the event name and the event code
Debug.Print strMessage
End Function
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.