第三章 AutoCAD开发环境

说明:本篇内容由SudoMe根据AutoCAD官方开发文档整理修改而来,如有内容表述不准确或理解错误的,请及时反馈。

AutoCAD开发环境简述

AutoCAD开发环境是在AutoCAD开发过程中可以创建窗体、编辑代码、引用库、调试运行项目的地方,基于VB语法结构的主要有两个。

  • VBA交互开发环境(VBE)
    VBE依附于开发软件本身,AutoCAD的VBA模块在安装后即可使用,可以通过AutoCAD功能区的“管理”选项卡→“应用程序”面板→“Visual Basic 编辑器”或在AutoCAD命令行,输入VBAIDE命令打开,可生成在AutoCAD中加载的dvb格式的代码文件。
  • VB集成开发环境(VB6.0)
    独立的开发软件,界面基本与VBE类似,开发前必须要引入相应的库,才能使用软件的对象,可以开发独立的EXE软件。

重要的视图窗口

它跟常用的软件一样,都有菜单栏、工具栏以及各种窗口,在这里面尤其重要的三个窗口是工程资源管理器窗口、属性窗口、代码窗口,如果找不到对应的窗口,可以在视图中选择。

工程资源管理器
这是管理项目组件地方,默认情况下,它默认包含了Thisdrawing对象,在这里添加我们可以添加“窗体”、“模块”和“类模块”对象。
引用参考:使用项目资源管理器 (VBA) | Microsoft Learn

项目组件如下:

组件 描述
Thisdrawing对象(VBE) 表示VBA代码将访问的文档。对于AutoCAD VBA项目,ThisDrawing表示当前的AutoCAD图形。
窗体 用于项目而构建的自定义对话框。
标准模块 代码模块组件包含通用的过程和函数。标准模块也称为代码模块,或简称为模块。
类模块 类模块组件包含您自己的所有对象,这些对象被定义为类。

注意:可以导入窗体、模块或类模块。窗体以FRM文件导入,模块以BAS文件导入,类模块以CLS文件导入。如果导入的组件同名,导入会自动添加编号。

属性窗口
可以设置对象的属性值。
引用参考:使用属性窗口 (VBA) | Microsoft Learn

代码窗口
编写代码的地方,在代码窗口可以选择对象及触发的事件。代码是由一系列的指令和操作组成的,在VBA中一段代码用sub过程或function过程表示,常用的就是sub 过程名()....end sub
引用参考:(VBA) 创建过程 | Microsoft Learn
引用参考:代码窗口 | Microsoft Learn

引用类库与项目

引用第三方库和项目的方法如下:

  1. 从“工具(VBE)/工程(VB6.0)”菜单中,单击“引用”。
  2. 在“引用”对话框中,单击“浏览”。
  3. 在“添加引用”对话框中,选择要引用的类库/项目文件,然后单击“打开”。
  4. 单击“确定”按钮以完成引用添加。

引用参考:(VBA) 设置对类型库的引用 | Microsoft Learn

项目与项目文件命名(VBE)

项目名称在VBA IDE的“属性”窗口中设置。
注意:默认项目名称:ACADProject;默认项目文件名:Project.dvb

VBA IDE重命名项目方法:

  1. 在VBA IDE的“工程资源管理器”窗口中,选择要更改的项目。
  2. 右键单击该项目,然后单击“<工程名称>属性”。
  3. 在“<工程名称>-工程属性”对话框的“工程名称”文本框中,编辑项目的名称。单击“确定”。

VBA IDE重命名项目文件方法:

  1. 在VBA IDE中,单击“文件”菜单→“保存”。
  2. 在“另存为”对话框中,输入项目文件的新名称和位置。单击保存。

窗体组件

项目窗体

窗体可以为应用程序创建自定义对话框,一般用于提供信息、获取信息或控制应用程序。

模式窗体与无模式窗体
用户窗体可以是模式的,也可以是无模式的。窗体的ShowModal属性确定它是模式还是无模式的。在AutoCAD VBA中将对话框定义为模式时,用户必须先响应该对话框,然后才能继续应用程序的其他部分。在通过Hide或Unload方法关闭模式对话框之前,不会执行后续代码。无模式窗体允许窗体在用户交互时保持显示状态,类似于浮动调色板。
注意:模式窗体显示时禁用应用程序中的其他窗体,但其他应用程序不会禁用。

创建窗体的方法如下:

  1. 打开“工程资料管理器”窗口,然后选择项目。
  2. 从“插入”菜单中,单击“用户窗体”。将创建窗体并将添加到项目中。

创建无模式窗体的方法如下:

  1. 打开“项目”窗口,然后选择项目。
  2. 从“插入”菜单中,选择“用户窗体”,并将“显示模式”属性更改为“False”。
  3. 将AcFocusCtrl (AcFocusCtrl.dll) 添加到“工具箱”中,然后将控件拖到窗体上。AcFocusCtrl在用户交互期间将焦点保持在窗体上。

关于显示和隐藏窗体

必须先显示用户窗体,然后才能使用,然后在不再需要它时隐藏它。显示窗体是通过Show方法完成的。
默认情况下,创建的窗体是模式窗体,因此在显示窗体时,用户将无法直接与AutoCAD交互。要允许用户访问AutoCAD图形,使用Hide方法隐藏窗体,允许用户对AutoCAD进行有限访问。

以下示例显示名为“UserForm1”的窗体:

Public Sub MyApplication()
    UserForm1.Show
End Sub

子过程现在可以作为宏从VBARUN命令或AutoCAD用户界面调用。

以下示例隐藏名为“UserForm1”的窗体:

Public Sub MyAppHide()
    UserForm1.Hide
End Sub

关于加载和卸载窗体
若要加载窗体但不显示它,使用Load方法。然后,使用Show方法可使窗体可见。如果调用Show方法并且尚未加载窗体,则将自动加载它。
卸载窗体会从内存中删除该窗体,并回收与该窗体关联的所有内存。当窗体不再使用且想要回收内存时,可以卸载窗体。隐藏方法不执行卸载。应用程序结束且窗体尚未卸载时,将自动卸载窗体。
窗体显示、隐藏、加载、卸载方法比较如下:

方法 描述
Show 显示窗体。如果窗体尚未加载,则会自动加载。
Hide 隐藏窗体。窗体不会从内存中卸载。
Load 将窗体加载到内存中但不显示它。
Unload 从内存中卸载窗体。这可以从Unload方法中显式完成,也可以在应用程序终止时自动完成。

窗体控件

在窗体上创建控件需要控件工具箱,在工具箱中选定控件拖拽放置到窗体上即可。

常见操作

  • 控件大小设置
    单击选择控件,选择边框上夹点,将夹点拖动到新位置,控件的大小将调整到该位置。若要移动或调整多个控件,按住Shift键同时选择控件。
  • 控件格式设置
    “格式”菜单上有设置控件格式的功能,可以设置控件的对齐格式,使用Shift可以一次选择多个控件。
  • 控件属性设置
    “属性”控制控件的各种特征,例如控件的大小、形状、颜色、标签和默认值。
  • 控件添加代码
    双击“窗体”窗口中的控件可添加代码。“代码”窗口打开后,会创建默认事件的子过程,也可以从“代码”窗口右上角的事件下拉列表中选择其他事件。

常用控件

命令按钮(CommandButton)

  • Caption:标题。
  • Picture、 DownPicture、 DisabledPicture:分别代表正常、按下、不可用状态时显示的图片。

文本框(TextBox)

  • MultiLine:确定控件是否能够接受和显示多行文本。
  • PasswordChar:返回或设置一个值,该值指示输入的字符或占位符在文本框控件中是否要显示出来,返回或设置用作占位符。
    注意:如果MultiLine属性被设为True,那么设置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("请输入1到20的数字")
    End If
End Sub

标签(Lable)
用来显示标题或说明性的文字。常用属性是Caption,默认属性也是Caption,因此可以用省略的写法,比如Label1 = "VB程序设计开始"

复选框(CheckBox)

  • Value:确定复选框控件的状态。0为没有选中,默认值;1为已选中;2为不可用。

以下示例为复选框控制文本框中文字是否为斜体字和加下划线。

Private Sub Form_Load()
    Me.Text1.Text = "复选框控件应用"
    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)

Private Sub Form_Load()
    Me.Text1.Text = "单选框控件应用"
    Me.Option1.Caption = "8号字"
    Me.Option2.Caption = "15号字"
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:指示控件的显示类型和行为,只能在属性窗口设置。0,下拉式组合框,可以在列表中选择或文本框中输入,为默认值;1,简单组合框,不能下拉;2,下拉式列表框,只能下拉选择。
  • AddItem方法:将项目添加到ComboBox控件中。
  • RemoveItem方法:从ComboBox控件中删除一项。
  • Clear方法:清除ComboBox控件中的所有项目。

列表框(ListBox)

  • Style:指示控件的显示类型和行为,只能在属性窗口设置。0,标准式,为默认值;1,复选框式,可以选择多项。

定时器(Timer)
定时器控件可以使程序自动地间隔一段时间执行一次代码。该控件在运行时不在窗体上出现,一个窗体可以同时应用多个定时器控件。

  • Interval:(最重要)确定每次发生Timer事件的时间间隔,单位为毫秒,默认值为0。
    注意:Timer控件没有方法,只有Timer事件。只要Timer的Enabled属性设置为True,且Interval大于0,则Timer事件以Interval属性指定的时间间隔发生。
Private Sub Form_Load()
    Me.Timer1.Interval = 1000
    Me.Command1.Caption = "显示系统时间"
    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

公共对话框(CommonDialog)
公共对话框控件是ActiveX控件(Microsoft Common Dialog Control 6.0),提供一组标准的Windows对话框,比如打开和保存文件、设置打印选项、选择颜色和字体、显示帮助等操作,对话框控件用6种方法提供不同类型的对话框样式。

方法 对话框类型
ShowOpen 打开对话框
ShowSave 另存为对话框
ShowColor 颜色对话框
ShowFont 字体对话框
ShowPrinter 打印或打印选项对话框
ShowHelp 调用Windows帮助引擎
  • 公共属性
    • DialogTitle:返回或设置该对话框标题栏所显示的字符串,比如另存为对话框默认标题为另存为。
  • 打开、另存为对话框
    • FileName:返回或设置所选文件的路径和文件名。
    • InitDir:为打开或另存为对话框指定初始的目录,如果此属性没有指定,则使用当前目录。比如:Me.CommonDialog1.InitDir = App.Path
    • Filter:返回或设置在对话框的类型列表框中所显示的过滤器。语法为“提示信息|*.扩展名”,若有多种文件,使用管道(|)符号将其隔开。比如:CommonDialog1.Filter ="文本文件(*.txt)|*.txt|图形文件(*.bmp;*.ico)|*.bmp;*.ico|所有文件(*.*)|*.*"
    • DefaultExt:当没有指定扩展名时,自动给该文件添加指定的扩展名。

以下代码为打开对话框简单示例:

Private Sub Command1_Click()
    On Error Resume Next
     With Me.CommonDialog1
        .DialogTitle = "打开图形文件"
        .Filter = "图形文件(*.bmp;*.ico)|*.bmp;*.ico|所有文件(*.*)|*.*"
        .InitDir = "C:\我的应用程序"
        .ShowOpen
    End With
    Me.Text1.Text = CommonDialog1.FileName
    Me.Picture1.Picture = LoadPicture(Me.CommonDialog1.FileName)
End Sub

注意:在打开或另存为对话框中选择一个文件,并不能将该文件打开或保存,它仅用来返回或设置用户在对话框中选择的路径和文件名。

  • 颜色对话框
Private Sub Command1_Click()
    Me.CommonDialog1.Flags = cdlCCFullOpen
    Me.CommonDialog1.ShowColor
    Me.Circle(2000,2000),500,Me.CommonDialog1.Color
End Sub
  • 字体对话框
    • FontName:字体名称。
    • FontSize:字体大小。
    • FontBold:值为True时选择粗体。
    • FontItalic:值为True时选择斜体。
    • FontStrikethru:值为True时选择删除线。
    • FontUnderline:值为True时选择下划线。
    • Color:字体颜色。要使用此值,必须将 Flags 属性设置为cdlCFEffects。
  • 打印或打印选项对话框
    • Copies:打印份数。
    • FromPage:打印的起始页。
    • ToPage:打印的结束页。
    • hDC:选定打印机的设备句柄。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,233评论 6 495
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,357评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,831评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,313评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,417评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,470评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,482评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,265评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,708评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,997评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,176评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,503评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,150评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,391评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,034评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,063评论 2 352

推荐阅读更多精彩内容