超然A 发表于 2008-8-5 01:52:00

vb获取CAD中对象的事件,实在是搞不定了。不得不请教。

<p>实在是没办法,在网上找了1个星期的资料、示例了,百度,google,明经,AUTODESK到处都找遍了。还是没搞出来。</p><p>从明经的下列网址<a href="http://www.mjtd.com/a2/list.asp?id=131">http://www.mjtd.com/a2/list.asp?id=131</a>开始试验在VB中获得CAD的事件。</p><p><strong>【引用】</strong></p><p><strong>在VBA外环境启用文档级事件</strong><a name="1"></a></p><p><strong>当你可以在VB环境或其它VBA以外的环境下使用文档级事件之前,你必须建立一个新的类模块,并声明一个带事件的AcadApplication类型的对象。例如,假定一个新的类模块已经建立并命名为EventClassModule,这个新的类模块将包含带VBA关键字WithEvents的应用程序的声明。</strong></p><p><strong>建立一个新类模块并声明一个带事件的Document对象:</strong></p><p class="pagelink"><strong>1 在VBA IDE中,插入一个类模块。从插入菜单中,选择类模块。</strong></p><p class="pagelink"><strong>2 在工程窗口中选择新的类模块。</strong></p><p class="pagelink"><strong>3 在工程窗口中将类模块的名称改为EventClassModule。</strong></p><p class="pagelink"><strong>4 用F7或通过选择菜单项查看代码打开类的代码窗口。</strong></p><p class="pagelink"><strong>5 在类的代码窗口中,加入以下行:</strong></p><p class="program"><strong>Public WithEvents Doc As AcadDocument</strong></p><p><strong>当新的对象被声明为带事件后,它就出现在类模块的对象下拉列表中,并且你可以在类模块中为新对象编写事件过程。(当你在对象框中选择了新对象,对该对象有效的事件就列在过程下拉列表中。)</strong></p><p><strong>但是,在程序执行之前,你必须连接类模块中被声明的对象到Document对象,你可以在任何模块中的以下代码来完成这一过程。</strong></p><p class="samplelabel"><strong>连接被声明的对象到文档对象</strong></p><p><strong>1 在主模块的代码窗口中,在声明段加入以下行:</strong></p><p class="program"><strong>Dim X As New EventClassModule</strong></p><p><strong>2 在相同窗口中,加入以下子程序:</strong></p><p class="program"><strong>Sub InitializeEvents()<br/>Set X.Doc = ThisDrawing<br/>End Sub</strong></p><p><strong>3 在你的主模块的代码中,添加对InitializeApp子程序的调用:</strong></p><p class="program"><strong>Call InitializeEvents</strong></p><p><strong>一旦InitializeEvents过程执行后,在类模块中的Doc对象就会指向所创建的Document对象。并且当事件发生时,这个类模块中的任何事件过程都会运行。</strong></p><p><strong>【引用】</strong></p><p></p><p>按照上面所说的方法,在VB中步骤如下:</p><p>1&nbsp; 添加类模块,并改名为<strong>EventClassModule</strong>,代码如下:</p><p>Public WithEvents Doc As AcadDocument</p><p>Private Sub Doc_ObjectAdded(ByVal Object As Object)<br/>MsgBox "aaa"<br/>End Sub</p><p>2&nbsp; 添加模块Module1,代码如下:</p><p>Public acadApp As AcadApplication&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' AutoCAD应用程序对象<br/>Public AcadDoc As AcadDocument&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 当前活动文档对象</p><p>Dim X As New <strong>EventClassModule</strong></p><p>Sub InitializeEvents()<br/>Set X.Doc = ThisDrawing<br/>End Sub</p><p>3&nbsp; 在主窗体中添加代码如下:</p><p>Private Sub Form_Load()<br/>Call InitializeEvents</p><p>On Error Resume Next<br/>&nbsp;&nbsp;&nbsp; ' 获得正在运行的AutoCAD应用程序对象<br/>&nbsp;&nbsp;&nbsp; Set acadApp = GetObject(, "AutoCAD.Application.16")</p><p>&nbsp;&nbsp;&nbsp; If Err Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Err.Clear<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 创建一个新的AutoCAD应用程序对象<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set acadApp = CreateObject("AutoCAD.Application.16")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Err Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox Err.Description<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; ' 显示AutoCAD应用程序<br/>&nbsp;&nbsp;&nbsp; acadApp.Visible = True<br/>End Sub</p><p>程序可执行,可启动CAD,但是在CAD中添加图元不执行我在程序中写的出现提示框的代码。</p><p>即:类模块代码</p><p>Private Sub Doc_ObjectAdded(ByVal Object As Object)<br/>MsgBox "aaa"<br/>End Sub</p><p>不执行。</p><p>真的不知道该怎么弄了,看到的,明白的,麻烦帮一下。谢谢了。</p>

超然A 发表于 2008-8-5 08:17:00

<p>实际上,程序在</p><p>Module1,代码如下:</p><p>Public acadApp As AcadApplication&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' AutoCAD应用程序对象<br/>Public AcadDoc As AcadDocument&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 当前活动文档对象</p><p>Dim X As New <strong>EventClassModule</strong></p><p>Sub InitializeEvents()<br/>Set X.Doc = ThisDrawing<br/>End Sub</p><p>就出错了,提示为:“ThisDrawing&nbsp; 变量未定义”。</p><p>我将ThisDrawing改成AcadDoc可执行通过,但是VB不响应CAD事件。</p>

超然A 发表于 2008-8-5 08:31:00

<p>问题解决,参照以下文章:</p><p><a href="http://www.mjtd.com/object/acad2004/idh_document_object.htm">http://www.mjtd.com/object/acad2004/idh_document_object.htm</a></p><p>将ThisDrawing改成<a href="http://www.mjtd.com/object/acad2004/idh_activedocument.htm">ActiveDocument</a>即可。</p><p>说明<a href="http://www.mjtd.com/a2/list.asp?id=131"><font color="#000000">http://www.mjtd.com/a2/list.asp?id=131</font></a>文章中的模块子程序</p><p>Sub InitializeEvents()<br/>Set X.Doc = ThisDrawing<br/>End Sub</p><p>确实不正确。</p><p>at last,THANKS TO MJTD,郑立楷,MCCAD。</p>
页: [1]
查看完整版本: vb获取CAD中对象的事件,实在是搞不定了。不得不请教。