Share via


Método EventList.AddAdvise (Visio)

Agrega un objeto Event a la colección EventList del objeto de origen cuyos eventos desea recibir. Cuando se producen los eventos seleccionados, el objeto de origen notifica al objeto receptor.

Sintaxis

expresión. AddAdvise( _EventCode_ , _SinkIUnkOrIDisp_ , _IIDSink_ , _TargetArgs_ )

Expresión Variable que representa un objeto EventList .

Parameters

Nombre Obligatorio/opcional Tipo de datos Descripción
EventCode Obligatorio Integer Eventos que generan notificaciones.
SinkIUnkOrIDisp Obligatorio Variant Referencia a un interfaz COM en el objeto que va a recibir notificaciones de evento.
IIDSink Obligatorio String Reservado para uso futuro. Debe ser "".
TargetArgs Obligatorio String Cadena que se pasa al objeto Eventpara establecer su propiedad TargetArgs.

Valor devuelto

Evento

Comentarios

Los objetos de evento creados con el método AddAdvise tienen una propiedad Action de visActCodeAdvise. No son persistentes, es decir, no se pueden almacenar con un documento de Visio y deben volver a crearse en tiempo de ejecución.

El objeto de origen cuya colección EventList contiene el objeto Event establece el ámbito en el que se notifican los eventos. Los eventos se notifican para el objeto de origen y los objetos de niveles inferiores en la jerarquía del modelo de objetos. Por ejemplo, para recibir una notificación cuando se guarda un documento determinado, agregue un objeto Event para el evento DocumentSaved a la colección EventList de ese documento. Para recibir una notificación cuando se abra cualquier documento en una instancia de la aplicación, agregue el objeto Event a la colección EventList del objeto Application.

Crear objetos Event es una forma común de controlar los eventos de C++ u otras soluciones que no sean de Microsoft Visual Basic. Cuando se usa la palabra clave WithEvents de Visual Basic para controlar eventos, se activan todos los eventos del conjunto de eventos de un objeto de origen. Sin embargo, cuando se crean objetos Event para controlar los eventos, sólo se notificarán al programa los eventos seleccionados. Dependiendo de la solución, esto puede mejorar el rendimiento.

El argumento EventCode es a menudo una combinación de constantes. Por ejemplo, visEvtMod + visEvtCell es el código de evento del evento CellChanged . Las constantes de evento se declaran en la biblioteca de tipos de Visio e incluyen el prefijo visEvt. Para encontrar un código de evento para el evento que desea crear, vea el tema sobre los códigos de evento.

Los argumentos que se pasan al método AddAdvise establecen los valores iniciales de las propiedades Event, Action (visCodeRunAddAdvise) y TargetArgs del objeto Event.

A partir de Visio 2002, se pueden utilizar filtros de eventos para delimitar los eventos que se van a recibir en el programa. Los eventos se pueden filtrar por objeto, celda, rangos de celdas o identificador de comando. Para obtener información detallada sobre cómo utilizar los filtros de eventos, vea los temas de los métodos que llevan el prefijo SetFilter y GetFilter.

Los objetos de evento creados con el método AddAdvise tienen una propiedad Action de visActCodeAdvise. No son persistentes, es decir, no se pueden almacenar con un documento de Visio y deben volver a crearse en tiempo de ejecución.

El objeto de origen cuya colección EventList contiene el objeto Event establece el ámbito en el que se notifican los eventos. Los eventos se notifican para el objeto de origen y los objetos de niveles inferiores en la jerarquía del modelo de objetos. Por ejemplo, para recibir una notificación cuando se guarda un documento determinado, agregue un objeto Event para el evento DocumentSaved a la colección EventList de ese documento. Para recibir una notificación cuando se abra cualquier documento en una instancia de la aplicación, agregue el objeto Event a la colección EventList del objeto Application.

Crear objetos Event es una forma común de controlar los eventos de C++ u otras soluciones que no sean de Microsoft Visual Basic. Cuando se usa la palabra clave WithEvents de Visual Basic para controlar eventos, se activan todos los eventos del conjunto de eventos de un objeto de origen. Sin embargo, cuando se crean objetos Event para controlar los eventos, sólo se notificarán al programa los eventos seleccionados. Dependiendo de la solución, esto puede mejorar el rendimiento.

El argumento EventCode es a menudo una combinación de constantes. Por ejemplo, visEvtMod + visEvtCell es el código de evento del evento CellChanged . Las constantes de evento se declaran en la biblioteca de tipos de Visio e incluyen el prefijo visEvt. Para encontrar un código de evento para el evento que desea crear, vea el tema sobre los códigos de evento.

Los argumentos que se pasan al método AddAdvise establecen los valores iniciales de las propiedades Event, Action (visCodeRunAddAdvise) y TargetArgs del objeto Event.

A partir de Visio 2002, se pueden utilizar filtros de eventos para delimitar los eventos que se van a recibir en el programa. Los eventos se pueden filtrar por objeto, celda, rangos de celdas o identificador de comando. Para obtener información detallada sobre cómo utilizar los filtros de eventos, vea los temas de los métodos que llevan el prefijo SetFilter y GetFilter.

Habilitar el programa para que pueda controlar las notificaciones de evento de Microsoft Visual Basic o Visual Basic para Aplicaciones

Para controlar las notificaciones, debe crear un módulo de clase que implemente la interfaz IVisEventProc y, a continuación, debe crear una instancia de esta clase para pasarla como argumento al método AddAdvise.

La interfaz IVisEventProc contiene una sola función con la declaración siguiente:

Implements IVisEventProc 
 
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  
End Function

En la tabla siguiente se enumeran las descripciones de los argumentos en VisEventProc.

Argumento Descripción
nEventCode Eventos que se han producido. Se puede proporcionar un objeto diferente para cada evento o un solo objeto que recibe todas las notificaciones y cambia internamente basándose en nEventCode.
pSourceObj Objeto cuya colección EventList contiene el objeto Event que desencadenó la notificación.
nEventID Identificador único del objeto Event en la colección EventList. (A diferencia de la propiedad Index de la colección EventList , nEventID no cambia, ya que los objetos Event se agregan o eliminan de la colección).
Obtenga el objeto Event de VisEventProc mediante el código siguiente: pSourceObj .EventList.ItemFromID(nEventID )
nEventSeqNum Posición ordinal del evento con respecto a la secuencia de los eventos que se han producido en la instancia de la aplicación que realiza la llamada. El primer evento que se produce en una instancia de Visio tiene el número de secuencia 1, el segundo evento 2 y así sucesivamente. En algunos casos, puede usar el número de secuencia junto con la propiedad EventInfo para obtener más información sobre el evento.
pSubjectObj Objeto al que hace referencia el evento. Por ejemplo, el evento ShapeAdded trata de un objeto Shape que representa la forma que se acaba de agregar, mientras que el evento BeforeSelectionDelete trata de un objeto Selection en el que están seleccionadas las formas que están a punto de eliminarse.
vMoreInfo Información adicional del objeto al que hace referencia el evento. Para muchos eventos, es una cadena similar a la línea de comandos que la aplicación pasa a los complementos que ejecuta. Si la notificación no incluye información adicional, este parámetro tiene el valor Nothing. Para obtener más información sobre los parámetros de notificación para un evento determinado, consulte el tema de evento determinado en esta referencia.

Si nEventCode identifica un evento de consulta (eventos con el prefijo Query), devuelva True para cancelar el evento y False para permitir que suceda. El valor es arbitrario para otros eventos. Si no se devuelve ningún valor explícito, Microsoft Visual Basic para Aplicaciones (VBA) devuelve un valor de tipo Variant, que Visio interpreta como False.

La conexión entre el objeto de origen y el objeto Event existe hasta que ocurra una de las siguientes situaciones:

  • El programa elimina el objeto Event.
  • El programa libera la última referencia al objeto de origen. (La colección EventList y los objetos Event contienen una referencia en su objeto de origen).
  • La aplicación finaliza.

A partir de Visio 2000, VisEventProc se define como una función que devuelve un valor. Sin embargo, Visio solo examina los valores devueltos de las llamadas a VisEventProc que se pasan a un código de evento de consulta. Los objetos de evento que proporcionan VisEventProc a través de IDispatch no requieren ningún cambio. Para modificar los controladores de eventos existentes para que puedan controlar eventos de consulta, cambie el procedimiento Sub a un procedimiento Function y devuelva el valor adecuado. (Para obtener más información sobre los eventos de consulta, consulte esta referencia para los temas de eventos con el prefijo Query).

Ejemplo:

En este ejemplo se muestra cómo crear un módulo de clase para controlar los eventos desencadenados por un objeto de origen en Microsoft Office Visio, como el objeto Document. El módulo se compone de la función VisEventProc, que usa un bloque Select Case para comprobar la existencia de tres eventos: DocumentSaved, PageAdded y ShapesDeleted. Los demás eventos se procesan en el bloque predeterminado Case Else. Cada bloque Case crea una cadena ( strMessage ) que contiene el nombre y el código de evento del evento que se ha desencadenado. Finalmente, la función muestra la cadena en la ventana Inmediato.

Copie este código de ejemplo en un nuevo módulo de clase de Microsoft Visual Basic para Aplicaciones (VBA) o Visual Basic, y asígnele el nombre clsEventSink. Entonces, podrá utilizar el siguiente módulo receptor de eventos para crear una instancia de la clase clsEventSink y objetos Event que envíen notificaciones del desencadenamiento de eventos a la instancia de la clase.

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

El siguiente módulo de VBA muestra cómo utilizar el método AddAdvise para recibir eventos. El módulo contiene dos procedimientos públicos.

El procedimiento CreateEventObjects crea una instancia de una clase (de control de eventos) de objetos receptores denominada clsEventSink que se pasa al método AddAdvise y que recibe las notificaciones de los eventos. Además, el procedimiento crea tres objetos Event para enviar notificaciones del desencadenamiento de tres eventos originados por el objeto Document al objeto receptor: DocumentSaved, PageAdded y ShapesDeleted.

El procedimiento DeleteEventObjects elimina estos objetos Event cuando el programa deja de utilizarlos.

La clase clsEventSink implementa la interfaz IVisEventProc.

En el ejemplo siguiente se supone que hay un documento activo en la ventana de aplicación de Visio.

Option Explicit 
 
Private mEventSink As clsEventSink 
 
Dim vsoDocumentEvents As Visio.EventList       
Dim vsoDocumentSavedEvent As Visio.Event  
Dim vsoPageAddedEvent As Visio.Event  
Dim vsoShapesDeletedEvent As Visio.Event 
    
'Declare visEvtAdd as a 2-byte value 
'to avoid a run-time overflow error 
Private Const visEvtAdd% = &H8000  
 
Public Sub CreateEventObjects()      
 
    'Create an instance of the clsEventSink class 
    'to pass to the AddAdvise method. 
    Set mEventSink = New clsEventSink 
  
    'Get the EventList collection of the active document. 
    Set vsoDocumentEvents = ActiveDocument.EventList  
 
    'Add Event objects that will send notifications. 
    'Add an Event object for the DocumentSaved event. 
    Set vsoDocumentSavedEvent= vsoDocumentEvents.AddAdvise( _  
     visEvtCodeDocSave, mEventSink, "", "Document saved...")  
 
    'Add an Event object for the PageAdded event. 
    Set vsoPageAddedEvent= vsoDocumentEvents.AddAdvise( _  
     visEvtAdd + visEvtPage, mEventSink, "", "Page added...")  
 
    'Add an Event object for the ShapesDeleted event. 
    Set vsoShapesDeletedEvent = vsoDocumentEvents.AddAdvise( _  
     visEvtCodeShapeDelete, mEventSink, "", "Shapes deleted...")  
 
End Sub   
 
Public Sub DeleteEventObjects()  
 
    'Delete the Event object for the DocumentSaved event.    
    vsoDocumentSavedEvent.Delete  
    Set vsoDocumentSavedEvent = Nothing 
 
    'Delete the Event object for the PageAdded event. 
    vsoPageAddedEvent.Delete  
    Set vsoPageAddedEvent = Nothing 
 
    'Delete the Event object for the ShapesDeleted event.  
    vsoShapesDeletedEvent.Delete  
    Set vsoShapesDeletedEvent = Nothing 
 
End Sub

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.