Поделиться через


Метод 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 и обратная связь.