VB在ACADWIN中的使用

2016-02-19 16:31 1 1 收藏

只要你有一台电脑或者手机,都能关注图老师为大家精心推荐的VB在ACADWIN中的使用,手机电脑控们准备好了吗?一起看过来吧!

【 tulaoshi.com - 编程语言 】

AutoCAD是一个常用工业绘图平台,用户在使用时经常要用Lisp或ADS进行二次开发,但Lisp处理数据库能力差,编制界面困难,而ADS要求较高.相比之下,VisualBasic(以下简称VB)编写独立程序的速度快,编制界面容易,可进行快速计算,可操作数据库。ACADWIN是AUTOCAD的Windows版程序,具有WINDOWS的许多特点。可以利用DDE进行VB与ACADWIN之间的通讯,实现AutoCAD编程。
  
  VB在ACADWIN的应用文件
  因为ACADWINR12不支持如PastLink的直接DDE方法,所以要有一个控件与VB相联系,以进行数据传递。这里主要用到以下几个文件:
  1):DDEBAS.EXE这是VB/DDE服务器程序,必须在运行VB应用程序前调入,在命令行下键入:(XLOAD“DDEBAS”)。
  2):ACADVB.DLL,VB应用程序的动态连接库。
  3):GLOBAL.BAS,VB应用程序的全程变量的定义文件。
  4):ADSFUNCS.BAS,VB应用程序对ADS库标准函数的调用。
  5):ADSFUNCS.FRM,标准ACADWIN的初始VB窗口。
  6):NEW.FRM,用于新建标准初始VB窗口。
  
  后4个文件在ACADWIN/VB/NEW目录下,编程时只要打开NEWPROJ.MAK就都有了,但NEW.FRM可以不要,只要把启动文件定为ADSFUNC.FRM即可。
  
  VB在ACADWIN的使用方法
  为了实现DDE通讯,先要在ADSFUNCS.FRM中增加一个用于通讯的TEXT(文本框)控件,并在特性表中将其NAME命名为ACADTEXT,TEXT的CAPTION置为空串(减少窗体不必要的信息),VISIBLE特性呈为TURE。用linkapp函数初始化并关闭连接。
  过程linkapp代码如下:
  
  sublinkapp(linkascontonl,appnameasstring,topicasstring)
  link.linkmode=0'关闭通讯
  link.linktopic=appname “|” topic'置通讯主题
  link.linkmode=2'手工通讯
  endsub
  增加一个过程unlinkapp,其代码如下:
  subunlinkapp(linkascontonl)
  link.linkmode=0'关闭通讯
  endsub
  在窗体事件中,增加如下代码:
  subform_load()
  LINKAPPACADTEXT,“AUTOCAD.DDE”,“SYSTEM”
  endsub
  subform_unload(cancelasinteger)
  UNLINKAPPACADTEXT
  endsub
  
  如画圆“CIRCLE”,先在ADSFUNC.FRM中增加一个命令钮COMMAND1,将其CAPTION置为“C
  IRCLE”,在子过程中增加以下代码:
  SUBCOMMAND1_CLICK()
  ACADTEXT.LINKEXECUTE“[^3^3CIRCLE]”
  ENDSUB
  
  至此可以实现绘图命令。如果要实现复杂的功能,如捕捉特征点,获得特性,参数化绘图,等能否让完成界面及计算功能,把参数传给一个Lisp程序,然后再将程序调入环境中完成绘图呢?答案是肯定的这就要用到“SendKey"语句。该语句功能是向具有焦点的窗口发送字符,就象从键盘中键入一样。这时先用函数FindACAD()找到ACADWIN的句柄,再用AcadACTIVE函授激活ACADWIN,使其具有焦点,这时就可以用SendKey了。
  
  如有一个Lisp程序YZ.LSP,主函数为“C:YZ()”,可先在ADSFUNC.FRM中增加一个命令钮COMMAND2,将其CAPTION置为“YZ”,在子过程中增加以下代码:
  
  SUBCOMMAND2_CLICK()
  hwndAcad=FindAcad()
  AcadActivate(hwndAcad)
  SendKeys“{(}load ‘yz '{)}”,-1
  SendKeys“{enter}”,-1
  SendKeys“yz”,-1
  ENDSUB
  
  以上方法可以实现通过VB的界面选取参数,进行计算;用Lisp进行绘图。有两个问题值得注意:一:如要进行参数的传递,可以先用VB写临时数据文件,再用Lisp读此临时数据文件。二:因为与窗体布置不一定使ACADWIN和VB应用程序两者同时可见,Lisp程序执行完毕,不能自动返回到VB应用程序,这时可以通过调用WindowsAPI函数SetWindowPos来使应用程序总浮在最上面,避免了来回切换窗口。这种技术的实现在本报已有介绍.
  
  在ADSFUNCS.BAS中也定义了很多ADS函数可供调用。如ACADWINVBASVU中有一个例子ASVU.EXE,就是应用Ads_getvar及Ads_setvar函数,在SYSVARS.MAK的intervai.bas可以看到。但DDE的链接方式要改变,在启动窗体或函授中加上:
  
  DDE_TIMEOUT=-1'等待一个DDE事件
  openDDE'ADSFUNCS.BAS中一个函数,初始化DDE链接->

来源:https://www.tulaoshi.com/n/20160219/1612346.html

延伸阅读
自从VisualBasic第一次发布到现在,它的大部分主要的特性大都被修改了不下一次。但文件操作部分却是个例外。在最原始的Basic语言中,文件就是用文件号(filenumber)来读写的。用一个数字来操作文件,或许者多少有一点晦涩难懂,这也令大多数的初学者感到不习惯和难以理解。 随着VisualBasicScriptingEdition2.0版本的发布,微软提供了...
使用VB编程时,有时需要调用Microsoft Word对文字进行编辑、排版及输出。为实现这种调用,可以使用Shell函数、OLE自动化、在包容器中嵌入Word对象等方法。经过试用和比较,总结出了这几种方法的各自特点。 1 使用Shell函数直接调用 语法:Shell (pathname[,windowstyle]).Pathname是指要执行的程序的名字和任何必须的参数或命令...
标签: ASP
       any       有些消息的参数声明为any.这表示该参数是一种可变的类型(你可以以整型,字符串,用户自定义或其他的类型来传递).      这有一个这样的例子:      public declare function sendmessage lib "user32" alias "sendmessagea...
一、数据库的设计 数据库可以采用微软的Access97或者SQLServer来进行,首先新建一张表,取名为Table,添加三个字段,分别是:姓名Char型(SQLServer中)文本型(Access中);编号Char型(SQLServer中)文本型(Access中);照片image型(SQLServer中)OLE对象(Access中),设计好后存盘。为了可以进行远程调用,我们采用ODBC的方法进...
我们在开发一个软件中,通过扫描仪输进了大量实景图片,这些图片是以位图格式存储的,实际需要将这些图片透明放置到多彩色背景上,而在我们所使用的VisualBasicforWindows开发环境中,只能将WMF格式的矢量图(通过Image控件装载)透明放置到多彩色复杂背景图上,对位图只能象照片一样将图片上的每一个点阵信息贴到复杂背景上。本文讨论的问题就...

经验教程

571

收藏

68
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部