程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> VB在ACADWIN中的使用

VB在ACADWIN中的使用

編輯:VB綜合教程
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鏈接->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved