• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于VB API和Auto CAD的圖紙批量換圖框軟件開發(fā)

      2014-05-05 08:50:32李軍,焦志強,高立程
      機械管理開發(fā) 2014年2期
      關鍵詞:圖框二次開發(fā)代號

      引言

      隨著產品數據管理系統(tǒng)(PDM)的引入,為了便于今后的產品設計,豐富本地PDM的數據資源,需要將原先設計的產品圖紙輸入到本地零部件數據資源庫,而在輸入之前需要刪除每張圖紙中標題欄和代號欄的內容并更換PDM專用標題欄和代號欄。為了避免重復性勞動,提高輸入效率,有必要編寫專用的軟件來代替手工的操作。通過Visual Basic對AutoCAD進行二次開發(fā),成功編寫了適合本公司的圖紙批量換圖框軟件。

      1 基于Visual Basic調用API函數的AutoCAD二次開發(fā)原理概述

      Windows應用程序接口,即API (Application programming interface),是一組用C語言編寫的函數庫,由操作系統(tǒng)調用來控制Windows的各個部件外觀和行為。Win32 API就是Windows32位平臺提供的應用程序編程接口。在Visual Basic中,可以像調用普通過程一樣調用API中的函數,實現所需要的操作。

      1.1 查找指定對象

      Windows環(huán)境中有很多對象,諸如窗口、組合框、文本框等,可以通過API函數以不同的形式對這些對象進行操作。為此,必須以某種方法對這些對象進行標識,并把它們以參數的形式傳送給函數。Windows用一個32位的整數對各種對象進行標識,稱之為句柄。VB可以調用API函數FindWindow和FindWindowEx通過窗口標題和類名來查找指定對象,并返回句柄。

      1.2 給指定對象發(fā)送消息

      在得到指定對象的句柄之后,可以通過消息函數SendMessage和PostMessage給指定對象發(fā)送消息。SendMessage函數有4個參數,其中第一個參數(hwnd)是接收消息的窗口,即指定對象的句柄,第二個參數(wMsg)是消息編號(標識符),第三、四個參數是消息的第一、第二個參數。后兩個參數wParam和lParam并不固定,隨對象和所發(fā)送的消息而不同。

      2 針對圖紙自動換圖框軟件的AutoCAD的二次開發(fā)

      本公司的AutoCAD軟件集成了INTECAD程序,更換圖框時只需通過組合框選擇需要的標題欄和代號欄即可,如下頁圖1所示。本程序的基本原理是當標題欄dwg文件打開時,執(zhí)行更換標題欄命令會刪除原有標題欄中的數據,隨后利用VB調用API消息函數SendMessage控制AUTOCAD選擇指定的標題欄和代號欄,達到更換圖框的目的。

      圖1 INTECAD程序定制圖幅界面

      2.1 本軟件程序設計的流程

      本軟件的主要功能是打開AUTOCAD圖紙,刪除每張圖紙中標題欄和代號欄的內容并更換PDM專用標題欄和代號欄,程序流程圖見圖2。

      2.2 建立VB交互式人機界面

      通過VB編程將本軟件的各種數據信息,通過對話框的形式完全體現出來,建立人機交互界面,如圖3所示。

      2.3 軟件功能結構

      圖紙自動換圖框軟件主要由主控制程序、選擇標題欄和代號欄子程序組成。

      2.3.1 主控制程序

      主控制程序實現的功能是循環(huán)打開文件列表框中的AUTOCAD圖紙,判斷圖紙為零件還是部件,根據選項判斷是否進行刪除標題欄和代號欄操作,利用注冊表將標題欄和代號欄名稱傳送給選擇標題欄和代號欄子程序,給AUTOCAD發(fā)送打開定制圖幅命令,執(zhí)行后見圖1,再通過調用選擇標題欄和代號欄子程序達到更換指定圖框的目的。具體代碼如下:

      圖2 程序流程圖

      圖3 程序主界面

      For I = 0 To File1.ListCount - 1

      Set acaddoc = acadapp.Documents.Open(astr &File1.List(I))

      '利用文件名判斷圖紙為零件還是部件

      Number = Split(File1.List(I), ".")

      numbercount = UBound(Number)

      If InStr(Number(numbercount - 1), "00") > 0 Then

      headstr = headtext2

      codestr = codetext2

      Else

      headstr = headtext1

      codestr = codetext1

      End If

      '利用注冊表傳遞headstr和codestr

      SaveSetting "通信小程序", "自定義通訊", "通訊1",headstr

      SaveSetting "通信小程序", "自定義通訊", "通訊2",codestr

      If Option1.Value = True Then

      Call openhead(headbpath, headb)

      Shell (App.Path & "headb.exe")

      acaddoc.SendCommand ("tf" & vbCr)

      acadapp.Documents(1).Close

      End If

      Shell (App.Path & "headpdm.exe")

      acaddoc.SendCommand ("tf" & vbCr)

      acaddoc.SendCommand ("qsave" & vbCr)

      acaddoc.SendCommand ("close" & vbCr)

      Set acaddoc = Nothing

      Next I

      2.3.2 選擇標題欄和代號欄子程序

      首先從注冊表中取出主程序存入的標題欄和代號欄名稱,賦值給變量并清空數據。定義子函數, 以標題欄和代號欄名稱為變量。第一步通過API函數FindWindow查找“定制圖幅”窗口,再通過類名找到標題欄代號欄組合框控件,利用消息函數SendMessage發(fā)送組合框字符串查找消息CB_FINDSTRING來獲得標題欄和代號欄在組合框中的位置序號,再發(fā)送組合框選擇消息CB_SETCURSEL通過剛才獲取的序號選擇選項。最后找到“確定(Y)”按鈕,通過消息函數PostMessage 發(fā)送按下Y鍵的消息,完成選擇標題欄和代號欄操作。具體代碼如下:

      headtext = GetSetting("通信小程序", "自定義通訊","通訊1")

      codetext = GetSetting("通信小程序", "自定義通訊","通訊2")

      DeleteSetting "通信小程序", "自定義通訊", "通訊1"

      DeleteSetting "通信小程序", "自定義通訊", "通訊2"

      Private Function pdm(ByVal headtext As String,ByVal codetext As String)

      alsAnsi = StrConv(headtext, vbFromUnicode)

      blsAnsi = StrConv(codetext, vbFromUnicode)

      Dim starttime,count As Single

      starttime = Timer

      Do Until ahwnd11 Or count > 10

      count = Timer - starttime

      Sleep (50)

      ahwnd1 = FindWindow(vbNullString, "定制圖幅")

      ahwnd2 = FindWindowEx(ahwnd1, 0, "ComboBox",vbNullString)

      ahwnd3 = FindWindow Ex(ahwnd1, ahwnd2,"ComboBox", vbNullString)

      ahwnd4 = FindWindow Ex(ahwnd1, ahwnd3,"ComboBox", vbNullString)

      ahwnd5 = Find Window Ex(ahwnd1, ahwnd4,"ComboBox", vbNullString)

      ahwnd6 = FindWindow Ex(ahwnd1, ahwnd5,"ComboBox", vbNullString) '找到標題欄

      ahwnd7 = FindWindow Ex(ahwnd1, ahwnd6,"ComboBox", vbNullString)

      ahwnd8 = FindWindow Ex(ahwnd1, ahwnd7,"ComboBox", vbNullString) '找到代號欄

      If ahwnd6 And ahwnd8 Then

      Do Until (a <> -1 And b <> -1) Or count > 10

      count = Timer - starttime

      a = SendMessage(ahwnd6, CB_FINDSTRING, -1,ByVal StrPtr(alsAnsi)) '找到標題欄位置序號

      b = SendMessage(ahwnd8, CB_FINDSTRING, -1,ByVal StrPtr(blsAnsi)) '找到代號欄位置序號

      Loop

      SendMessage ahwnd6, CB_SETCURSEL, a, 0 '選擇第a個選項

      SendMessage ahwnd8, CB_SETCURSEL, b, 0 '選擇第b個選項

      ahwnd9 = FindWindowEx(ahwnd1, 0, vbNullString,"確定(&Y)") '找確定鍵

      PostMessage ahwnd9, WM_KEYDOWN, vbKeyY, 0'按下確定鍵

      End If

      DoEvents

      ahwnd10 = FindWindow(vbNullString, "填寫欄框")

      If ahwnd10 Then

      ahwnd11 = Find Window Ex(ahwnd10, 0,vbNullString, "確定(&Y)")

      PostMessage ahwnd11, WM_KEYDOWN, vbKeyY, 0

      End If

      Loop

      End

      End Function

      3 結語

      本應用程序是在VB API和AutoCAD相結合的基礎上,實現了批量刪除圖紙中標題欄和代號欄的內容并更換圖框的功能,把原本商品化、通用化的AutoCAD系統(tǒng)用戶化、本地化。本文主要介紹了利用VB API作為開發(fā)工具的二次開發(fā)方法和關鍵問題,為開發(fā)其他適合用戶特定需要的專業(yè)化軟件提供了一種手段,同時也對致力于AUTOCAD二次開發(fā)的人員具有一定得參考價值。

      [1] 劉炳文,李鳳華.Visual Basic 6.0 Win32 API程序設計[M].北京:清華大學出版社,2001.

      [2] 張晉西.Visual Basic與AutoCAD二次開發(fā)[M].北京:清華大學出版社,2002.

      [3] 尚雅玲.基于VB API的Pro/E二次開發(fā)探討[J].現代機械,2009(4):46-47.

      [4] 高山,楊卓,張濤.Visual Basic中操作指針的技術及應用[J].計算機工程與設計,2009(24):5 722-5 725.

      [5] 羅彬,劉獨玉.基于VB調用Windows API函數的參數傳遞研究[J].計算機應用,2001(8):264-266.

      猜你喜歡
      圖框二次開發(fā)代號
      《中獸醫(yī)學雜志》
      《中獸醫(yī)學雜志》
      演習代號:圍城計劃
      代號“凌凌漆”
      趣味(數學)(2020年3期)2020-07-27 01:43:40
      淺談基于Revit平臺的二次開發(fā)
      甘肅科技(2020年20期)2020-04-13 00:30:02
      淺談Mastercam后處理器的二次開發(fā)
      模具制造(2019年3期)2019-06-06 02:11:02
      基于Lisp的自動圖框繪制和輸出管理技術研究
      城市勘測(2019年1期)2019-02-27 08:07:10
      西門子Easy Screen對倒棱機床界面二次開發(fā)
      基于Microstation V8 XM圖紙批量打印的實現
      析SP3D軟件的ISO出圖模板定制
      天水市| 洪雅县| 明星| 龙岩市| 海盐县| 阳原县| 华宁县| 洱源县| 仁寿县| 昌邑市| 嘉义市| 当阳市| 客服| 微山县| 泰顺县| 三台县| 鹤峰县| 河间市| 青州市| 江陵县| 商河县| 新宾| 孙吴县| 邯郸市| 洛川县| 新野县| 边坝县| 荆门市| 永寿县| 新邵县| 乃东县| 晋州市| 临高县| 道真| 稻城县| 绍兴市| 四会市| 西盟| 子洲县| 侯马市| 司法|