Activación del evento de nivel de objeto

AutoCAD ActiveX

 
Activación del evento de nivel de objeto
 
 
 

Para poder utilizar eventos del nivel de objeto es necesario crear un nuevo módulo de clase y declarar un tipo de objeto AcadApplicacion con eventos. Por ejemplo, suponga que se ha creado un módulo de clase nuevo denominado ModuloEventoClase. La nueva clase contiene la declaración de la aplicación con la palabra clave de VBA WithEvents.

Para crear una clase nueva y declarar Círculo como objeto con eventos

  1. En VBA IDE, inserte un módulo de clase. En el menú Insertar, elija Módulo de clase.
  2. En la ventana Proyecto, elija el módulo de clase que acaba de insertar.
  3. En la ventana Propiedades, cambie el nombre de la clase por Modulo­EventoClase.
  4. Abra la ventana Código de la clase utilizando F7 o elija Código en el menú Ver.
  5. En la ventana de código de la clase, añada la siguiente línea:
Public WithEvents Object As AcadCircle

Después de declararlo, el nuevo objeto con eventos aparece en la lista desplegable de objetos del módulo de clase. Ahora puede escribir procedimientos de evento para el nuevo objeto del módulo de clase. Al seleccionar el nuevo objeto en la lista de objetos, los eventos válidos para dicho objeto aparecerán en la lista desplegable de procedimientos.

Antes de ejecutar los procedimientos, debe conectar el objeto declarado del módulo de clase con el objeto Circle. Para ello, puede utilizar el siguiente código desde cualquier módulo.

Para conectar el objeto declarado con el objeto Automation:

  1. En la ventana Código del módulo principal, añada la siguiente línea a la sección de declaraciones:
    Dim X As New EventClassModule
  2. En la misma ventana, cree un círculo denominado “MyCircle” e inicialícelo como si contuviera eventos:
    Sub InitializeEvents()
     Dim MyCircle As AcadCircle
     Dim centerPoint(0 To 2) As Double
     Dim radius As Double
     centerPoint(0) = 0#: centerPoint(1) = 0#: centerPoint(2) = 0#
     radius = 5#
     Set MyCircle = ThisDrawing.ModelSpace.AddCircle(centerPoint, radius)
     Set X.Object = MyCircle
    End Sub
  3. En el código del módulo principal, añada una llamada a la subrutina InitializeApp:
    Call InitializeEvents

    Después de ejecutar el procedimiento InitializeEvents, el objeto Circle del módulo de clase señala al objeto de círculo creado; los procedimientos de evento del módulo de clase se ejecutan siempre que se activa el evento.

    NotaCuando cree código en VBA, debe proporcionar un gestor de eventos para todos los objetos del evento Modified. De lo contrario, VBA podría terminar de forma inesperada.
    Visualización del área de una polilínea cerrada cada vez que se actualiza

    Este ejemplo crea una polilínea optimizada con eventos. Después el gestor del evento de la polilínea muestra el nuevo área que se crea al cambiar la polilínea. Para activar el evento, cambie el tamaño de la polilínea en AutoCAD. Recuerde que debe ejecutar la subrutina CreatePLineWithEvents para que se active el controlador de eventos.

    Public WithEvents PLine As AcadLWPolyline
    Sub CreatePLineWithEvents()
     ' This example creates a light weight polyline
     Dim points(0 To 9) As Double
     points(0) = 1: points(1) = 1
     points(2) = 1: points(3) = 2
     points(4) = 2: points(5) = 2
     points(6) = 3: points(7) = 3
     points(8) = 3: points(9) = 2
     Set PLine = ThisDrawing.ModelSpace. _
     AddLightWeightPolyline(points)
     PLine.Closed = True
     ThisDrawing.Application.ZoomAll
    End Sub
    Private Sub PLine_Modified _
     (ByVal pObject As AutoCAD.IAcadObject)
     ' This event is triggered when the polyline is resized.
     ' If the polyline is deleted the modified event is still
     ' triggered, so we use the error handler to avoid
     ' reading data from a deleted object.
     On Error GoTo ERRORHANDLER
     MsgBox "The area of " & pObject.ObjectName & " is: " _
     & pObject.Area
     Exit Sub
    ERRORHANDLER:
     MsgBox Err.Description
    End Sub