Visual Basic 6.0 简明教程 庞一鸣 1999年 第52期 01版 #1 一、Visual Basic 6.0 概况 Visual Basic 6.0简称VB6,是Visual Studio 6.0开发产品系列中的一员,该产品系列的成员有VC6、VFoxpro6、VinterDev、VJ++6等,基本上涵盖了Windows软件开发的方方面面。其中VB更是其中用户喜爱的开发工具,它既是一种编程语言,同时也是一个强大的集成开发环境。作为语言,它的语法简单、容易入门,作为开发环境,功能强大,操作便捷、自然;其面向对象的开发模型和思路能够充分解放程序员的想象力。 在VB5的基础上,Visual Basic 6.0又增加(增强)了许多特性,如:函数可以返回数组、本地代码编译(运行速度更快)、ActiveX编程;编写DHTML应用程序、服务器端的IIS程序;升级了ComCtl32.ocx 和 ComCt232.ocx等通用控件;集成的和MS-SQL连接和调试的能力;…… 相对于VB5,VB6增加(增强)了很多向导,例如:制作应用程序安装向导、数据对象向导、数据窗体向导、外接程序设计器、类生成器实用程序等等。充分利用这些特性,会让你得心应手,事半功倍。 本文旨在让没有接触过VB的朋友能快速入门、以最新版本VB6帮助他们在尽可能短的时间内学会使用VB编程;同时让已经入门的朋友能在新版本中得到进一步提高。 #1 二、Visual Basic 6.0 IDE(集成开发环境) VB6的开发环境和VB5基本类似。程序一运行,就进入IDE环境。我们经常要与IDE打交道,无论是设计窗体、控件、还是编写代码、调试程序,都要通过它来达到。请一定要熟练的掌握IDE的操作要领。 下面对VB6的IDE界面给予简单的介绍,具体的操作请您自行反复尝试、练习,而这也是熟悉VB,掌握VB的不二法门。 (1)[新建工程]: 在[文件]主菜单下的命令,用于建立一个新的VB工程。在工具条的最右端也有相应的按钮。 (2)[生成工程...] : 根据工程的名称不同,本菜单栏将出现相应的提示,本功能用于编译工程,并且可以由用户指定编译选项,如编译成P代码还是本地代码,是否优化代码等。 (3)[视图] : 在各视图间切换,如工程视图、属性窗、监视窗、工具箱、工具栏等。 (4)[工程] : 菜单会根据工程类型的不同而有不同的变化。其作用主要是对工程添加各种类型的组件,如窗体、模块之类。 (5)[格式]:用于对窗体上的控件进行对齐、改变大小、锁定控件位置等操作。在美化屏幕布局时很有用处。 (6)[调试]:用于调试程序时,可以增加断点、单步执行等。 (7)[运行]:就不用说了。 (8)[设置]:在[工具]下拉式菜单下的设置功能,用于定制您的IDE环境,比如字体、是否允许即时语法检查、是否对齐网格等,请仔细研究它。 另外,VB6提供了很多向导,它们极大的提高了效率,请在使用中仔细体会。 #1 三、Visual Basic 6.0中的关键概念 #1 1.工程(Project)的概念和作用 在开发应用程序时,要使用工程来管理构成应用程序的所有不同的文件。一个工程包括:跟踪所有部件的工程文件 (.vbp)、窗体文件、窗体上控件的属性数据、类模块文件、标准模块文件、ActiveX 控件文件等等 。 工程文件就是与该工程有关的全部文件和对象的清单,也是所设置的环境选项方面的信息。每次保存工程时,这些信息都要被更新。所有这些文件和对象也可供其它工程共享。 当完成工程的全部文件之后,即可将此工程编译成可执行文件 (.exe):从“文件”菜单,选取“制作 project.exe”命令即可。 #1 2.窗体(Form)的概念和作用 窗体是用户与计算机交流的最主要界面,界面上可以包含多种控件,用以实现用户的操作构想以及向用户返回操作结果。 #1 3.控件(Control)的概念和作用 控件一般出现在窗体上,用于接受用户的输入(如 Text控件)或者向用户显示某一项信息。由于窗体上可以出现多个控件,所以程序员通过组合各种类型和数量的控件来完整的展现一个和现实世界相关的对象,比如:在一个窗体上显示一张销售订单的各项信息。 VB的强大就体现在支持大量的控件,目前大量的第三方控件,从数据库支持、图形处理、到I/O接口处理、加密解密处理等几乎无所不包。 通常,VB程序员通过精心的选择控件,或者采用VB6的新特性:设计控件,并将其在窗体上合适的布局,来表达自己的审美趣味和界面设计的能力。界面设计是影响用户对软件评价的主要方面,也是一个软件能否成功的重要因素。 #1 4.对象(Object) 、属性(Property)、事件(Event) “对象”直观的理解就是,每件事物都是一个对象,大到银河系、楼房、显示器、小到一粒微不足道的尘埃。在VB世界里,窗体、控件、磁盘、乃至程序本身都是对象。 对象是分层次的,正如现实世界一样,大的对象由小的对象组成,如:窗体对象由文本控件、标签控件、Picture控件等组成。 对象通过属性来描述和区分,比如:窗体对象有高度、宽度、名称等属性,由于不同的窗体的属性不同,所以可以区分他们。程序可以读取或设置属性的值,来考察或操纵对象。如:可以将窗体对象的宽度属性增加以扩大窗体在屏幕上的可视宽度。 为了让程序能够跟踪对象的变化,当对象接受到外界输入或其本身需要做出某种动作时,通过“事件”来通知应用程序。比如:当光标在窗体上移动时,窗体产生 Mouse_Move 事件来反映这种输入。而程序可以根据需要捕获这个事件,从而做出相应的反映,比如,程序可以在光标移动事件发生时,更改某个 Label 控件上显示的光标坐标。 对象的属性或事件可用VB代码来引用。引用语法是“对象名+小数点+属性”或者“对象名+小数点+事件”。例如,引用窗体 frmMain 的 Caption 属性的语法为:“frmMain.Caption”。 #1 5.变量的概念和作用 变量是用来存储数据的所在处;它们有名字和数据类型。变量的数据类型决定了如何将代表这些值的位存储到计算机的内存中。在声明变量时也可指定它的数据类型。所有变量都具有数据类型,以决定能够存储哪种数据。 根据缺省规定,如果在声明中没有说明数据类型,则令变量的数据类型为 Variant。Variant 数据类型很象一条变色龙— 它可在不同场合代表不同数据类型。当指定变量为 Variant 变量时,不必在数据类型之间进行转换,Visual Basic 会自动完成各种必要的转换。 但是,如果知道变量确实总是存储特定类型的数据,并且还声明了这种特定类型的变量,则 Visual Basic 会以更高的效率处理这个数据。例如,存储人名的变量最好表示成 String数据类型,因为名字总是由字符组成。 #1 6.Visual Basic6中的其它概念或术语 关键字:VB中使用的单词或短语,不允许程序员用作变量、函数或过程等的名字,例如:Address Of、Dir、Len、Select 等等; 模块:模块有三种:窗体模块、标准模块、类模块; VB中的概念和术语很多,请读者在实践中多读书、多思考,慢慢熟悉、积累。 #1 四、Visual Basic语言 #1 1.数据类型 VB支持的数据类型很多,有:数值类型(Integer、Double、Single等)、字符类型(String)、日期类型(Date)、Byte、Variant等。 #1 2.运算符 VB支持的运算符有加(+)减(-)乘(*)除(/),逻辑比较运算符大于(>)、小于(<)、等于(=)以及它们的组合等等。 #1 3.变量的定义及其作用域 使用 Dim 语句定义变量,根据该语句所处的位置,变量有不同的作用域:全局的或局部的。其格式为: Dim <变量名称> As <变量类型> 使用 Public 来替代 Dim 语句可以使得变量全局可见,而使用 Private 定义变量则使得变量仅被当前的函数或过程看见。 如果需要让变量在整个程序的生命周期中生存,可以在声明变量时加上 Static 关键字来达到这个目的。 #1 4.Visual Basic的语句 (1)赋值语句: 格式:变量 = <值> 或者 <表达式> (2)调用语句: 函数调用: 变量 = 函数名(参数表) 过程调用:过程名 参数表 或者 Call 过程名(参数表) (3)分支语句: If 条件为真 Then 语句块1#Else 否则执行 语句块2 End If (4)分支选择 Select: Select Case 值或表达式 Case 值1 语句块1 Case 值2 语句块2 . . . Case Else 语句块3 End Select (5)循环语句 Do While Do While 条件 . . . Exit Do ' 跳出循环 . . . Loop ' 继续下一轮循环 (6)Goto 语句 (7)Visual Basic常用的函数有: ①数值类:Sin()、Cos()、Sqrt()、Exp()、Fv()、Syd()等; ②日期类:有Now()、DateSerial()、DateAdd()、DatePart()、Day()、Year()、Month()、Time()、TimeValue、WeekDay()等; ③字符串类:有Len()、Left()、Right()、Mid()、以及新函数LenB()、LeftB()、RightB()、MidB()、和 StrConv()、CStr()、InStr()、Lcase()、Ucase()等; ④其它常用函数:常用的函数有 Abs()、Dir()、CurDir()、DoEvents、Format()、MsgBox()、InputBox()、Now()、VarType()等。 #1 5.Visual Basic 6.0对象命名规范 对VB中的变量、函数、过程、控件、窗体进行规范的、有意义的命名,可以减少很多编程时的混乱。微软公司有推荐的命名准则,希望广大VB程序员以此为参照,不要让默认的对象名称如Form1、Text1、RichEdit1等干巴巴的名字出现在程序里。 变量或过程名的主体应该使用大小写混合形式,并且应该足够长以描述它的作用。而且,函数名应该以一个动词起首,如 InitNameArray 或 CloseDialog。对于频繁使用的或长的项,推荐使用标准缩略语以使名称的长度合理化。当使用缩略语时,要确保它们在整个应用程序中的一致性。在一个工程中,如果一会儿使用 Cnt, 一会儿使用 Count,将导致不必要的混淆。 首先请给予对象一个有描述性的名字,比如不要让一个输入姓名的Text控件名称为 Text1,而是命名为 txtName;一个口令输入框为 txtPassWord等等。 根据对象的数据类型,应该为对象名称加上一个表示其数据类型的前缀。 具体应用时可参照下表进行,它们也是微软推荐使用的命名规范: 数据类型 前缀 例子 Boolean bln blnFound Byte byt bytRasterData String Str StrUserName Current Cur CurOrderNum 为了标识出对象的作用域,可以给变量加上一个范围前缀。比如,全局变量加“g”、模块级变量加“m”、本地过程级什么也不加等。例如:“gstrUserName”表示全局级的字符型的变量,其主体名为“UserName”,我们基本上可以知道这个变量的绝大部分内涵。 #1 五、编程概要 随着您逐步了解,大概迫不及待的想一试身手。好,现在就让我们真刀实枪的进入VB6 IDE,开始编程的第一步吧。 #1 1.工程建立 当您打开VB6时,就可以选取待创建工程的类型了,一般选取“标准EXE”类型(^520106a^1)。 #1 2.建立窗体和控件 你可以按添加窗体快捷按钮添加窗体。当窗体出现在屏幕上后,别忘记在“属性窗口”中给它起一个比较合适的名字,比如“frmMain”。随后您就可以在窗体上创建左面工具箱中的控件的新实例了。创建的方法有两种,一种是双击工具箱中的控件,则相应的控件实例自动出现在窗体的中间位置,也可以按下工具箱中的控件图标,然后在窗体中用鼠标圈一个矩形,这个矩形就代表控件实例所占据的控件。当控件建立完毕,请仔细布局。 窗体的常用属性一般有: (1)Caption:窗口的标题; (2)Name:窗体的名字,您应给它一个有意义的名字; (3)Visible:设置窗体是否可见,取值有 True 和 False 两种; (4)Enabled:是否接受用户的输入; (5)BorderStyle:边框的风格,有无边框、可变边框、固定单线边框、工具条式边框等多种风格; (6)Height、Width、Top、Left:高度、宽度、左、右边界位置属性,用于表示或设置窗体的高度和宽度以及在屏幕上的位置; (7)BackColor:用于定义窗体的颜色; (8)Picture:用于设置一个图片文件作为窗体的背景; (9)Moveable:是否允许窗体移动; (10)MinButton、MaxButton:控制最小化、最大化按钮。 (11)MousePointer、MouseIcon:用于设置当光标进入本窗体时显示的系统库存图像(MousePointer)、或者自定义图像(MouseIcon); (12)Font:设置显示在窗体上的(默认)字体; 所创建的窗体上可以创建各种各样的控件。在工具箱中提供了系统常用控件。常用控件有: Label控件:静态文本控件; TextBox:文本输入控件; Frame:框架控件,是一个控件的容器,可在其上放置控件; CommandButton:命令按钮; CheckBox:检查框,有选中、未选中二个状态; OptionButton: 选项按钮,有选中、未选中、灰色等; ComboBox:下拉式列表框; ListBox:列表框; HscrollBar:水平滚动条; VscrollBar:垂直滚动条; Timer:时钟控件; DriverListBox:驱动器列表框。可显示机器上所有驱动器; DirListBox:目录清单列表框。列出定制驱动器上所有目录; FileListBox:文件清单列表框。列出制定目录下的所有文件; Sharp:图形控件,可以显示矩形、线等图形; Line:同Sharp类似,仅可以显示线; Image:显示图像的控件; PictureBox:显示图像的控件,若仅仅显示,使用Image控件; Data:数据源控件; OLE:用于插入OLE对象的控件; 为了添加其它控件,请选择 [工程]/[部件] 菜单项来添加其它控件到工具箱中。 将上述控件插入窗体的方法是:先在工具箱中(左键)单击相应控件图标,随后在窗体上目标位置附近单击左键,所选中的控件就出现在窗体上。 用鼠标按住控件不放并拖动,可以将控件移动到其它合适的位置,也可以移动鼠标光标到控件边界,当光标改变为双向箭头时,按下鼠标左键并拖动,可以改变控键的大小。 为了改变控件的属性,可以单击目标控件一下,属性窗口中将出现其属性清单。选中相应的属性值输入框,就可以输入新值或者可以通过下拉式列表选择其它属性值。 为了给某个窗体或控件编写事件代码,需要用鼠标双击窗体空白区或控件区,VB IDE将给出事件代码编写窗口。 事件的响应代码是一个函数,其命名规则是“对象名+下划线+事件名”。编写代码的方法见下一小节。 常见的事件有: Click:光标/鼠标单击事件; DblClick:鼠标双击; MouseMove:光标移动; GotFocus:得到输入焦点; LostFocus:失去输入焦点; KeyPress:击键。 #1 3.编写代码 VB “代码编辑器” 是一个窗口,大多数代码都在此窗口上编写,它象一个高度专门化的字处理软件,有许多便于编写 Visual Basic 代码的功能。因为要操作模块中的 Visual Basic 代码,所以要为每一个从“工程资源管理器”中选择的模块打开一个独立的“代码编辑器”窗口。在每个模块中,对于模块中所包含的每个对象,将模块中的代码再细分出与对象对应的独立部分。用“对象列表框”实现各部分间的切换。 在窗体模块中,该列表包含一个通用段,一个属于窗体自身的段以及窗体所包含的每一控件的段。对于类模块,列表包括一个通用段和一个类段;对于标准模块,只有一个通用段被显示。 每一段代码都可包含几个用“过程列表框”访问的不同过程。对窗体或控件的每一个事件过程,窗体模块的过程列表都包含一个独立的段。例如,Label 控件的过程列表就包含 Change 事件段、Click 事件段和 DblClick 事件段等等。类模块只列举类本身的事件过程——初始化和终止。标准模块不列举任何事件过程,因为标准模块不支持事件。模块通用段的过程列表只包含唯一段——声明段,其中放置模块级的变量、常数和 DLL 声明。当在模块中添加子过程或函数过程时,那些过程被添加到声明段下方的“过程列表框”中。 代码的两种不同视图都可用于“代码编辑器”窗口。可以一次只查看一个过程,也可以查看模块中的所有过程,这些过程彼此之间用线隔开。为了在两个视图之间进行切换,利用编辑器窗口左下角的“查看选择”按钮。 VB提供了自动完成编码的功能:VB 能自动填充语句、属性和参数,这些性能使编写代码更加方便。在输入代码时,编辑器列举适当的选择、语句或函数原型或值。通过“工具”菜单上的“选项”命令访问“选项”对话框,在“选项”对话框的“编辑器”选项卡上可用这样的选项,由它们决定是允许还是禁止各代码的设置值。 在代码中输入一控件名时,“自动列出成员特性”会亮出这个控件的下拉式属性表。键入属性名的前几个字母,就会从表中选中该名字,按 Tab 键将完成这次输入。当不能确认给定的控件有什么样的属性时,这个选项是非常有帮助的。即使选择了禁止“自动列出成员特性”,仍可使用 Ctrl + J 组合键得到这种性能。 “自动快速信息”功能显示语句和函数的语法。当输入合法的 Visual Basic 语句或函数名之后,语法立即显示在当前行的下面,并用黑体字显示它的第一个参数。在输入第一个参数值之后,第二个参数又出现了,同样也是黑体字。“自动快速信息”也可以用 Ctrl+I 组合键得到。 #1 4.标准模块 用于存储一些全局性的函数或过程,以及一些全局常量、变量的声明等。比如程序中需要的一些计算方法,将其独立到模块中就比较容易维护。在工程资源管理器中右击鼠标,选择快捷菜单的[添加]/[添加模块]即可添加一个新的模块。 #1 5.类模块 VB有限度的支持了类。不象SmallTalk、C++、Java等真正的面向对象语言,VB对继承、多态的支持采用了一种变通的方式,即采用接口和界面等类似于COM模型的方式。其实,之所以这么做,就是为了让VB支持COM模型。 所谓类,就是对一系列相同对象的抽象描述。有点类似于数据类型,可以对类进行实例化,也就是说明一个类对象。每个类必须存放在一个类模块里。类可以拥有属性、方法、事件等,如同控件一样。 通过创建类模块并赋以属性和方法,就定义了类,接着就可以由该类创建任意数量的对象。对象模型给出了基于对象程序的结构。通过定义程序中对象之间的关系,对象模型能够以一种使编程变得更容易的方式来组织对象。一般来说,对象模型表达了这样一个事实:即某些对象是“更大的”,或者说比其它对象更重要一些——可以认为这些对象是包含其它对象的对象,或者是由其它对象所组成的对象。例如,在编程时,可能创建一个 SmallBusiness 对象来作为程序的核心。可能想让这个 SmallBusiness 对象包含与其关联的其它类型的对象,比如 Employee 对象和 Customer 对象。可能同时也希望它包含一个 Product 对象。这样就和现实世界相一致起来。对象模型给出了基于对象程序的结构。通过定义程序中所使用的对象之间的关系,对象模型能够以一种使编程变得更容易的方式来组织对象。 一般来说,对象模型表达了这样一个事实:即某些对象是“更大的”,或者说比其它对象更重要一些——可以认为这些对象是包含其它对象的对象,或者是由其它对象所组成的对象。例如,在编程时,可能创建一个 SmallBusiness 对象来作为程序的核心。可能想让这个 SmallBusiness 对象包含与其关联的其它类型的对象,比如 Employee 对象和 Customer 对象。可能同时也希望它包含一个 Product 对象。理解类的含义是以后进一步了解和实现ActiveX、COM等的基础,只有您清楚的理解了类,接下来就会事半功倍。 #1 六、应用程序的调试、编译和发布 除非一个什么也不做的程序,一般都会出现这样那样的错误。有简单的打字错误,也可能拚错了某个关键字、甚至可能是编程的逻辑出现了偏差,导致程序的结果无法理解,这时就需要调试了。VB6提供了集成的调试器,可以设置断点、监视表达式等方式。 VB6采用了即时编译技术,就是在你编写代码的同时检查代码的语法,如果有错误后,就会及时提醒修改。所以一般情况下不会出现语法错误。 当修改了程序的所有错误后,就可以将其编译为EXE形式的可执行程序。选择菜单[文件]/[生成工程]即会出现一个对话框。单击“选项”按钮可以设置几个工程的属性,比如版本号、产品名称、公司名称、是否编译为本地代码等。所设置的属性将被存入EXE可执行文件。为了发布您的程序,请在系统菜单条中选取 “Package&Deployment向导”项,进入向导后,根据画面提示逐步操作即可(^520106b^2)。 #1 七、用VB6进行数据库编程 在VB6中,微软建议数据库编程采用基于OLE DB的ADO模型,ADO模型是一个简单、一致的应用程序编程接口 (API),使应用程序能够访问和修改众多类型的数据源。OLE DB 为任何数据源提供了高性能的访问,这些数据源包括关系和非关系数据库、电子邮件和文件系统、文本和图形、自定义业务对象等等。ADO 在关键的 Internet 方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供经济、高性能的接口。当然,根据用途,仍然有使用DAO、RDO的时候,例如:如果采用Access 97作为桌面数据库,完全可以使用 DAO 模型。不过,还是让我们紧跟潮流、学习ADO吧。 #1 1.与数据库相关的术语、对象 (1)ADO (ActiveX 数据对象) 这项新的数据访问技术的特性包括:更简单的对象模型;与其它 Microsoft 和非 Microsoft 的技术更好的集成;为本地和远程数据提供的通用接口;可远程访问的和断开的记录集;用户可访问的数据绑定接口;以及层次结构的记录集。 (2)数据环境 是一个创建 ADO 对象的交互式的设计环境。可作为数据源供窗体或报表上的数据识别对象使用,或者在程序中作为显露在数据环境对象之外的方法和属性进行访问。数据环境设计器支持 UserConnection,以及拖放、层次结构、分组以及合计等。 (3)ADO Data 控件 这是一种新的、OLE DB 识别的数据源控件,其功能与内部的 Data 控件和 Remote Data 控件十分相似,通过这种方式允许您用最少的代码来创建数据库应用程序。 (4)OLE DB 支持 OLE DB 是一组 COM 接口,它为应用程序访问保存在不同信息源中的数据提供了统一的访问方法,这些信息源可以是关系型的,也可以是非关系型的。这些接口支持大量可应用于数据源的 DBMS 功能,使数据源能够共享其数据。ADO 是编程人员访问 OLE DB 的方法。所有新的数据绑定控件、数据环境、和数据报表设计器都是 OLE DB 识别的。 (5)可视化数据库工具集成(查询设计器和数据库设计器) 可视地创建和修改数据库结构和查询:创建SQL Server 和 Oracle 数据库表,利用拖放来创建视图、自动更改列的数据类型。 (6)数据报表 允许您利用拖放技术来快速地从任何记录集(包括层次结构的记录集)创建报表。 (7)数据源 创建用作数据源、以便绑定其它控件的用户控件和类。 (8)SQL 编辑器 允许您向现有的 SQL Server 和 Oracle 数据库添加新的存储过程。也可以使用此编辑器来编写触发器。 (9)DataGrid 控件 一个 DBGrid 的 OLE DB 识别版本,该控件可以快速生成一个应用程序来查看和编辑记录集。也支持新的 ADO Data 控件。 (10)DataList 控件、DataCombo 控件 这些控件是 DBList 和 DBCombo 控件的 OLE DB 版本。它们还支持新的 ADO Data 控件。 #1 2.ADO对象层次 理解了上述概念和对象,再让我们来看一看ADO的对象层次 (^520106c^3)。组成这个层次的各个对象被广泛的应用在 IIS/ASP 应用方面。当我们需要对程序进行精雕细刻时,就必然需要“程序化”的控制它们——也就是要编写代码,记住了解对象层次以及每个对象的属性、方法是非常必要的。下面是ADO编程模型中重要对象的简单介绍: (1)命令(Command) 通过已建立的连接发出的“命令”可以某种方式来操作数据源。一般情况下,命令可以在数据源中添加、删除或更新数据,或者在表中以行的格式检索数据。 (2)参数(Parameter) 通常,命令需要的变量部分即“参数”可以在命令发布之前进行更改。例如,可重复发出相同的数据检索命令,但每一次均可更改指定的检索信息。 (3)记录集(Recordset) 如果命令是在表中按信息行返回数据的查询(行返回查询),则这些行将会存储在本地。对象模型将该存储体现为 Recordset 对象。但不存在仅代表单独一个 Recordset 行的对象。 (4)对象模型以 Field 对象体现字段 (5)错误(Error) 错误随时可在应用程序中发生,通常是由于无法建立连接、执行命令或对某些状态(例如,试图使用没有初始化的记录集)的对象进行操作。 (6)集合 ADO 提供“集合”,这是一种可方便地包含其他特殊类型对象的对象类型。使用集合方法可按名称(文本字符串)或序号(整型数)对集合中的对象进行检索。 (7)事件 ADO 将“事件”的概念引入编程模型。事件是对将要发生或已经发生的某些操作的通知。一般情况下,可用事件高效地编写包含几个异步任务的应用程序。 #1 3.ADO应用举例 为了在程序中能够使用ADO对象,请选中菜单 [工程]/[部件],随后勾选相应的部件即可,如 ADO Data Control;如果想在代码中操纵ADO对象,请选择菜单 [工程]/[应用],然后选中相应的项目即可,如“Microsoft ActiveX Data Objects 2.0 Library”。 利用VB6自带的Nwind.mdb 数据库,下面简单介绍如何建立一个用于输入雇员信息的窗体: 首先为工具箱添加控件 ADO Data Control(ADODC)、ADO DataGrid(DataGird),然后创建一个新窗体,建立一个 ADODC 的新实例到窗体的上方,设置其关键属性如下: Name=“adodc1” ConnectString=“Provider=Microsoft.Jet.OLEDB.4.0;DataSource=Nwind.mdb” RecordSource=“Employees” 接下来创建一个DataGrid控件的实例,设置其属性为: DataSource=“adodc1” 随后将光标移动到 DataGrid 的上方,右击鼠标,选择“检索字段”快捷菜单。此时您敲 F5 试试看,程序已经工作了! 如何设计一个打印员工清单的报表呢?不象VB5那样提供一个附带的第三方报表控件,VB6提供了集成的 DataReport,使用 DataReport 设计器设计报表非常方便。其步骤如下: (1)选择菜单“工程/添加ActiveX设计器/数据环境”, 屏幕上将出现一个设计器窗口。右击Connection1 项,更改其属性,令其采用“Microsoft OLE DB Access Provider”及Nwind.mdb 数据库,然后增加一个新命令“Command”,令其连接值为 Connection1,数据对象的类型为表,而值为“Employees”表。 (2)选择工程菜单,建立一个DataReport,设置其属性(^520106d^4)。 (3)然后在设计画面上右击鼠标,检索字段,接下来根据需要和美观重新排列各字段的位置和大小、字体。 (4)引用报表。为了在运行时打印报表,可以在窗体上添加一个按钮,在其 Click 事件里用代码来控制报表的打印。例如: Private Sub btnPrint_Click() DataReport1.PrintReport End Sub 当然,上述关于数据库的介绍才刚刚接触了ADO的一点皮毛,如果想成为高手,还请多多练习。 #1 八、用Visual Basic 6.0进行多媒体编程 用VB6可以进行多媒体编程吗?当然可以。VB的运行效率虽然低于VC、Delphi,但是用于多媒体编程仍然是胜任的,尤其VB从5.0开始提供了本地代码编译器,其运行效率已经突飞猛进,今非昔比。 其实所谓多媒体,其“多”不过是声音、图像、触摸屏等等技术的有机组合而已。以下简单讲解如何显示图像、播放AVI视频动画等的方法: #1 1.显示图像 您看到了VB6工具箱上的 PictureBox 和 Image 控件图标了吗?它们都可以用于显示图像,包括JPEG、BMP、GIF、WMF等多种流行的图像文件格式。 请建立一个窗体,建立一个 PictureBox 控件,将其 Picture 属性设置为预显示的文件的全称路径名。图像就显示出来了。 为了控制其在运行时刻的变化,一般可以采用如下办法: (1)改变其 Left、Top 值来移动其位置,达到动画的效果; (2)通过创建两个 PictureBox 控件,一个可见,一个不可见,并调用其PaintPicture 方法来将不可见控件上的图像逐步复制到可见的控件上。采用这种方法可以做到图片的擦入擦出、百叶窗式的画面切换等效果; (3)通过对PictureBox 的 DC 值操纵,可以动画调色板,达到淡入淡出的效果。现在的程序一般不再如此处理,而是将 PictureBox 分割成很小的块块,然后随机将其擦除或显现来达到淡入淡出的效果; 在实践中,大家一定会发现实现各种漂亮效果的方法。请到时一定要给我来信啦(BlueSkit@990.net)。 #1 2.播放AVI视频 播放AVI视频可以采用Windows 9x提供的MCI 控件。媒体控制接口 (MCI) 可以用于播放或录制音频、视频、波形文件等多种媒体信息。从概念上说,这种控件就是一组按钮,它被用来向诸如声卡、MIDI 序列发生器、CD-ROM 驱动器、视频 CD 播放器和视频磁带记录器及播放器等设备发出 MCI 命令。 使用 MCI 控件记录音频信号之前,应打开一个新的文件。这样就可以保证记录声音的数据文件格式与系统记录格式完全兼容。在关闭 MCI 设备之前,还应该发出 MCI Save 命令,把记录的数据保存到文件中去。MCI 控件允许通过多种方法编程: 在运行时,控件是否可见;可以增加或完全重新定义控件中按钮的功能等;也可通过MCI的方法或属性来控制媒体的播放。 下面的代码演示了播放一个AVI文件的过程。将这些代码放到 Form_Load 过程,应用程序就可以使用 MCI 控件来对文件 Test.AVI 进行播放。在试运行这个示例之前,首先应创建一个包含 MCI 控件的窗体。 Private Sub Form_Load () Set properties needed by MCI to open. MMControl1.Notify = FALSE MMControl1.Wait = TRUE MMControl1.Shareable = FALSE MMControl1.DeviceType = “ MMMovie” MMControl1.FileName = “ C:\Test.AVI” '打开 MCI MMMovie 设备。 MMControl1.Command = “Open” End Sub 为了正确管理多媒体资源,在退出应用程序之前,必须关闭已经打开的 MCI 设备。将下面的语句放到 Form_Unload 过程: Private Sub Form_Unload (Cancel As Integer) MMControl1.Command = “Close” End Sub 通过MCI还可以完成很多很多事情,只要有相应的VCD/DVD驱动程序,您甚至可以在自己的程序里播放VCD/DVD。 #1 3.字符动画 WinAmp 的版权画面是不是很“眩”?用VB实现非常简单。 首先建立一个窗体,在此窗体上建立一个 Frame 容器控件,根据需要,在此控件上建立若干个 TextBox或 Label或 Image 控件,输入您的版权信息或其它想表现的文字、图案。然后再建立一个 Timer 控件,将Interval 设置为 10,然后在其 Timer 事件中操纵 Frame 的位置就可以有动画效果了: Private Sub Timer1_Timer() Frame1.Top = Frame1.Top - 20 DoEvents End Sub 不过,你应该加入适当的判断和错误处理语句以免程序表现出火。 #1 九、用Visual Basic 6.0设计ActiveX/ActiveX Doc 基于部件的开发是目前最流行的方法论。 程序员可以把经过测试的标准部件装配成应用程序,所以应用部件开发方法可以缩短编程时间,并开发出更强有力的产品。转向部件软件已成为软件工业中最引人注目的一大趋势。在Windows 平台上的部件编程,主要是微软公司致力的部件对象模型 (COM),包括 Automation 和 ActiveX 规范,使用户所创建的软件部件可以与购买的软件部件一起顺利运行。 VB6使得实现ActiveX 部件的创建更加容易。Visual Basic 为快速创建、调试和部署软件部件提供了 ActiveX 控件、ActiveX 文档、代码部件以及提供对象的应用程序等向导或工具。 确定部件的类型可以这样考虑:如果需要提供服务的部件是不可视的,就要建立一个代码部件,或者是ActiveX EXE或者是ActiveX DLL。 如果所需要建立的部件能够与您的应用程序运行在同一个进程中,则应该建立一个ActiveX DLL。例如,能够执行复杂计算的部件就属于这种情况。 如果您需要的是一个可视的部件,并且在设计时能够被拖放到一个应用程序中,那么应该建立的是ActiveX控件。例如,一个能够正确格式化并验证电话号码的“电话号码”控件,就属于这种情况;这样的控件无疑在许多应用程序中都是有用的。 以下仅以VB6本身带的例子(建立一个ActiveX DLL,向外提供一个将字符串顺序颠倒的函数)为例,作一简单讲解: (1)首先新建工程,类型为“ActiveX DLL工程”。 (2)VB 将自动为该工程自动添加一个类模块 Class1。 (3)按 F4 键打开“属性”窗口。双击“名称”属性并把它改成 Thing。以后在通过类创建对象时需要使用这个名称。 (4)Instancing 属性的缺省值是 MultiUse,不必改变。 (5)在“工程”菜单中,单击“Project1 属性”打开“工程属性”对话框。选择“通用”选项卡,填写以下信息,然后单击“确定”。 工程名:ThingDemo ,同时用作部件的类型库的名称,如果两个部件各自提供了一个 Thing 类,那么需要对类名进行完全的限定,以区分到底要使用哪一个部件的 Thing 类,例如 ThingDemo.Thing。 启动对象:Sub Main()。 工程描述:描述出工程的功能或作用等 (6)添加一个模块,并在模块中键入以下代码: Public gdatServerStarted As Date Sub Main() '部件开始时要执行的代码, '对第一个对象的请求作出反应。 gdatServerStarted = Now Debug.Print “E xecuting Sub Main” End Sub'为对象提供唯一标识符的函数。 Public Function GetDebugID() As Long Static lngDebugID As Long lngDebugID = lngDebugID + 1 GetDebugID = lngDebugID End Function (7)保存工程。工程名为 ThingDemo。 (8)接下来,要为类创建属性,这需要在类模块中添加公共变量和属性过程。要为类创建方法,需要在类模块中添加 Public Sub 和 Public Function。下面的步骤为 Thing 类创建了两个属性和一个方法: Name 属性是可以由客户应用程序检索并设置的字符串。 DebugID (只读)属性返回一个顺序号,表示 Thing 对象创建的次序。 ReverseName 方法颠倒 Name 属性中字母的顺序。 (9)在类模块中声明 Public Name As String (10)在 Thing 类模块中创建一个只读的属性DebugID,请加入以下代码: Private mlngDebugID As Long ' 加到声明部分 Public Property Get DebugID() As Long DebugID = mlngDebugID End Property 由于 DebugID 是只读的属性,因此客户程序仅能读取而不能修改它。引用的方法是 对象名.属性,例如: Private Sub Command1_Click() Dim t As ThingDemo.Thing Set t = New ThingDemo.Thing MsgBox t.DebugID End Sub (11)创建 ReverseName 方法: 在“工具”菜单中,单击“添加过程”打开“添加过程”对话框。在“名称”框中,输入 ReverseName。单击“子程序”和“公共的”,然后单击“确定”。 在 Thing 类模块的新的 Sub 过程中输入下列代码: Public Sub ReverseName() Dim intCt As Integer Dim strNew As String For intCt = 1 To Len(Name) strNew = Mid$(Name, intCt, 1) & strNew Next Name = strNew End Sub (12)类模块有两个内置的事件:Initialize 和 Terminate。Initialize 事件过程中的代码在创建对象时首先执行,领先于其它任何设置属性或执行方法的动作。 在对象的所有引用都被释放以后要执行 Terminate 事件中的代码,然后对象就被破坏。在VB的例子中,加入了一些代码来观察对象被创建和销毁的状态提示代码,在此忽略。 (13)至此,整个工程建立完毕,就可以测试乃至编译了。 (14)测试的方法很简单,再“添加”一个测试工程,然后将测试工程和上述的工程组成一个“工程组”。然后在“工程”菜单中,单击“引用”打开“引用”对话框。选择“ThingDemo”,然后单击“确定”。这样测试工程就可以使用 ThingDemo 了,包括属性、方法、事件等。 ActiveX EXE 的设计方法和ActiveX DLL一样,只不过DLL运行在调用者进程,而EXE拥有自己的进程,甚至可以被部署在网络中的任意一台机器上,只要他们支持 DCOM 即可。ActiveX 控件与ActiveX DLL 有所不同,控件一般都是可视的,而DLL都是不可视的,可以接受用户的输入和向外部显露某种信息。有了VB6,其设计方法却并不复杂,读者有了上述基础,再稍微阅读一下MSDN资料,就可以轻松设计自己的控件。 #1 十、用Visual Basic 6.0设计DHTML/ASP 利用VB的Internet 编程特性,程序员可以制作运行在客户端或服务器端的应用程序,在基于窗体的应用程序内部显示 HTML 页面,或者可以在 Web 上使用 ActiveX 组件。 如果你是一个VB爱好者,并且最终用户总是使用IE浏览器,这时你就可以利用VB6提供的DHTML/IIS能力来设计您的B/S模式的应用。如果你的用户使用IE以外的浏览器,请不要使用ActiveX DOC/DHTML一类的技术。 DHTML 应用程序是一个 VB程序,它在一个交互的、基于浏览器的应用程序中使用一种动态HTML和已编译 Visual Basic 代码组合。一个 DHTML 应用程序驻留在浏览器所在的机器上,它在那里解释和响应浏览器中最终用户执行的操作。 一个DHTML 应用程序可以是一个单一的 HTML 页面,它可以完成很多工作,例如: ·从页面获取数据并使用这种方法查询一个数据库。 ·更新页面的外观和行为。 ·在响应用户请求时创建 HTML 元素并插入到一个页面。 动态 HTML 是对 HTML 的扩充,可不依赖于脚本或服务器端的处理,就能够动态地更新它们的内容以及与用户进行交互。当创建一个 DHTML 应用程序时,产生的页面使用在 Internet Explorer 4.X中的动态 HTML 技术。动态 HTML 对象模型允许以一种新的方法与 HTML 页面进行交互—例如,操纵它们的属性、方法和事件,以及对页面的布局进行精细的控制。^520106e^5显示了动态HTML对象模型中的主要对象。 使用DTML对象模型,可以访问和操作应用程序HTML页面中的任何东西。一个页面中的HTML元素可以作为单独的对象使用,这意味着可以通过读取和设置属性以及调用方法来检查和修改元素和它们的属性。元素中的文本可以通过元素的属性和方法得到。在以前,您必须使用 Java脚本/VB脚本等技术手段,并且控制起来比较麻烦,现在随着DHTML的流行,你可以更加实时、容易的控制HTML页面的显示以及与用户的交互了。而VB6提供了这么好的工具,你自然要学习它提高设计能力啦! 如同 Java脚本所“见”的对象层次,在VB6中的层次大同小异,如果你有Java脚本或VB脚本的编程经验,应该对这些概念非常熟悉。 对于VB的目标,对象模型中的两个主要对象是BaseWindow对象和Document对象。 BaseWindow对象表示浏览器的一个实例,它被用来显示Document对象,其实就是您打开的某个真正的窗口。Document对象表示在浏览器中查看的HTML页面,使用Document对象的事件访问动态HTML对象模型并且在浏览器中处理用户的操作。通过对这两个对象及其包含的子对象的操纵,就等于操纵了HTML的方方面面。 另外,动态HTML还支持很多事件,例如: ·onkeydown:当一个键被按下时激发。 ·onkeypress: 当用户的键盘输入被转换为一个字符时激发。 ·keyup: 键被释放。 ·onclick: 用户单击事件,或按ENTER也可激发这个事件。 ·doubleclick: 用户双击事件。 ·Visual Basic事件: DHTML相同的事件注释。 ·onfocus: 输入焦点进入控件时触发此事件。 ·onsubmit: 当用户在表格上选择“提交”按钮时激发。 为了克服Internet应用程序没有状态的问题,DHTML应用程序提供了一组函数来保存或恢复连接的状态,当然,状态信息被保存在 cookie 中。函数GetProperty和PutProperty分别保存和获取数据。只要最终用户的Web浏览器窗口是打开的,这些函数就保存着数据。 下面再谈谈IIS应用程序:IIS 应用程序是一个 VB 应用程序,它在一个动态的、基于浏览器的应用程序中使用 HTML和已编译VB代码的组合。IIS 应用程序驻留在一个 Web 服务器上,它接受来自浏览器的请求,运行与请求相关联的代码并返回响应到浏览器。通过 IIS 应用程序的这些应用,您可以根据用户在浏览器上进行的操作执行复杂的处理。IIS 应用程序可以使用 VB 代码来执行以前用脚本、CGI 处理和其他 Internet 应用程序开发方法完成的大多数相同的处理。 IIS 应用程序是根据微软IIS(Internet服务器)而命名的,而 IIS是Web 服务器,用于运行您的程序。IIS 应用程序可以在 Internet/Intranet 中的任何浏览器上运行,因此它很容易得到广泛的支持。 IIS 应用程序在表面上和 ASP 相似。但是,每一种都有自己独特的优点。ASP适合于对制作 Web 页面感兴趣的脚本开发者,它提供了将脚本和 HTML 混合起来的独特能力。IIS 应用程序适合于构造基于 Web 应用程序而不是 Web 页面的 Visual Basic 开发者。IIS 应用程序允许复杂的事务处理,并且几乎任何的浏览器或平台都可以很容易地访问它。 所谓的IIS 应用程序是以一个.asp (Active Server Pages)文件为宿主的,并且利用 ASP 对象模型中的几个对象。Webclass 使用这些对象来访问和操作来自一个 HTML 页面的信息。一个 Webclass 可以使用ASP的对象。 Webclass 是一个驻留在 Web 服务器上并响应浏览器输入的 Visual Basic 部件。当创建一个 IIS 应用程序时,您使用 IIS 应用程序设计器创建它的Webclass。Webclass 一般包含 Webitem和向客户交付这些 Webitem 的代码。 ASP对象则包括如: ·Request:从浏览器的最终用户接受请求。 ·Response:向浏览器发送信息以便向用户显示它。 ·Session:维护有关当前用户会话的信息并保存和获取状态信息。 ·Application:多个 Webclass 实例共享的管理状态。 ·Server:创建其他的对象并确定服务器特定的属性,这些属性可能影响 Webclass 的处理。 鉴于 DHTML/IIS应用程序的概念和实现无法在较短的篇幅内说清楚,因此仅仅对概念部分给予简要说明。 #1 十一、Visual Basic 6.0调用Win 32 API VB6的功能非常强大,但是仍然有一些未包含的功能,此时就需要直接调用动态链接库(DLL)中的过程了。通过 DLL,程序员可以访问构成 Microsoft Windows 操作系统主体的成千上万个过程,以及其它语言编写的各种例程。 DLL 是一种过程库,应用程序可以在运行时链接并使用它,这种链接不同于编译时的静态链接。这意味着DLL 库的更新可以独立地进行,而且许多个应用程序可以共享同一个 DLL。Windows 本身就是由若干个 DLL 组成的,其它应用程序可以调用这些库中的过程,完成窗口与图形的显示、内存管理或其他任务。这些过程有时被称为 Windows API(应用程序接口)。 为了调用DLL 过程,必须首先在模块中声明,例如声明 SetWindowTextA的格式为: Private Declare Function SetWindowText Lib “user32” _ Alias “SetWindowTextA” (ByVal hwnd As Long, _ ByVal lpString As String) As Long 过程、函数、常量的精确语法定义可以用 API Viewer 应用程序找到,在 Win32api.txt 文件中也可以找到它。如果将 Declare 放在 Form 或者 Class 模块内,那么必须在它的前面加上 Private 关键字。同一个 DLL 过程在一个工程中只需声明一次;然后可以任意调用。调用 DLL 过程如同调用VB本身提供的函数一样,在感觉上没有什么不同。例如调用上述函数的语法为: Private Sub Form_Load() SetWindowText Form1.hWnd, “Hello World” End Sub 在运行这段代码时,函数首先使用 hWnd 属性确定要修改标题栏的窗口(Form1.hWnd),然后将标题栏修改为“Hello World”。 #1 十二、Visual Basic 6.0的其它激动人心的特性或功能 #1 1.存储过程编辑器、可视化数据库工具集成 SQL 编辑器允许您从 VB开发环境内部创建和编辑用SQL Server 和 Oracle 编写的存储过程和触发器。大大方便了编写C/S模式或3层结构数据库的应用软件。查询设计器和数据库设计器允许您可视地创建并修改数据库结构描述和查询:创建 SQL Server 和 Oracle 数据库表、通过拖放来创建视图、以及自动更改列的数据类型。 VB6的这一新特性极大的提高了程序员的生产率。 #1 2.Coolbar 控件 有很多朋友想设计一个和Office97的工具条类似的东西,现在好了,不要使用第三方控件,就可以轻松达到这个目的。 #1 3.DataRepeater 控件 VB程序员再也用不着羡慕Delphi提供的类似功能了。 现在VB6提供了DataRepaeater控件,它与 Access 的连续窗体类似,将 UserControl 插入 DataRepeater 中就可以创建数据库的一个自定义视图。UserControl 可以包含 TextBox、CheckBox、DataGrid 或其他绑定到数据字段的控件。 #1 4.文件系统对象 一套经过优化的、遍历文件系统以及创建文本文件和目录的例程。 VB早已不仅仅是一种语言,经微软公司的多年演绎,它在编程、Office系列软件、Internet等很多领域施展身手,作为微软战略的重要组成,选择并使用VB是一种合乎潮流的选择。