AutoCAD ActiveX VBA二次开发技术基础及应用实例

上传人:一*** 文档编号:62227344 上传时间:2022-03-14 格式:DOC 页数:245 大小:796.50KB
返回 下载 相关 举报
AutoCAD ActiveX VBA二次开发技术基础及应用实例_第1页
第1页 / 共245页
AutoCAD ActiveX VBA二次开发技术基础及应用实例_第2页
第2页 / 共245页
AutoCAD ActiveX VBA二次开发技术基础及应用实例_第3页
第3页 / 共245页
点击查看更多>>
资源描述
第1章 走进AutoCAD ActiveX/VBA1.1 ActiveX 自动化在AutoCAD中的应用ActiveX是微软近年推出的一个基于COM(Component Object Model)的技术规范。它是在OLE(Object Linked and Embedded)基础上发展的新技术,其宗旨是在Windows系统的统一管理下协调不同的应用程序,构成复合文档。应用程序可以决定将自己哪些信息暴露出来,这个暴露自身信息的应用程序称为服务程序(Server);而操纵服务程序的程序称为客户程序(Client)。所谓ActiveX部件(简称“部件”),是一段可重复使用的编程代码和数据,它由利用ActiveX Automation(自动化)技术创建的一个或多个对象所组成。由于编写客户程序比将其做成服务程序要简单得多,因此要利用已有的ActiveX部件作为被调用的服务程序。Autodesk公司采纳了微软的这一技术规范,最早在AutoCAD R14.0版推出了基于ActiveX Automation技术的开发方式。随后就有AutoCAD R14.01版,该版支持“前期绑定”,并且内嵌了AutoCAD VBA 。到AutoCAD 2000/2002(属R15版)、AutoCAD 2004/2005/2006(属R16版)和AutoCAD 2007(属R17版),这种新型的开发方式得到了进一步的改进及完善。AutoCAD ActiveX 使用户能够从 AutoCAD 的内部或外部以编程方式来操作 AutoCAD。它是通过将 AutoCAD 对象显示到“外部世界”来做到这一点的。一旦这些对象被“暴露”,许多不同的编程语言或其他应用程序(例如VB、C+、Java、Word VBA 或 Excel VBA等)就可以访问它们。VB功能强大、语法简单、应用广泛,是良好的外部编程环境。AutoCAD VBA是内嵌在AutoCAD内部的编程环境。AutoCAD VBA 允许 VBA 环境与 AutoCAD 同时运行。VBA 通过 AutoCAD ActiveX Automation 接口将消息发送到 AutoCAD,并通过 ActiveX Automation 接口对 AutoCAD 进行编程控制。将AutoCAD 、ActiveX Automation 和 VBA/VB 相结合编程有三个基本要素。第一个要素是 AutoCAD 本身,它拥有丰富的封装了的 AutoCAD 图元、数据和命令的对象集。 AutoCAD 是一个具有多层接口的开放架构应用程序。第二个要素是 AutoCAD ActiveX Automation 接口,它建立与 AutoCAD 对象的消息传递(通信)。第三个要素是 VBA/VB 集成编程环境 (IDE),它具有自己的对象组、关键词和常量等,能提供程序流、控制、调试和执行等功能。在AutoCAD 2000/2002中,几乎对外暴露了所有对象,包括图形对象(如直线、圆弧)、样式设置对象(如线型、文本样式)、组织结构对象(如图层)、图形显示对象(如视口)以及菜单和工具栏等。到AutoCAD 2004/2005/2006版,又得到逐步的改进,如真彩色控制和表等。1.2 AutoCAD VBA基础1.2.1概述VBA (Visual Basic for Applications)与VB(Visual Basic)一样也是一种面向对象的程序设计语言,它继承了VB语法简单功能强大的特点。AutoCAD 2000/2002 VBA相当于VB5,而AutoCAD 2004/2005/2006 VBA相当于VB6,VB所支持的对象属性和方法,VBA也支持。AutoCAD VBA 允许其Visual Basic环境与 AutoCAD 同时运行,并通过 ActiveX Automation 接口提供对 AutoCAD 的编程控制。这样就把 AutoCAD、ActiveX Automation和 VBA 紧密连结在一起,提供一个非常强大的接口。它不仅能控制 AutoCAD 对象,也能向其他应用程序发送数据或从中提取数据。在AutoCAD中与VBA应用程序开发有关的下拉菜单如图1-1所示。图1-1与VBA应用程序开发有关的下拉菜单注:VBA 不支持创建可执行文件,但它提供了口令保护,以工程的方式保护工程窗体、类和模块的可见性。用户可以在 VBA IDE 中选择菜单“工具(T)”|“ACAD Project属性(E)”,在“ACAD Project- 工程属性”对话框的“保护”选项卡进行相应的操作。VBA常用的工程术语有:(1)内嵌工程(embedded project):内嵌在AutoCAD图形中的VBA工程,打开图形时自动加载。(2)全局(通用)工程(global project):指独立存储在“.dvb”文件中的工程,需要先加载。(3)一般(规则)文档:未包含VBA内嵌工程的AutoCAD图形。(4)智能文档:包含一个或多个VBA内嵌工程的AutoCAD图形。(5)当前工程:VBA IDE中当前选定的工程。(6)宏:用户可直接执行的VBA通用子程序或函数。每一个VBA工程至少包含一个宏。VBA工程可以包含的组件有对象、窗体、标准模块、类模块和引用。下面对这些元素分别介绍:(1)ThisDrawing对象:代表当前(活动)的AutoCAD图形(文档)。对于全局工程,它指AutoCAD中的当前(活动)文档;对于内嵌工程,指包含此工程的文档。一般情况下,创建一个工程后,该工程只含有一个元素ThisDrawing对象,其它部分要用户根据需要添加。(2)窗体:窗体是放置其它对象的容器,是基本的构造块。用户可以通过它为应用程序创建自定义的对话框。它可以包括事件过程、通用过程和变量的窗体级声明。(3)标准模块:标准模块也称作“代码模块”或简称为“模块”。 它包含用户的常用过程和函数。(4)类模块:类模块创建具有属性和方法的用户自定义的对象。(5)引用:指能被应用程序使用的外部ActiveX部件或其它工程文件。1.2.2 VBA工程及其管理当前AutoCAD进程中加载的所有VBA工程都可以用“VBA管理器”的对话框来管理。可使用它创建、加载、卸载、保存、内嵌或提取VBA工程,还可查看有哪些工程内嵌在打开的图形中(如果有的话)。可选择菜单“工具(T)”|“宏(A)”|“VBA管理器(V).”或键入命令“VBAMAN”打开VBA管理器,如图1-2所示。图1-2 VBA管理器1.加载工程当需要加载已有的工程时,可应用菜单“工具”|“宏(A)”|“VBA管理器.”打开“VBA管理器”对话框,点击“加载(L).”,按钮或选择菜单“工具”|“宏(A)”|“加载工程(L).”打开 ”打开VBA工程” 对话框。如图1-3所示。图1-3 ”打开VBA工程” 对话框当选取工程将其加载到AutoCAD图形中时,此工程引用的其它工程也会被自动加载。也可在命令提示行键入“VBALOAD”执行加载。2卸载工程在”VBA管理器”对话框中选择要卸载的工程,单击“卸载(U)”即可。也可在命令提示行键入“VBAUNLOAD” 执行卸载。3. 嵌入工程将工程嵌入到AutoCAD图形中,是指把全局工程的副本放到图形的数据库中,此后该工程就将随着图形的打开而加载,以及随着图形的关闭而卸载。注意,一个图形只能嵌入一个内嵌工程。欲将工程嵌入到AutoCAD图形中,应单击“VBA管理器”上的“嵌入(E)”按钮。4提取工程当单击“VBA管理器”上的“提取(X)”按钮时,就使该工程从所在的图形数据库中删除。用户可将该工程另存到外部文件中,否则该工程的数据将会被删除。5. 创建新工程要创建新的VBA工程,应单击“VBA管理器”上的“新建(N)”按钮。一个新建VBA工程的默认名称为ACADProject,若要变更工程的名称,应在VBA IDE集成开发环境中的工程属性栏中修改。6. 命名工程和保存工程工程的名称是在VBA IDE的“属性”窗口中设定的,而保存全局工程的文件名(.dvb)应在“VBA管理器”中单击“另存为(S)”按钮,在对话框的“文件名(N)”框内输入文件名(.dvb),文件名是存储工程文件的唯一标识。对于一个已嵌入到图形中的工程,在保存图形文件时将一起被保存。1.2.3 VBA 集成开发环境在AutoCAD中加载了工程后,就可以利用VBA集成开发环境(IDE)来编辑该工程的窗体、程序代码和引用等元素,也可以在VBA IDE中调试和运行工程。1打开VBA IDE可用以下三种方法打开VBA IDE:(1)在命令行中键入“VBAIDE”。(2)应用菜单“工具”|“宏(A)”|“Visual Basic编辑器(B)”。(3)直接按“Alt+F11”键。打开的VBA IDE见图1-4。图1-4打开的VBA IDE注:可以设定在每次打开AutoCAD时让系统自动启动VBA IDE,只需在acad.arx文件中增添一行代码“acadvba.arx”即可。2工程信息可在VBA IDE 中的“工程”窗口查看所有已经加载的VBA工程。并可查看这些工程中所包含的程序代码、类别、窗体及与工程相关的文件等。3工程的组成每个工程都是由不同元素构成的。它可以包含AutoCAD图形、窗体、标准模块、类模块和引用。4添加新元素用户可以在工程中添加新元素,其方法是从“插入(I)”菜单选择相应的选项进行添加。当新的元素添加到工程中以后,就会以默认的属性显示在“工程”窗口中。5导入已存在的元素用户可以将已存在的元素导入到当前的工程中。可以导入的文件包括:窗体文件(.FRM)、标准模块文件(.BAS)、类模块文件(.CLS)。当导入已存在的元素时,新添加到当前工程中的是原文件的副本,对导入元素的修改不会影响到原始文件。导入元素的方法是在菜单“文件(F)”中选“导入文件(I).”项,打开“导入文件”对话框,选择需要的文件即可。导入后,即显示在“工程”窗口中。6编辑元素1) 使用窗体编辑器在窗体编辑器中,用户可以进行应用程序界面的设计。可通过“工程”窗口中选择要编辑的窗体,再选择菜单“视图(V)”|“对象窗口(B)”,将窗口编辑器切换出来(也可点击“工程” 窗口左上角的“查看对象”按钮)。接下来即可编辑窗体及其上面控件的属性。2) 使用代码编辑器在代码编辑器中,用户可以进行代码的编辑。可通过“工程”窗口中选择要编辑的模块,再选择菜单“视图(V)”|“代码窗口(C)”,将代码窗口切换出来(也可点击“工程” 窗口左上角的“查看代码”按钮)。接下来即可编辑事件过程的代码。7设置VBA IDE选项选择“工具(T)”|“选项(O).”调出“选项”对话框,如图1-5所示。应用该对话框可以设置VBA IDE的环境特征。它包括四个选项卡,其内容分别为:“编辑器”、“ 编辑器格式”、“通用”和“可连接的”。比如,利用“通用”选项卡,用户可以设置在设计状态下是否显示窗体上的网格,设置网格大小以及控件是否与网格对齐。又如利用“编辑器” 选项卡设定是否强制要求变量声明。图1-5 VBA IDE的“选项”对话框1.2.4宏及其管理1“宏“对话框从 AutoCAD 的菜单“工具(T)”|“宏(A)” |“宏(M).”或在 AutoCAD 命令提示中输入 “VBARUN” ,即可打开“宏”对话框。“宏”对话框显示了图形文件或工程文件中包含的所有宏。通过“宏”对话框,用户可以运行、编辑、删除、创建宏及设置 VBA 工程选项。用户可以通过“宏位置(A)”的下拉列表改变宏的选用范围。打开的“宏”对话框如图1-6所示。如果在VBARUN命令前加“_”,则可直接在命令行提示输入要运行的宏及运行该宏。图1-6“宏”对话框2. 运行宏运行宏就是在当前(活动)的 AutoCAD图形中执行宏的程序代码。当前(活动)的图形指的是宏开始执行时焦点所在的打开图形。对于全局工程中的宏,ThisDrawing 对象的所有 VBA 引用都将指向当前(活动)的图形。对于内嵌工程中的宏,ThisDrawing 对象总是指内嵌了宏的图形。运行宏时,首先要打开“宏”对话框,选定要运行的宏,然后单击“运行(R)”按钮即可。允许在AutoCAD命令行键入“VBASTMT”直接运行VBA语句。VBA语句中可以包括关键字、操作符、变量、常量、表达式等内容。语句一般只占一行,若需要多句,可用冒号(“:”)隔开。3. 编辑和调试宏若需修改和编辑已有的宏,需要在 VBA IDE开发环境中进行。宏的调试是按单步运行的方式。其方法是:先在“宏”对话框中选择要调试的宏,然后选择按钮“逐语句(S)”。4. 创建新宏利用“宏”对话框可以创建新的宏,步骤:(1)首先在“宏名称(M)”文本框内键入宏的名称,例如键入“acad_firstVBA”。(2)在“宏位置(A)”下拉列表中选取要建立宏的工程,例如选取”acad_firstVBA.dwg”,自动生成的宏名称如图1-6所示。若未选取“宏位置(A)”,当运行“创建”时,会自动弹出对话框提示操作者确认。(3)单击“创建(C)”按钮,出现VBA IDE。在Sub acad_firstVBA( )和End Sub语句之间键入程序代码,如图1-7 的VBA IDE程序代码栏中所示。图1-7创建新宏5. 删除宏利用“宏”对话框可以删除宏,步骤:(1)选择要删除的宏的名称。(2)单击“删除(D)”按钮。6.设置选项当单击“宏”对话框中的“选项(O)”按钮,即弹出设置VBA的“选项”对话框,如图1-8所示。图1-8 宏的“选项”对话框1.2.5 VBA中的窗体1 用户窗体窗体(Form)是开发应用程序的基本内容之一,通过窗体可以为用户创建自定义对话框。新建的窗体是空的,需要用户调整其大小和位置,并在上面安放控件。VBA提供的控件都在工具箱中,用户根据设计的需要从中选取,并可调整控件的大小和位置。AutoCAD VBA只支持自定义窗体。自定义窗体(本书也称为窗体)可以是模式窗体,也可以是无模式窗体。窗体的 ShowModal 属性确定该窗体是模式窗体还是无模式窗体。当在 AutoCAD VBA 中将一个对话框定义为模式对话框时,用户必须先响应该对话框,才允许继续操作应用程序的其他部分。2 设计模式和运行模式当用户在创建窗体时,是属于设计模式状态,此时用户可以进行如下工作 :(1)向窗体中添加控件。(2)更改窗体的属性。(3)更改窗体上控件的属性。(4)向窗体模块添加代码。在设计模式中,用户、AutoCAD 的用户界面以及窗体之间没有数据交互发生。 当运行应用程序时,窗体就变为运行模式。在运行模式中,用户不能直接调整窗体及其上的控件。窗体显示在 AutoCAD 的界面中,用户可以与窗体进行交互。3添加控件向窗体中添加控件非常容易。只需从控件工具箱中选择控件,然后将该控件拖放到窗体上即可。释放鼠标时,控件的副本就被放到窗体上。当控件位于窗体上之后,用户就可以修改控件的位置和大小。用户可以根据自己的需要复制任意数量的控件。用户还可以再更改控件的大小和位置、使用格式化控制(使用VBA IDE的“格式(O)”下拉菜单中的选项)、 编辑控件的属性、以及添加控件的程序代码(双击控件进入代码窗口)。4显示和隐藏窗体 显示窗体需要使用窗体本身的Show 方法。例:本例显示一个名称为“UserForm1”的窗体: Public Sub MyApplication( )UserForm1.ShowEnd Sub默认情况下,创建的窗体是模式窗体,所以当显示该窗体时,用户不能与 AutoCAD 直接进行交互。例如,当窗体显示时,用户不能选择图形中的点和对象。如果要求用户访问 AutoCAD 图形,要使用窗体本身的Hide 方法先将该窗体隐藏起来。当使用 Hide 方法时,该窗体并未从内存中卸载,只是没有显示出来而已。 5加载和卸载窗体 有时候用户可能希望在运行时将窗体加载到内存中,但不需要立即显示窗体。这种操作有助于更好地控制何时在应用程序中加载窗体,或者可以通过编程访问窗体同时又不会向用户显示窗体。 要加载窗体同时又不显示该窗体,须使用窗体本身的Load 方法。 如果调用 Show 方法时窗体尚未加载,将会自动加载窗体。 用户也可能需要卸载窗体。卸载窗体会从内存中卸载该窗体并回收与窗体关联的所有内存。在使用 Load 或 Show 方法重新加载窗体之前,用户无法与窗体交互,而且不能以编程的方式来操作此窗体。当用户知道应用程序中不再使用该窗体并希望回收内存时,就可以选择卸载窗体。 卸载窗体需要使用窗体本身的UnLoad方法。当应用程序结束时,窗体将会自动卸载。1.2.6第一个VBA编程示例利用AutoCAD ActiveX/VBA进行二次开发,在模型空间写“AutoCAD ActiveX/VBA”。本例一般可采用以下两种方式:方式一:添加用户窗体步骤:(1)在AutoCAD 打开一个新图形。(2)选菜单“工具(T)”|“宏(A)”|“Visual Basic编辑器(B)”。(3)在当前工程中添加一个用户窗体。选菜单“插入(I)”|“用户窗体(U)”后,出现UserForm1。在该窗体上添加按钮CommandButton1和CommandButton2 ,并依次将按钮的Caption属性设为“运行”和“退出”。用户窗体如图1-9所示。图1-9第一个VBA编程示例(用户窗体)双击“运行” 按钮,出现该事件过程的程序代码窗口,输入下列代码:Private Sub CommandButton1_Click( )Dim textPoint(0 To 2) As Double 声明文字插入点Dim textHeight As Double 声明文字高度Dim textStr As String 声明字符串Dim textObject As AcadText 声明文字对象textPoint(0) = 20 设置插入点的X坐标textPoint(1) = 40 设置插入点的Y坐标textPoint(2) = 0 设置插入点的Z坐标textHeight = 10 设置文字高度为10textStr = AutoCAD ActiveX/VBA 设置字符串创建text对象Set textObject = ThisDrawing.ModelSpace.AddText _(textStr, textPoint, textHeight)ThisDrawing.Application.ZoomExtents 根据实际范围计算缩放textObject.Update 更新显示图形对象End Sub再双击“结束” 按钮,输入下列代码:Private Sub CommandButton2_Click( )Unload Me 卸载窗体End 结束应用程序End Sub当点击菜单或工具栏上的运行钮时,图1-9中所示的用户窗体就变为显示在AutoCAD中的用户界面。单击其上的“运行” 按钮,运行结果如图1-10所示。图1-10第一个VBA编程示例的运行结果当单击用户界面上的“结束” 按钮,可使窗体卸载并结束应用程序。若直接点击VBA IDE工具栏上的重新设置()钮,也可结束应用程序。本例可按名为“acad_firstVBA.dvb”的全局工程保存该工程文件。方式二:添加过程步骤:(1)在AutoCAD 打开一个新图形(2)选菜单“工具(T)”|“宏(A)”|“Visual Basic编辑器(B)”(3)在当前工程中添加一个标准模块选菜单“插入(I)”|“模块(M)”后,系统会将代码窗口切换出来。(4)添加一个通用子过程选菜单“插入(I)”|“过程(P).”后,弹出添加过程的对话框。如图1-11所示。 图1-11“添加过程”的对话框当键入名称“acad_firstVBA”并单击“确定”后,回到VBA IDE。在程序代码栏出现的Public Sub acad_firstVBA( )和End Sub语句间输入程序代码。若省略添加“模块(M)”这一步,而在VBA IDE窗口的“视图”菜单中选择“代码窗口”项后,直接选菜单“插入”|“过程(P).“,也可取得同样效果。结果如图1-12中所示。图1-12第一个编程示例的VBA IDE(添加过程)当点击下拉菜单或工具栏上的运行钮时,运行结果也如图1-10所示。第2章 Visual Basic程序设计基础 第2章Visual Basic程序设计基础本章简略介绍Visual Basic 6.0程序设计的基本概念和编程基础。2.1设计VB的第一个应用程序2.1.1创建VB应用程序引例使用Visual Basic进行Windows程序设计的精髓是“可视化”和“事件驱动”。本引例通过生成一个简易加法计算器,引出上述两个特征。1 创建应用程序的窗体当进入VB集成开发环境时,会出现一个默认的名叫“Form1”的窗体,该窗体就是创建应用程序的第一个用户界面。可用鼠标单击“工具箱”中的控件,将其拖到窗体需要的位置上。窗体和控件的属性由“属性”窗口中列出,在设计阶段,可采取修改其属性值的方式确定之。对于本例,在窗体Form1上至少应创建以下控件:(1)两个命令按钮(Command1和Command2),分别确定其Caption属性为“加法运算”和“结束”。(2)两个文本框(TextBox1和TextBox2),供输入被加数和加数。(3)一个标签(Label3),输出(显示)计算结果。VB6.0集成开发环境及本例所创建的窗体如图2-1所示。图2-1 VB6.0集成开发环境及创建的窗体2编写事件过程的代码双击窗体或窗体上的控件(或单击“工程资源管理器”窗口上的“查看代码”按钮)进入代码编辑窗口。如图2-2所示,在代码编辑窗口内看到的字符就是相应事件驱动过程的程序代码。当开始运行该程序,即可看到用户界面。首先在文本框输入相应数值,然后单击加法运算按钮,执行事件过程后得出运算结果。若结束按钮,程序结束。图2-2 VB6.0集成开发环境及代码编辑窗口本例窗体模块以文件名为”Ljfq.frm”存盘和工程文件以文件名为”VB引例1-加法器.vbp”存盘。显示出的文件名如图2-1和图2-2 中所示。实例:若要开发出一个能进行加减乘除的简易计算器,可按下列步骤进行: (1)创建应用程序的窗体窗体的用户界面如图2-3所示。图2-3简易计算器的用户界面及运行结果其中:文本框Text1,Text2输入数据;组合框Combo1改换运算符:标签Label1,Label3显示“=”号及“计算结果”;命令按钮Command1,Command2,Command3运行运算、清零和结束。(2)编写事件过程代码Private Sub Command1_Click( )If Combo1.Text = + ThenLabel3.Caption = Val(Text1.Text) + Val(Text2.Text)ElseIf Combo1.Text = - ThenLabel3.Caption = Val(Text1.Text) - Val(Text2.Text)ElseIf Combo1.Text = ThenLabel3.Caption = Val(Text1.Text) * Val(Text2.Text)ElseIf Combo1.Text = ThenIf Val(Text2.Text) = 0 ThenMsgBox 不能被零除!, 0, 计算器Label3.Caption = : Text2.Text = ElseLabel3.Caption = Val(Text1.Text) / Val(Text2.Text)End IfEnd IfEnd SubPrivate Sub Command2_Click( )Text1.Text = : Text2.Text = : Label3.Caption = End SubPrivate Sub Command3_Click( )Unload MeEndEnd Sub简易计算器应用程序的运行结果也如图2-3所示。本例的窗体模块可按文件名“Fjsq.frm”存盘;工程文件可按“Pjsq.vbp”存盘。2.1.2 对象1对象和类对象是对现实中对象的模型化,是代码和数据的组合。最常用的对象可以说是窗体和控件。所有控件都必须添加在窗体上。类是创建对象的样板,而对象只是类的一个实例。在集成开发环境工具箱中的每一个控件都是一个类。2 对象的属性对象的属性用数据表示,表示对象的状态。格式:对象名.属性=新值设置属性:设计时由属性窗口确定,常用于属性的初设置。运行时赋值,常用于修改属性。3 对象的方法对象的方法表示对象的行为,由类似内部函数的特殊程序实现(包括过程和函数)。格式:对象名.方法 2.1.3事件和事件过程事件就是能被对象所识别的动作,相同的事件发生在不同的对象上所得到的反应是不一样的,这是因为“事件过程”不同。将对象对事件的反应称作“事件过程”。1事件过程的语法:Sub 对象名_事件()处理事件的代码End Sub2事件驱动的程序与面向过程的DOS程序不同点:(1)只有事件发生时,程序才进行。(2)在程序中流动的不是数据,而是事件。(3)事件决定了对象之间联系的手段。在VB程序设计中,基本的设计机制就是改变对象的属性、使用对象的方法和为对象编写事件过程。需要特别指出的是,用户不必为所有的事件都编写事件过程,只有当用户要以某种特定的方式响应某个事件时,才需要编写针对这个事件的事件过程。3一个典型的事件序列:(1)启动应用程序,装载并显示窗体(产生Form_Load和Form_Show事件)。(2)窗体或窗体上的控件接收事件。事件可由用户引发(例如鼠标或键盘操作),可由系统引发(例如定时器事件),也可由代码间接引发(例如装载其它窗体时产生的Load事件)。(3)如果在相应的事件过程中存在代码,就执行代码。(4)应用程序等待下一次事件。为了加深理解事件过程,先运行一个不添加任何控件和不编写任何代码的示例。当点击工具栏的运行钮时,虽然未看到什么变化,但已执行了一次默认的Load事件操作。事件代码为:Sub Form_Load( )End Sub本事件过程的实质是将窗体装入内存。若想看的清楚些,可将上述Load事件过程改为:Sub Form_Load( )Form1.Caption=“事件过程示例!”End Sub当看到运行结果,就可说明发生了Load事件。它不但将窗体装入内存,而且还对窗体的Caption属性赋予了新值。2.2 编写VB的程序代码2.2.1程序书写规则1注释用“”开头。2 断行用“ _”(空格接一个下划线)。例如:strTemp=“床前明月光,” & _“疑是地上霜,” 3 将多行语句写在同一行上VB通常是一行一句,若要写多句,可用“:”分隔开。4 使用不同进制的数字默认为10进制,若用16进制,要加“&H”。2.2.2变量和赋值语句1 变量命名规则字母开头不能加“”或空格及嵌入“!、#、$、%、&”;不能和关键词同,如:If、Loop、Abs等。2 声明一个变量声明一个变量要使用Dim语句,一般的格式为:Dim 变量名As类型(1)模块级变量每个窗体都有一个相关的包含代码的窗体模块,其文件扩展名为.FRM。每个窗体模块都包含事件过程,即代码部分。如果同一个窗体的所有过程希望分享同一个变量,就应把它声明为模块级变量。其方法是在窗体模块的声明段中定义,除使用Dim关键字外,还可使用Public和Private。当使用“Public”时,使该变量在整个应用程序中有效;当使用“Private”时,该变量只在本窗体模块中有效。(2)静态变量在过程中声明的变量称为局部变量,这种变量只能在过程执行过程中有效,在其它过程无效。在过程执行结束后,变量的值不能被保留下来。如果希望在离开该过程之后,还能保持过程中局部变量的值,就要用关键字Static声明为静态变量。3 变量的作用范围表2-1表明了变量作用范围的三个层次及其声明方式。表2-1变量的作用范围和声明方式作用范围 局部变量 模块级变量 公用变量 声明方式 Dim,Static Dim,Private Public 变量的声明位置 过程之中 模块的声明段中 模块的声明段中 能否被本模块中其它过程访问 能否被其它模块访问 4 变量的数据类型(1) 用于保存数字的几种数字类型Integer(整型)、Long(长整型)、Single(单精度浮点型)、Double(双精度浮点型)、Currency(货币型)和Byte(字节型)(2) 逻辑判断的Boolean类型True(真)或False(假)(3) 字符串String类型(4) 日期Date类型(5) 保存对象引用的Object类型(6) 万能的Variant(变体)类型当没有显式指定变量类型时(省略 “As类型”),VB默认这个变量的类型为Variant类型。Variant是一种特殊的数据类型,除了定长的String数据及用户定义类型外,可以包含任何类型的数据。另外,Variant类型的变量还可以包含Empty、Error及Null等特殊值。5 显式和隐式声明VB允许不先声明变量。但为了避免写错变量名引起的麻烦,可采取“强制显式声明变量”的方法。其方法是在窗体模块、标准模块或类模块的声明段中加入一条语句:Option Explicit在添加Option Explicit 语句后,VB将自动检查程序中是否有未定义的变量。只要遇到一个未经明确声明的变量,就发出错误警告。用户只要在“工具”菜单中选取“选项”命令,然后单击“选项”对话框中的“编辑器”选项卡,再选中“要求变量声明” 选项,这样VB就会在任何新模块中自动插入Option Explicit语句。注意,此项操作不能在已经建立起来的模块中自动插入“Option Explicit”,这种情况下只能用手工键入该语句。6. 赋值语句使用赋值语句可以在程序中改变对象的属性和变量的值。语法: 对象属性或变量=表达式该语句的含义就是将等式右边的表达式的值赋给等式左边的变量或对象属性。例: Form1.Width=400temp= Form1.Widthtemp=temp+30Form1.Caption=”设计齿轮”上述四句都是赋值语句。2.2.3常数VB有许多内部常数,也可以建立自定义常数。语法:PublicPrivate Const常数名As 类型=表达式参数:1)“常数名”有效的符号名(其规则与建立变量名的规则同)2)“表达式”由数值常数或字符串函数以及运算符组成,但“表达式”中不能使用函数调用3)Const可以表示数量、字符串或时间/日期。例:Const conPi=3.1415926Const conBirthday =#6/22/2005#说明:1) 等号“=”右边的表达式常常是数字或字符串,但也可以是其结果为数字或字符串的表达式,甚至可用先前定义过的常数定义新常数。例:Const conPi2= conPi*22) 一行中可放置多个常数声明,用逗号分隔即可。3)和变量声明一样,Const语句也有作用范围。若要创建在整个应用程序中有效的常数,应在标准模块的声明段中用“Public Const” 声明。4)在窗体模块或类模块中不能声明Public常数。2.2.4运算1算术运算 、*、MOD2比较运算 、3连接运算 &用于字符串连接。若皆为字符串,则按字符串连接;若其中一个为数字,则按相加操作。4逻辑运算5运算的优先顺序从优先级高到优先级低依次为:算术运算 逻辑运算 Not-(取负) And* 、 / Or XorMod Eqv+、 - Imp&注:字符串连接符“&”不是算术运算符,但就其优先顺序而言,它在所有算术运算符之后,在所有比较运算符之前。2.2.5流程控制语句1条件判定(1)IfThen结构型式1:If 条件Then语句(适用于只选择执行一条语句时)型式2:If 条件Then语句系列End If(2)ifThenElse结构语法: if 条件1 Then语句系列1Else if条件2 Then语句系列2 Else语句系列n End If(3)Select Case结构语法 Select Case測試条件Case表达式1语句系列1Case表达式2语句系列2Case Else语句系列nEnd Select2. 循环控制(1)ForNext结构当知道循环次数时,最好用ForNext循环。语法:For计数器=初值To终止值 Stop增量语句序列Next 计数器注:多用于数组或对象集合,它对数组或对象集合中的每一个元素重复一组语句,而不是重复语句一定的次数。如果事先不知道一个集合或数组有多少元素,For EachNext循环非常有用。语法:For Each 元素 In 数组语句序列Next 元素还需注意以下两点:1) 对于数组而言,循环中用的“元素”变量必须是Variant类型的变量;2) For EachNext循环不能与自定义类型的数组一起使用。(2)DoLoop结构当不知道循环次数时,最好用DoLoop 循环。该结构有四种形式,但每种形式都会计算数值条件以决定是否继续循环。循环条件必须是一个数值或其值为True(非零)或False(零)的表达式。形式1:Do While 循环条件语句序列Loop执行这个Do循环时首先测试循环条件,如果循环条件为False或零,则跳过后面的循环语句序列。如果循环条件为True或非零,则进入循环体执行语句,执行语句后退回到Do While语句再测试循环条件。形式2:Do 语句序列Loop While 循环条件该形式保证循环中的语句至少执行一次。形式3: Do Until 循环条件语句序列Loop该形式的语句循环零次或多次。形式4: Do 语句序列Loop Until 循环条件该形式的语句至少循环一次。注:后两种形式需要循环条件为False或零时才执行循环。(3) 从循环中退出形式1:For 计数器=初值To 终止值 Stop增量语句序列Exit For语句序列Next 计数器形式2:Do While Until循环条件语句序列Exit Do语句序列Loop2.2.6数组1 声明固定大小的数组声明固定大小的数组有三种方法:(1) 建立公用数组,在模块的声明段用Public语句声明数组。(2) 建立模块级数组,在模块的声明段用Private语句声明数组。(3) 建立局部数组,在过程中用Dim语句声明数组。语法 DimPrivatePublic数组名(下界To上界)As数据类型VB默认下界为0, 数组的上界必须大于或等于下界。例:Dim Counters (1 to 14) as Integer 14个元素的局部数组Dim Sums(20) As Double 21个元素的局部数组2 声明多维数组语法: DimPrivatePublic数组名(下界to上界,下界to上界,) As 数据类型例: Dim ThreeD(3,1 to 10,1to 15) 声明的三维数组,大小为41015。若不写“下界to”,数组的下界就是0 (缺省值为0)。例:下面三个例句等效。Dim A(8,3)Dim A(0 to 8,0 to 3)Dim A(8, 0 to 3)3. 声明动态数组要使用动态数组,需要经过两个步骤:(1) 声明动态数组在模块的声明段或在过程中,用Public、Private、Static、Dim语句声明数组,给数组赋予一个空维数表,如:Dim DynArray( )(2) 用ReDim语句分配实际的元素个数该语句的目的是重新定义数组。如:ReDim DynArray(x+1) 假设x是整型变量注意:ReDim语句只能出现在过程中,ReDim语句是一个可执行语句,应用程序运行时执行一个操作。2.2.7使用过程和函数使用过程编程有两大好处:(1) 过程可使程序划分成离散的逻辑单元,便于调试。(2) 一个程序中的过程,往往不必修改或稍作改动,便可移植到另一程序中。可使用下面两种过程:(1) Sub过程又称为子过程,该种过程不返回值。(2) Function过程又称为函数,该种过程可以返回值。在VB中,为了与事件过程相区分,将自定义的Sub子过程称为通用过程。通用过程必须由应用程序调用才能运行;而事件过程除响应用户引发的事件外(或由系统引发),总是处于空闲状态,应用程序无法直接调用。1 定义和调用通用过程定义通用过程语法:PrivatePublicStatic Sub 过程名 (参数列表)语句序列End Sub按默认规定,模块中的子过程都为Public(公用的),这意味着应用程序可随处调用它们。过程的“参数列表”类似于变量声明,其语法结构为:ByVal 参数名称 As 数据类型在应用程序中调用Sub过程有两种型式,如下例:(1) Call BeepSound(5)(2) BeepSound 5注:当使用Call 时,参数必须在括号内;若省略Call 关键字,则必须省略参数两边的括号。2 定义和调用函数VB包含了许多内部的函数,如Abs、Cos、Sqr等。还可用Function语句编写自己的函数过程。语法:PrivatePublicStatic Function函数名 (参数列表) As 数据类型语句序列End Fuction与子过程不同,Function过程可返回一个值到调用的过程。Sub过程与Function过程有三大区别:(1) 调用方法不同。一般地说,在赋值语句右边的表达式中包含函数过程名和参数,这就调用了函数。(2) 函数过程中的数据类型,决定了返回值的数据类型(如果没有As子句,默认的数据类型为Variant)。(3) 给函数名自身赋一个值,就可返回这个值。Function过程返回一个值时,该值可成为表达式的一部分。调用Function过程与调用任何内部函数的方法是一样的,即在表达式中填写它的名字和参数列表。还可像调用Sub过程那样调用函数,但VB将放弃返回值。2.3 集成开发环境及工程的管理2.3.1 集成开发环境VB 6.0的集成开发环境如图2-1和图2-2所示,其组成元素为:(1)菜单条(2)工具栏(3)工具箱(4)代码编辑器窗口应用程序的每个窗体或代码模块都有一个单独的代码编辑器窗口。(5)窗体编辑器作为自定义窗口,它用来设计应用程序的界面。应用程序中的每一个窗体都有自己的窗体编辑器窗口。若要精确设置窗体的大小,可以在窗体属性窗口中设置窗体对象的Width和Height属性的值。这两个属性的单位是“缇”。“缇”是一种与屏幕分辨率无关的计量单位。1440缇=1英寸(567缇=1厘米)。(6)工程资源管理器窗口列出当前工程中的窗体和模块。(7) 属性窗口由“对象列表框”“排序选项卡”和“属性列表”三部分组成,列出对选定窗体控件的属性设定值。(8)窗体布局窗口2.3.2工程的管理1 工程文件工程文件就是与该工程有关的全部文件和对象的清单。这些文件和对象也可供其它工程共享。一个工程包括:(1)跟踪所有部件的工程文件(.vbp)。(2)窗体模块文件(.frm)是大多数VB应用程序的基础。窗体模块可以包含事件过程、通用过程以及变量、常数、类型和外部过程的窗体级声明。(3)窗体的二进制数据文件(.frx)它含有窗体上控件的属性数据。对含有二进制属性(例如图片)的任何.frx文件都是自动产生的(不可编辑的)。(4)类模块的文件(.cls)类模块用来创建对象,这些对象可被应用程序内的过程调用。类模块与窗体模块类似,只是没有用户界面。该文件是可选项。(5)标准模块的文件(.bas)存放的是那些与特定的窗体或控件无关的代码。该文件是可选项。(6)一个或多个包含ActiveX控件的文件(.ocx)该文件是可选项。(7)单个资源文件(.res)该文件是可选项。2 创建新工程可有三个操作途径:(1)选择菜单“文件”|“建新工程”,然后从“建新工程”对话框中选“标准EXE”选项,单击“确定”按钮。(2)单击“标准”工具栏的建新工程(左起第一个)按钮。(3)单击“标准”工具栏的左起第一个按钮右侧的下拉按钮,再选“标准EXE”选项。注:可使用“建新工程”对话框中的“VB应用程序向导”来创建一个应用程序。3 保存和打开工程文件选择菜单“文件”|“保存工程”或单击工具栏中的保存工程按钮,可以保存当前工程。集成开发环境会自动保存当前工程中的所有文件。如果是第一次保存工程,或选择“工程另存为”命令,集成环境会提示用户输入一个文件名,并且提示用户保存所有修改过的窗体或模块。要打开一个已有的工程,可选择菜单“文件”|“打开工程” 或单击工具栏中的打开工程按钮。在打开一个工程之前,集成开发环境会关闭当前工程,并提示保存所有变动。4 启动窗体在默认情况下,应用程序的第一个窗体为启动窗体。应用程序开始运行时,此窗体就会显示出来。如果想显示另外的窗体,就必须改变启动窗体的设置。设置启动窗体步骤:(1)从菜单“工程”中选取“工程属性.”命令。(2)在显示的工程属性对话框中选取“通用”选项卡。(3)选取要做为新启动窗体的窗体,如选取“Form1”。(4)单击“确定”按钮。以上操作如图2-4所示。图2-4工程属性对话框若由于某种原因系统自动弹出上述对话框时,也要求操作者确认“启动对象”列表框中的窗体名。运行正常后注意要重新存盘。5 从工程中删除文件和添加文件当从工程中删除文件时,应先在“工程资源管理器”中选取某窗体或其它模块,再单击菜单“工程”中点击“删除(文件名)“选项。当向工程中添加文件时,应单击菜单“工程”中相应要添加的选项,再依照“添加文件”对话框的提示操作即可。6生成可执行文件从菜单“文件”中选取“生成(工程名).exe”项,出现“生成工程”对话框,在填入工程文件名。当有必要时输入“选项(O)”中的信息,最后单击“生成工程”对话框的“确定”按钮就可生成该可执行文件。注:使用Shell函数运行可执行文件Shell函数语法: Shell文件名, 窗口样式例: Private Sub Command1_ClickShell“e:应用程序Lchi-1.exe”,vbNormalFocusEnd Sub2.4 设计应用程序的界面2.4.1设计窗体窗体有自身的属性、方法和事件。设计窗体的第一步是设置它的属性。在窗体的设计模式状态,是设计其“属性”窗口中的值;而在运行模式状态,要由代码来实现。窗体的属性很多,下面仅列出常用的属性并简述其用途和用法:(1)BorderStyle:控制窗体如何调整大小。例如,若将窗体设置为不可调整大小,要将其设为1。(2)Caption:确定窗体标题栏中显示的文本。(3)Height 和Width:确定窗体初始的大小。(4)Left 和Top:根据屏幕的左上角确定窗体的位置。(5)MaxButton 和MinButton:确定窗体是否能最大化或最小化。(6)Moveable:指定对象是否可移动。(7)Name:设置窗体的名称。在工程中添加窗体时,窗体的默认名称为Form1、Form2、.(8)WindowState:设定窗体在启动时为最大化、最小化或正常大小。(9)Icon:设置窗体最小化时显示的图标。2.4.2 在窗体上添加控件基本的控件可分为内部控件、ActiveX控件及可插入的对象三类。1工具箱中常用的基本控件(1)命令按钮(CommandButton)(2)标签(Label)(3)文本框(TextBox)(4)复选框(CheckBox)和单选框(OptionButton)(5)列表框(ListBox)和组合框(ComboBox)(6)分组框(Frame)(7)图片框(PictureBox)(8)图象(Image)2使用ActiveX控件ActiveX控件是VB工具箱的扩充部分。加入ActiveX控件的方法: 选择“工程”菜单的“部件”命令(或在工具箱中单击鼠标右键)出现“部件”对话框,选定所需控件名称左边的复选框,然后点击“确定”即可。若要将其它ActiveX控件加入“部件”对话框,可以单击“部件”对话框中的“浏览”按钮,找到扩展名为.ocx的文件。3 直接使用控件名来引用属性所有控件都有一个默认的属性,这是控件最重要也是最常用的属性,称这个属性为控件的值。最常用控件和控件的值如表2-2所示。表2-2 常用控件及其默认的属性控件 默认的属性(控件的值) CheckBox Value ComboBox Text Label Caption ListBox Text TextBox Text 当控件的属性为控件的值时,就不必在代码中指定其属性名。例:由于TextBox控件的默认属性为“Text”,则以下两句等效。txtPoem=“问君能有几多愁
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 商业管理 > 营销创新


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!