启用应用程序层事件

AutoCAD ActiveX/VBA

 
启用应用程序层事件
 
 
 

必须先创建新的类模块,并声明包含事件的 AcadApplication 类型的对象,然后才能使用应用程序层事件。例如,假设创建一个称为 EventClassModule 的新类模块。该模块包含带有 VBA 关键字 WithEvents 的应用程序声明。

创建新类并声明包含事件的 Application 对象的步骤

  1. 在 VBA IDE 中,插入类模块。在“插入”菜单中,选择“类模块”。
  2. 在“工程”窗口中,选择该新类模块。
  3. 在“特性”窗口中,将类名改为 EventClass-Module。
  4. 使用 F7 键或通过依次选择菜单选项“查看”“代码”来打开该类的“代码”窗口。
  5. 在该类的“代码”窗口中,添加以下行:
Public WithEvents App As AcadApplication

声明包含事件的新对象之后,新对象将出现在该类模块的“对象”下拉列表中,用户可以在该类模块中为新对象编写事件过程。(在“对象”框中选中新对象时,该对象的有效事件会显示在“过程”下拉列表框中。)

然而,在运行这些过程之前,必须将类模块中的声明对象与 Application 对象相连接。可以在任何模块中使用以下代码完成此操作。

将声明的对象与 Application 对象相连接的步骤

  1. 在主模块的“代码”窗口中,向声明部分添加以下行:
    Dim X As New EventClassModule
  2. 在相同窗口中,添加以下子例程:
    Sub InitializeEvents()
    Set X.App = ThisDrawing.Application
    End Sub
  3. 在主模块的代码中,添加对 InitializeEvents 子例程的调用:
    Call InitializeEvents

运行 InitializeEvents 过程之后,类模块中的 App 对象会指向指定的 Application 对象,并且类模块中的事件过程会在事件发生时运行。

将图形拖放到 AutoCAD 中时,提示继续

本例在将文件拖放到 AutoCAD 中时,会中断加载进程,并显示一个消息框,其中包含被拖放文件的名称以及“是”/“否”/“继续”按钮,以确定是否继续加载或显示文件。如果用户选择取消操作,那么该决定会通过 BeginFileDrop 事件的 Cancel 参数返回,并且不加载文件。

Public WithEvents ACADApp As AcadApplication
      
Sub Example_AcadApplication_Events()
 ' 本例初始化公有变量 (ACADApp)
 ' 该变量用于中断 AcadApplication 事件
 '
 ' 必须先运行此过程!
      
 ' 可以从 ThisDocument 对象获取应用程序,
 ' 但是这将需要打开图形,
 ' 因此选择从系统抓取。
 Set ACADApp = GetObject(, "AutoCAD.Application.17")
End Sub
      
Private Sub ACADApp_BeginFileDrop _
 (ByVal FileName As String, Cancel As Boolean)
 ' 本例中断 Application BeginFileDrop 事件。
 '
 ' 此事件在将图形文件拖放到 AutoCAD 中
 ' 时触发。
 '
 ' 触发本样例事件的步骤:
    ' 1) 确保运行初始化
 ' 链接到此事件的公有变量(名为 ACADApp)的样例。
 '
 ' 2) 将 AutoCAD 图形文件拖放到 AutoCAD
 ' 拖放到 AutoCAD 应用程序
 ' 中。
      
 ' 使用 Cancel 变量停止拖动文件的加载,
 ' 使用 FileName 变量通知用户要拖动
 ' 的文件。
      
 If MsgBox("AutoCAD is about to load " & FileName & vbCrLf _
 & "Do you want to continue loading this file?", _
 vbYesNoCancel + vbQuestion) <> vbYes Then
 Cancel = True
 End If
End Sub