📄 m49.htm
字号:
<html>
<head>
<title>VB教程</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<p align="center"><script src="../../1.js"></script></a>
<body bgcolor="#ffffff" leftmargin="5" topmargin="1" marginheight="5" marginwidth="5">
<div align=center>
<table border=0 cellpadding=0 cellspacing=0 width=680 align="center">
<tbody>
<tr>
<td bgcolor=#000000 height=9>
<div align=center class=H1> <font color="#FFFFFF">VB应用程序中用DDE功能开发AutoCAD</font> </font> </font></div>
</td>
</tr>
<tr valign=top>
<td class=H1 height=76>
<p><font color="#000000" size="3"> <br>
目前,许多工程CAD系统是以AutoCAD作为支撑软件,在其基础上进行二次开发而形成的。AutoCAD R12 for Windows
以AutoLISP和ADS作为二次开发工具,但它们都有不足之处,AutoLISP速度慢,没有友好的开发环境,ADS是基于C语言的开发环境,而C语言面向Windows编程本身难以掌握,因此AutoLISP和ADS的使用都受到一定的限制。VB是Windows下主要的开发工具之一,它的“可视性”和“事件驱动性”简化了面向Windows的编程,深受广大用户的青睐。Windows下,VB和AutoCAD都支持强有力的DDE(动态数据交换)功能,用VB编写具有DDE功能的程序来控制AutoCAD,既能与AutoCAD交换各种复杂的数据结构,又能向AutoCAD发送命令,由此开发出的应用程序能满足用户的需要,同时又缩短了开发周期。本文结合实例介绍了用VB开发AutoCAD的途径与方法。
</span></font></p>
<p> <font color="#000000" size="3">一、直接利用DDE功能开发
</font></span></p>
<p> <font color="#000000" size="3"> DDE是Windows的强大功能之一,它可以使应用程序自动地接收由其它应用程序发送来的数据,当传送端的数据有变化时,接收端的数据也会随之改变,也可将命令或键盘输入传递给其它程序,实现远程控制。</font></span></p>
<p> <font color="#000000" size="3"> 在VB编程环境中,创建应用程序的方法很简单,首先是设计用户界面,也就是在空白窗体中放入所需要的控件,如命令按钮,单选钮,文本框,标签,图片框等,然后针对各控件上要发生的事件(如鼠标单击,鼠标移动等)书写事件过程,最后将编写的应用程序运行,调试,生成执行文件即可。VB中能和其它Window应用程序建立DDE通道的控件有文本框,标签和图片框。下面结合简单实例,说明VB应用程序与AutoCAD间建立DDE通道和交换数据的方法。</font></span></p>
<p> <font color="#000000" size="3"> 在VB中启动一个新项目,参见图(1)建立窗体,其中“建立链接”,“直线”,“标注”,“退出”为命令按钮,标有“Text1”的为文本框,用于建立DDE通道,并输入下面的事件代码。
</font></span></p>
<p> <font color="#000000" size="3"> Option Explicit</font></span></p>
<p> <font color="#000000" size="3"> Private Sub
cmdLine_Click() '画直线</font></span></p>
<p> <font color="#000000" size="3"> Text1.LinkExecute
" [^3^3line 3,3 8,8 ^3]"</font></span></p>
<p> <font color="#000000" size="3"> End Sub</font></span></p>
<p> <font color="#000000" size="3"> Private Sub
cmdText_Click() '标注文字</font></span></p>
<p> <font color="#000000" size="3"> Text1.LinkExecute
" [^3^3text 10,10 1 90 AUTOCAD!^10]"</font></span></p>
<p> <font color="#000000" size="3"> End Sub</font></span></p>
<p> <font color="#000000" size="3"> Private Sub
cmdLink_click() '建立链接</font></span></p>
<p> <font color="#000000" size="3"> Text1.LinkMode
= 0</font></span></p>
<p> <font color="#000000" size="3"> Text1.LinkTopic
= "autocad.dde|system"</font></span></p>
<p> <font color="#000000" size="3"> Text1.LinkMode
= 2</font></span></p>
<p> <font color="#000000" size="3"> End Sub</font></span></p>
<p> <font color="#000000" size="3"> Private Sub
cmdExit_click() '退出</font></span></p>
<p> <font color="#000000" size="3"> End</font></span></p>
<p> <font color="#000000" size="3"> End Sub </font></span></p>
<p> <font color="#000000" size="3"> 运行此应用程序,注意在运行前,一定要先加载AutoCAD。单击“建立链接”按扭,cmdLink_Click()过程被执行,执行时设置文本框Text1的LinkTopic和LinkMode的属性,完成VB应用程序与AutoCAD间DDE通道的建立。LinkTopic属性用于通知AutoCAD由谁来提供数据,它被管道符“|”分成两部分,第一部分“AutoCAD.DDE”为应用程序名,第二部分“System”是通讯的主题。LinkMode属性用于切实建立链接,在LinkMode=0时,表示关闭以前的DDE通道,在LinkMode=2时,表示以手动模式激活DDE通道。</font></span></p>
<p> <font color="#000000" size="3"> 在完成DDE链接后,VB应用程序就可以与AutoCAD间进行数据交换或命令传送了。单击“直线”按扭,cmdLine_Click()过程被执行,应用程序通过LinkExecute方法向AutoCAD发送命令,在AutoCAD中以点(3,3)和(8,8)为端心,画一条直线。语句中的^3相当于AutoCAD中的取消键Ctrl+C,空格相当于AutoCAD中的回车键。单击“标注”按扭,执行cmdText_Click()过程,可在AutoCAD中显示以(10,10)为基点,高为1,旋转角度为90的字符串“AutoCAD!”。语句中的^10相当于AutoCAD中的回车键,在标注文字时不能用空格代替回车键。</font></span></p>
<p> <font color="#000000" size="3"> 根据需要,可用上面的方法传送AutoCAD的其它命令,实现对AutoCAD的开发。</font></span></p>
<p> <font color="#000000" size="3">二、通过调用VB ADS开发
</font></span></p>
<p> <font color="#000000" size="3"> 上面介绍了在VB应用程序中直接利用DDE与AutoCAD作用实现开发的方法,此方法要求用户自己建立与AutoCAD间的DDE通道,此外,我们还可以通过调用VB
ADS函数对AutoCAD进行开发。在VB ADS函数库中已有专门的函数负责建立应用程序与AutoCAD间的DDE通道,而不需用户亲自建立,较为方便。另外,VB应用程序还可以通过VB
ADS函数向AutoCAD发送数据和命令,同时也可以利用VB ADS函数的返回值来获得AutoCAD的数据,实现对AutoCAD更深入的开发。</font></span></p>
<p> <font color="#000000" size="3"> 为了利用AutoCAD的VB
ADS函数建立VB的应用程序,AutoCAD提供了几个VB ADS支撑文件,这些文件除DDEBAS.EXE和ACADVB.DLL存放在C:\ACADWIN子目录外,其余都存放在C:\ACADWIN\VB\NEW子目录中。文件如下:</font></span></p>
<p> <font color="#000000" size="3"> 1. DDEBAS.EXE-ADS/DDE服务者,为保证VB于AutoCAD
间正常通信,此命令必须首先在AutoCAD中用XLOAD命令加载运行。</font></span></p>
<p> <font color="#000000" size="3"> 2. ACADVB.DLL-VB
ADS动态连接库,在运行VB应用程序前,应将其拷到C:\WINDOWS\SYSTEM\子目录下。</font></span></p>
<p> <font color="#000000" size="3"> 3. GLOBAL.BAS-VB
ADS应用程序中所需要使用的全局变量定义文件。</font></span></p>
<p> <font color="#000000" size="3"> 4. ADSFUNCS.BAS-VB
ADS函数库,可以在VB应用程序中直接调用。</font></span></p>
<p> <font color="#000000" size="3"> 5. ADSFUNCS.FRM-包含有应用程序和AutoCAD间建立DDE链接的窗体文件。
下面结合具体的例子,说明利用VB ADS函数开发应用程序的方法。 [HJ] 启动VB,打开C:\ACADWIN\VB\NEW\NEWPROJ.MAK项目文件,参见图
[2]建立新窗体,并输入如下的事件代码。 </font></span></p>
<p> <font color="#000000" size="3"> Option Explicit</font></span></p>
<p> <font color="#000000" size="3"> Private Sub
Form_Load()</font></span></p>
<p> <font color="#000000" size="3"> DDE_TIMEOUT
= -1 '等待DDE事件</font></span></p>
<p> <font color="#000000" size="3"> txtX.Text =
5 '圆心,半径的隐含值</font></span></p>
<p> <font color="#000000" size="3"> txtY.Text =
5</font></span></p>
<p> <font color="#000000" size="3"> txtRadius =
3</font></span></p>
<p> <font color="#000000" size="3"> End Sub</font></span></p>
<p> <font color="#000000" size="3"> Private Sub
cmdCircle_Click() '画圆过程</font></span></p>
<p> <font color="#000000" size="3"> Dim ret As
Integer</font></span></p>
<p> <font color="#000000" size="3"> Dim pt As ads_point
'定义Ads点类型</font></span></p>
<p> <font color="#000000" size="3"> Dim Radius
As Double</font></span></p>
<p> <font color="#000000" size="3"> Dim Apndll
As ApndLLType '定义增加链表类型</font></span></p>
<p> <font color="#000000" size="3"> Dim Resbuf
As ResbufType '定义结果缓冲器</font></span></p>
<p> <font color="#000000" size="3"> pt.X = val(Trim(txtX.Text)) '给圆心,半径赋值</font></span></p>
<p> <font color="#000000" size="3"> pt.Y = val(Trim(txtY.Text))</font></span></p>
<p> <font color="#000000" size="3"> Radius = val(Trim(txtRadius.Text))</font></span></p>
<p> <font color="#000000" size="3"> ret% = ads_newrb(10,
Resbuf) '建立新的结果缓冲器</font></span></p>
<p> <font color="#000000" size="3"> Resbuf.hResbuf
= 0 </font></span></p>
<p> <font color="#000000" size="3"> Apndll.apType
= RTSTR '说明链表类型为字符串</font></span></p>
<p> <font color="#000000" size="3"> Apndll.apString
= "circle" + Chr$(0) '链表赋值</font></span></p>
<p> <font color="#000000" size="3"> ret% = ApndLLNode(Resbuf,
Apndll) '增加链表到结果缓冲器</font></span></p>
<p> <font color="#000000" size="3"> Apndll.apType
= RTPOINT</font></span></p>
<p> <font color="#000000" size="3"> Apndll.apPoint
= pt</font></span></p>
<p> <font color="#000000" size="3"> ret% = ApndLLNode(Resbuf,
Apndll)</font></span></p>
<p> <font color="#000000" size="3"> Apndll.apType
= RTREAL</font></span></p>
<p> <font color="#000000" size="3"> Apndll.apReal
= Radius</font></span></p>
<p> <font color="#000000" size="3"> ret% = ApndLLNode(Resbuf,
Apndll) </font></span></p>
<p> <font color="#000000" size="3"> Apndll.apType
= RTNONE '链表结束值类型</font></span></p>
<p> <font color="#000000" size="3"> ret% = ApndLLNode(Resbuf,
Apndll)</font></span></p>
<p> <font color="#000000" size="3"> ret% = ads_cmd(Resbuf)
'执行结果缓冲器的命令</font></span></p>
<p> <font color="#000000" size="3"> ret% = ads_relrb(Resbuf)
'释放结果缓冲器</font></span></p>
<p> <font color="#000000" size="3"> End Sub</font></span></p>
<p> <font color="#000000" size="3">Private Sub cmdExit_Click()
'退出过程</font></span></p>
<p> <font color="#000000" size="3"> End</font></span></p>
<p> <font color="#000000" size="3"> End Sub</font></span></p>
<p> <font color="#000000" size="3"> 在应用程序运行前,必须首先运行AutoCAD,并用命令(XLOAD
"DDEBAS")加载DDEBAS. EXE。在上面的应用程序中,除语句DDE_TimeOut=-1外,没有其它涉及建立DDE通道的语句,因为应用程序与AutoCAD间建立DDE通道所需要的代码已保存在VB
ADS 函数库中,打开支撑文件adsfuncs.bas,可以发现Sub OPENDDE()过程,它负责VB应用程序与AutoCAD间DDE通道的建立,所以用户在开发应用程序时,只管调用VB
ADS函数即可。例子中的cmdCircle_Click()过程,是在VB 4.0编程环境通过调用VB ADS函数开发的,运行程序后在文本框中输入半径和圆心的值,单击“画图”按扭,即可在AutoCAD中得到所需的圆。</font></span></p>
<hr width="100%">
<p> <font color="#000000" size="3">参考文献</font></span></p>
<p> <font color="#000000" size="3"> 1.《Visual Basic
For Windows语言参考详解》.北京航空航天大学出版社.周民光 王复 康等编.1995.12.</font></span></p>
<p> <font color="#000000" size="3"> 2.《AutoCAD for
Windows 技巧与应用》.人民邮电出版社.卢师德编著.1995.5. </font></span></p>
<p align=left> </p>
<p align="left"> <br>
<br>
</table>
</div>
<p align="center"><a href="../../pian/vb.htm">回首页</a>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -