說(shuō)明:本篇內(nèi)容由SudoMe根據(jù)AutoCAD官方開(kāi)發(fā)文檔整理修改而來(lái),如有內(nèi)容表述不準(zhǔn)確或理解錯(cuò)誤的,請(qǐng)及時(shí)反饋。
AutoCAD開(kāi)發(fā)環(huán)境簡(jiǎn)述
AutoCAD開(kāi)發(fā)環(huán)境是在AutoCAD開(kāi)發(fā)過(guò)程中可以創(chuàng)建窗體、編輯代碼梧却、引用庫(kù)、調(diào)試運(yùn)行項(xiàng)目的地方败去,基于VB語(yǔ)法結(jié)構(gòu)的主要有兩個(gè)放航。
- VBA交互開(kāi)發(fā)環(huán)境(VBE)
VBE依附于開(kāi)發(fā)軟件本身,AutoCAD的VBA模塊在安裝后即可使用圆裕,可以通過(guò)AutoCAD功能區(qū)的“管理”選項(xiàng)卡→“應(yīng)用程序”面板→“Visual Basic 編輯器”或在AutoCAD命令行广鳍,輸入VBAIDE命令打開(kāi)荆几,可生成在AutoCAD中加載的dvb格式的代碼文件。 - VB集成開(kāi)發(fā)環(huán)境(VB6.0)
獨(dú)立的開(kāi)發(fā)軟件赊时,界面基本與VBE類似吨铸,開(kāi)發(fā)前必須要引入相應(yīng)的庫(kù),才能使用軟件的對(duì)象祖秒,可以開(kāi)發(fā)獨(dú)立的EXE軟件诞吱。
重要的視圖窗口
它跟常用的軟件一樣,都有菜單欄竭缝、工具欄以及各種窗口房维,在這里面尤其重要的三個(gè)窗口是工程資源管理器窗口、屬性窗口抬纸、代碼窗口咙俩,如果找不到對(duì)應(yīng)的窗口,可以在視圖中選擇湿故。
工程資源管理器
這是管理項(xiàng)目組件地方暴浦,默認(rèn)情況下,它默認(rèn)包含了Thisdrawing對(duì)象晓锻,在這里添加我們可以添加“窗體”、“模塊”和“類模塊”對(duì)象飞几。
引用參考:使用項(xiàng)目資源管理器 (VBA) | Microsoft Learn
項(xiàng)目組件如下:
組件 | 描述 |
---|---|
Thisdrawing對(duì)象(VBE) | 表示VBA代碼將訪問(wèn)的文檔砚哆。對(duì)于AutoCAD VBA項(xiàng)目,ThisDrawing表示當(dāng)前的AutoCAD圖形屑墨。 |
窗體 | 用于項(xiàng)目而構(gòu)建的自定義對(duì)話框躁锁。 |
標(biāo)準(zhǔn)模塊 | 代碼模塊組件包含通用的過(guò)程和函數(shù)。標(biāo)準(zhǔn)模塊也稱為代碼模塊卵史,或簡(jiǎn)稱為模塊战转。 |
類模塊 | 類模塊組件包含您自己的所有對(duì)象,這些對(duì)象被定義為類以躯。 |
注意:可以導(dǎo)入窗體、模塊或類模塊。窗體以FRM文件導(dǎo)入毡鉴,模塊以BAS文件導(dǎo)入井厌,類模塊以CLS文件導(dǎo)入。如果導(dǎo)入的組件同名址晕,導(dǎo)入會(huì)自動(dòng)添加編號(hào)膀懈。
屬性窗口
可以設(shè)置對(duì)象的屬性值。
引用參考:使用屬性窗口 (VBA) | Microsoft Learn
代碼窗口
編寫代碼的地方谨垃,在代碼窗口可以選擇對(duì)象及觸發(fā)的事件启搂。代碼是由一系列的指令和操作組成的硼控,在VBA中一段代碼用sub過(guò)程或function過(guò)程表示,常用的就是sub 過(guò)程名()....end sub
胳赌。
引用參考:(VBA) 創(chuàng)建過(guò)程 | Microsoft Learn
引用參考:代碼窗口 | Microsoft Learn
引用類庫(kù)與項(xiàng)目
引用第三方庫(kù)和項(xiàng)目的方法如下:
- 從“工具(VBE)/工程(VB6.0)”菜單中牢撼,單擊“引用”。
- 在“引用”對(duì)話框中匈织,單擊“瀏覽”浪默。
- 在“添加引用”對(duì)話框中,選擇要引用的類庫(kù)/項(xiàng)目文件缀匕,然后單擊“打開(kāi)”纳决。
- 單擊“確定”按鈕以完成引用添加。
引用參考:(VBA) 設(shè)置對(duì)類型庫(kù)的引用 | Microsoft Learn
項(xiàng)目與項(xiàng)目文件命名(VBE)
項(xiàng)目名稱在VBA IDE的“屬性”窗口中設(shè)置乡小。
注意:默認(rèn)項(xiàng)目名稱:ACADProject阔加;默認(rèn)項(xiàng)目文件名:Project.dvb
VBA IDE重命名項(xiàng)目方法:
- 在VBA IDE的“工程資源管理器”窗口中,選擇要更改的項(xiàng)目满钟。
- 右鍵單擊該項(xiàng)目胜榔,然后單擊“<工程名稱>屬性”。
- 在“<工程名稱>-工程屬性”對(duì)話框的“工程名稱”文本框中湃番,編輯項(xiàng)目的名稱夭织。單擊“確定”。
VBA IDE重命名項(xiàng)目文件方法:
- 在VBA IDE中吠撮,單擊“文件”菜單→“保存”尊惰。
- 在“另存為”對(duì)話框中,輸入項(xiàng)目文件的新名稱和位置泥兰。單擊保存弄屡。
窗體組件
項(xiàng)目窗體
窗體可以為應(yīng)用程序創(chuàng)建自定義對(duì)話框,一般用于提供信息鞋诗、獲取信息或控制應(yīng)用程序膀捷。
模式窗體與無(wú)模式窗體
用戶窗體可以是模式的,也可以是無(wú)模式的削彬。窗體的ShowModal屬性確定它是模式還是無(wú)模式的全庸。在AutoCAD VBA中將對(duì)話框定義為模式時(shí),用戶必須先響應(yīng)該對(duì)話框融痛,然后才能繼續(xù)應(yīng)用程序的其他部分糕篇。在通過(guò)Hide或Unload方法關(guān)閉模式對(duì)話框之前,不會(huì)執(zhí)行后續(xù)代碼酌心。無(wú)模式窗體允許窗體在用戶交互時(shí)保持顯示狀態(tài)拌消,類似于浮動(dòng)調(diào)色板。
注意:模式窗體顯示時(shí)禁用應(yīng)用程序中的其他窗體,但其他應(yīng)用程序不會(huì)禁用墩崩。
創(chuàng)建窗體的方法如下:
- 打開(kāi)“工程資料管理器”窗口氓英,然后選擇項(xiàng)目。
- 從“插入”菜單中鹦筹,單擊“用戶窗體”铝阐。將創(chuàng)建窗體并將添加到項(xiàng)目中。
創(chuàng)建無(wú)模式窗體的方法如下:
- 打開(kāi)“項(xiàng)目”窗口铐拐,然后選擇項(xiàng)目徘键。
- 從“插入”菜單中,選擇“用戶窗體”遍蟋,并將“顯示模式”屬性更改為“False”吹害。
- 將AcFocusCtrl (AcFocusCtrl.dll) 添加到“工具箱”中,然后將控件拖到窗體上虚青。AcFocusCtrl在用戶交互期間將焦點(diǎn)保持在窗體上它呀。
關(guān)于顯示和隱藏窗體
必須先顯示用戶窗體,然后才能使用棒厘,然后在不再需要它時(shí)隱藏它纵穿。顯示窗體是通過(guò)Show方法完成的。
默認(rèn)情況下奢人,創(chuàng)建的窗體是模式窗體谓媒,因此在顯示窗體時(shí),用戶將無(wú)法直接與AutoCAD交互何乎。要允許用戶訪問(wèn)AutoCAD圖形篙耗,使用Hide方法隱藏窗體,允許用戶對(duì)AutoCAD進(jìn)行有限訪問(wèn)宪赶。
以下示例顯示名為“UserForm1”的窗體:
Public Sub MyApplication()
UserForm1.Show
End Sub
子過(guò)程現(xiàn)在可以作為宏從VBARUN命令或AutoCAD用戶界面調(diào)用。
以下示例隱藏名為“UserForm1”的窗體:
Public Sub MyAppHide()
UserForm1.Hide
End Sub
關(guān)于加載和卸載窗體
若要加載窗體但不顯示它脯燃,使用Load方法搂妻。然后,使用Show方法可使窗體可見(jiàn)辕棚。如果調(diào)用Show方法并且尚未加載窗體欲主,則將自動(dòng)加載它。
卸載窗體會(huì)從內(nèi)存中刪除該窗體逝嚎,并回收與該窗體關(guān)聯(lián)的所有內(nèi)存扁瓢。當(dāng)窗體不再使用且想要回收內(nèi)存時(shí),可以卸載窗體补君。隱藏方法不執(zhí)行卸載引几。應(yīng)用程序結(jié)束且窗體尚未卸載時(shí),將自動(dòng)卸載窗體挽铁。
窗體顯示伟桅、隱藏敞掘、加載、卸載方法比較如下:
方法 | 描述 |
---|---|
Show | 顯示窗體楣铁。如果窗體尚未加載玖雁,則會(huì)自動(dòng)加載。 |
Hide | 隱藏窗體盖腕。窗體不會(huì)從內(nèi)存中卸載赫冬。 |
Load | 將窗體加載到內(nèi)存中但不顯示它。 |
Unload | 從內(nèi)存中卸載窗體溃列。這可以從Unload方法中顯式完成劲厌,也可以在應(yīng)用程序終止時(shí)自動(dòng)完成。 |
窗體控件
在窗體上創(chuàng)建控件需要控件工具箱哭廉,在工具箱中選定控件拖拽放置到窗體上即可脊僚。
常見(jiàn)操作
-
控件大小設(shè)置
單擊選擇控件,選擇邊框上夾點(diǎn)遵绰,將夾點(diǎn)拖動(dòng)到新位置辽幌,控件的大小將調(diào)整到該位置。若要移動(dòng)或調(diào)整多個(gè)控件椿访,按住Shift鍵同時(shí)選擇控件乌企。 -
控件格式設(shè)置
“格式”菜單上有設(shè)置控件格式的功能,可以設(shè)置控件的對(duì)齊格式成玫,使用Shift可以一次選擇多個(gè)控件加酵。 -
控件屬性設(shè)置
“屬性”控制控件的各種特征,例如控件的大小哭当、形狀猪腕、顏色、標(biāo)簽和默認(rèn)值钦勘。 -
控件添加代碼
雙擊“窗體”窗口中的控件可添加代碼陋葡。“代碼”窗口打開(kāi)后彻采,會(huì)創(chuàng)建默認(rèn)事件的子過(guò)程腐缤,也可以從“代碼”窗口右上角的事件下拉列表中選擇其他事件。
常用控件
命令按鈕(CommandButton)
- Caption:標(biāo)題肛响。
- Picture岭粤、 DownPicture、 DisabledPicture:分別代表正常特笋、按下剃浇、不可用狀態(tài)時(shí)顯示的圖片。
文本框(TextBox)
- MultiLine:確定控件是否能夠接受和顯示多行文本。
- PasswordChar:返回或設(shè)置一個(gè)值偿渡,該值指示輸入的字符或占位符在文本框控件中是否要顯示出來(lái)臼寄,返回或設(shè)置用作占位符。
注意:如果MultiLine屬性被設(shè)為True溜宽,那么設(shè)置PasswordChar屬性將不起作用吉拳。
Private Sub Text1_LostFocus()
If Val(Me.Text1.Text) <= 0 Or Val(Me.Text1.Text) > 20 Then
Me.Text1.Text = ""
Me.Text1.SetFocus
MsgBox("請(qǐng)輸入1到20的數(shù)字")
End If
End Sub
標(biāo)簽(Lable)
用來(lái)顯示標(biāo)題或說(shuō)明性的文字。常用屬性是Caption适揉,默認(rèn)屬性也是Caption留攒,因此可以用省略的寫法,比如Label1 = "VB程序設(shè)計(jì)開(kāi)始"
嫉嘀。
復(fù)選框(CheckBox)
- Value:確定復(fù)選框控件的狀態(tài)炼邀。0為沒(méi)有選中,默認(rèn)值剪侮;1為已選中拭宁;2為不可用。
以下示例為復(fù)選框控制文本框中文字是否為斜體字和加下劃線瓣俯。
Private Sub Form_Load()
Me.Text1.Text = "復(fù)選框控件應(yīng)用"
Me.Text1.Font.Size = 12
Me.Text1.Font.Bold = True
Me.Check1.Caption = "斜體字"
Me.Check2.Caption = "加下劃線"
End Sub
Private Sub Check1_Click()
If Me.Check1.Value = 1 Then
Me.Text1.Font.Italic = True
Else
Me.Text1.Font.Italic = False
End If
End Sub
Private Sub Check2_Click()
If Me.Check2.Value = 1 Then
Me.Text1.Font.Underline = True
Else
Me.Text1.Font.Underline = False
End If
End Sub
單選按鈕(OptionButton)
- Value:確定單選按鈕控件的狀態(tài)杰标。True表示已選擇,F(xiàn)alse表示未選擇彩匕,為默認(rèn)值腔剂。
注意:選擇一個(gè)單選按鈕時(shí),同組中的其他單選按鈕控件自動(dòng)無(wú)效驼仪。
引用參考:創(chuàng)建一組 OptionButton 控件 | Microsoft Learn
Private Sub Form_Load()
Me.Text1.Text = "單選框控件應(yīng)用"
Me.Option1.Caption = "8號(hào)字"
Me.Option2.Caption = "15號(hào)字"
End Sub
Private Sub Option1_Click()
Me.Text1.Font.Size = 8
End Sub
Private Sub Option2_Click()
Me.Text1.Font.Size = 15
End Sub
組合框(ComboBox)
- Style:指示控件的顯示類型和行為,只能在屬性窗口設(shè)置掸犬。0,下拉式組合框绪爸,可以在列表中選擇或文本框中輸入湾碎,為默認(rèn)值;1奠货,簡(jiǎn)單組合框介褥,不能下拉;2仇味,下拉式列表框,只能下拉選擇雹顺。
- AddItem方法:將項(xiàng)目添加到ComboBox控件中丹墨。
- RemoveItem方法:從ComboBox控件中刪除一項(xiàng)。
- Clear方法:清除ComboBox控件中的所有項(xiàng)目嬉愧。
列表框(ListBox)
- Style:指示控件的顯示類型和行為,只能在屬性窗口設(shè)置贩挣。0,標(biāo)準(zhǔn)式,為默認(rèn)值王财;1卵迂,復(fù)選框式,可以選擇多項(xiàng)绒净。
定時(shí)器(Timer)
定時(shí)器控件可以使程序自動(dòng)地間隔一段時(shí)間執(zhí)行一次代碼见咒。該控件在運(yùn)行時(shí)不在窗體上出現(xiàn),一個(gè)窗體可以同時(shí)應(yīng)用多個(gè)定時(shí)器控件挂疆。
- Interval:(最重要)確定每次發(fā)生Timer事件的時(shí)間間隔改览,單位為毫秒,默認(rèn)值為0缤言。
注意:Timer控件沒(méi)有方法宝当,只有Timer事件。只要Timer的Enabled屬性設(shè)置為True胆萧,且Interval大于0庆揩,則Timer事件以Interval屬性指定的時(shí)間間隔發(fā)生。
Private Sub Form_Load()
Me.Timer1.Interval = 1000
Me.Command1.Caption = "顯示系統(tǒng)時(shí)間"
Me.Command2.Caption = "停 止"
End Sub
Private Sub Timer1_Timer()
Me.Text1.Text = Time
End Sub
Private Sub Command1_Click()
Me.Timer1.Enabled = True
End Sub
Private Sub Command2_Click()
Me.Timer1.Enabled = False
End Sub
公共對(duì)話框(CommonDialog)
公共對(duì)話框控件是ActiveX控件(Microsoft Common Dialog Control 6.0)跌穗,提供一組標(biāo)準(zhǔn)的Windows對(duì)話框订晌,比如打開(kāi)和保存文件、設(shè)置打印選項(xiàng)瞻离、選擇顏色和字體腾仅、顯示幫助等操作,對(duì)話框控件用6種方法提供不同類型的對(duì)話框樣式套利。
方法 | 對(duì)話框類型 |
---|---|
ShowOpen | 打開(kāi)對(duì)話框 |
ShowSave | 另存為對(duì)話框 |
ShowColor | 顏色對(duì)話框 |
ShowFont | 字體對(duì)話框 |
ShowPrinter | 打印或打印選項(xiàng)對(duì)話框 |
ShowHelp | 調(diào)用Windows幫助引擎 |
- 公共屬性
- DialogTitle:返回或設(shè)置該對(duì)話框標(biāo)題欄所顯示的字符串推励,比如另存為對(duì)話框默認(rèn)標(biāo)題為另存為。
- 打開(kāi)肉迫、另存為對(duì)話框
- FileName:返回或設(shè)置所選文件的路徑和文件名验辞。
- InitDir:為打開(kāi)或另存為對(duì)話框指定初始的目錄,如果此屬性沒(méi)有指定喊衫,則使用當(dāng)前目錄跌造。比如:
Me.CommonDialog1.InitDir = App.Path
。 - Filter:返回或設(shè)置在對(duì)話框的類型列表框中所顯示的過(guò)濾器族购。語(yǔ)法為“提示信息|*.擴(kuò)展名”壳贪,若有多種文件,使用管道(|)符號(hào)將其隔開(kāi)寝杖。比如:
CommonDialog1.Filter ="文本文件(*.txt)|*.txt|圖形文件(*.bmp违施;*.ico)|*.bmp;*.ico|所有文件(*.*)|*.*"
瑟幕。 - DefaultExt:當(dāng)沒(méi)有指定擴(kuò)展名時(shí)磕蒲,自動(dòng)給該文件添加指定的擴(kuò)展名留潦。
以下代碼為打開(kāi)對(duì)話框簡(jiǎn)單示例:
Private Sub Command1_Click()
On Error Resume Next
With Me.CommonDialog1
.DialogTitle = "打開(kāi)圖形文件"
.Filter = "圖形文件(*.bmp;*.ico)|*.bmp;*.ico|所有文件(*.*)|*.*"
.InitDir = "C:\我的應(yīng)用程序"
.ShowOpen
End With
Me.Text1.Text = CommonDialog1.FileName
Me.Picture1.Picture = LoadPicture(Me.CommonDialog1.FileName)
End Sub
注意:在打開(kāi)或另存為對(duì)話框中選擇一個(gè)文件,并不能將該文件打開(kāi)或保存辣往,它僅用來(lái)返回或設(shè)置用戶在對(duì)話框中選擇的路徑和文件名兔院。
- 顏色對(duì)話框
Private Sub Command1_Click()
Me.CommonDialog1.Flags = cdlCCFullOpen
Me.CommonDialog1.ShowColor
Me.Circle(2000,2000),500,Me.CommonDialog1.Color
End Sub
- 字體對(duì)話框
- FontName:字體名稱。
- FontSize:字體大小站削。
- FontBold:值為True時(shí)選擇粗體坊萝。
- FontItalic:值為True時(shí)選擇斜體。
- FontStrikethru:值為True時(shí)選擇刪除線钻哩。
- FontUnderline:值為True時(shí)選擇下劃線屹堰。
- Color:字體顏色。要使用此值街氢,必須將 Flags 屬性設(shè)置為cdlCFEffects扯键。
- 打印或打印選項(xiàng)對(duì)話框
- Copies:打印份數(shù)。
- FromPage:打印的起始頁(yè)珊肃。
- ToPage:打印的結(jié)束頁(yè)荣刑。
- hDC:選定打印機(jī)的設(shè)備句柄。