明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1482|回复: 3

vb获得CAD事件问题,一个星期没整出来!本来不该发到这里的,但无奈VBA那边人少

[复制链接]
发表于 2008-8-5 01:54 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2008-8-5 12:05:10 编辑

实在是没办法,在网上找了1个星期的资料、示例了,百度,google,明经,AUTODESK到处都找遍了。还是没搞出来。

从明经的下列网址http://www.mjtd.com/a2/list.asp?id=131开始试验在VB中获得CAD的事件。

【引用】

在VBA外环境启用文档级事件

当你可以在VB环境或其它VBA以外的环境下使用文档级事件之前,你必须建立一个新的类模块,并声明一个带事件的AcadApplication类型的对象。例如,假定一个新的类模块已经建立并命名为EventClassModule,这个新的类模块将包含带VBA关键字WithEvents的应用程序的声明。

建立一个新类模块并声明一个带事件的Document对象:

Public WithEvents Doc As AcadDocument

当新的对象被声明为带事件后,它就出现在类模块的对象下拉列表中,并且你可以在类模块中为新对象编写事件过程。(当你在对象框中选择了新对象,对该对象有效的事件就列在过程下拉列表中。)

但是,在程序执行之前,你必须连接类模块中被声明的对象到Document对象,你可以在任何模块中的以下代码来完成这一过程。

连接被声明的对象到文档对象

1 在主模块的代码窗口中,在声明段加入以下行:

Dim X As New EventClassModule

2 在相同窗口中,加入以下子程序:

Sub InitializeEvents()
Set X.Doc = ThisDrawing
End Sub

3 在你的主模块的代码中,添加对InitializeApp子程序的调用:

Call InitializeEvents

一旦InitializeEvents过程执行后,在类模块中的Doc对象就会指向所创建的Document对象。并且当事件发生时,这个类模块中的任何事件过程都会运行。

【引用】

 

按照上面所说的方法,在VB中步骤如下:

1  添加类模块,并改名为EventClassModule,代码如下:

Public WithEvents Doc As AcadDocument

Private Sub Doc_ObjectAdded(ByVal Object As Object)
MsgBox "aaa"
End Sub

2  添加模块Module1,代码如下:

Public acadApp As AcadApplication      ' AutoCAD应用程序对象
Public AcadDoc As AcadDocument         ' 当前活动文档对象

Dim X As New EventClassModule

Sub InitializeEvents()
Set X.Doc = ThisDrawing
End Sub

3  在主窗体中添加代码如下:

Private Sub Form_Load()
Call InitializeEvents

On Error Resume Next
    ' 获得正在运行的AutoCAD应用程序对象
    Set acadApp = GetObject(, "AutoCAD.Application.16")

    If Err Then
        Err.Clear
        ' 创建一个新的AutoCAD应用程序对象
        Set acadApp = CreateObject("AutoCAD.Application.16")
        If Err Then
            MsgBox Err.Description
            Exit Sub
        End If
    End If
    ' 显示AutoCAD应用程序
    acadApp.Visible = True
End Sub

程序可执行,可启动CAD,但是在CAD中添加图元不执行我在程序中写的出现提示框的代码。

即:类模块代码

Private Sub Doc_ObjectAdded(ByVal Object As Object)
MsgBox "aaa"
End Sub

不执行。

真的不知道该怎么弄了,看到的,明白的,麻烦帮一下。谢谢了。

 楼主| 发表于 2008-8-5 08:18 | 显示全部楼层

实际上,程序在

Module1,代码如下:

Public acadApp As AcadApplication      ' AutoCAD应用程序对象
Public AcadDoc As AcadDocument         ' 当前活动文档对象

Dim X As New EventClassModule

Sub InitializeEvents()
Set X.Doc = ThisDrawing
End Sub

就出错了,提示为:“ThisDrawing  变量未定义”。

我将ThisDrawing改成AcadDoc可执行通过,但是VB不响应CAD事件。

 楼主| 发表于 2008-8-5 08:30 | 显示全部楼层

问题解决,参照以下文章:

http://www.mjtd.com/object/acad2004/idh_document_object.htm

将ThisDrawing改成ActiveDocument即可。

说明http://www.mjtd.com/a2/list.asp?id=131文章中的模块子程序

Sub InitializeEvents()
Set X.Doc = ThisDrawing
End Sub

确实不正确。

at last,THANKS TO MJTD,郑立楷,MCCAD,

发表于 2008-8-5 10:12 | 显示全部楼层

文档级事件自动响应,不用注册类

Private Sub AcadDocument_ObjectAdded(ByVal Object As Object)
MsgBox "aaa"
End Sub

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-11 18:07 , Processed in 0.147957 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表