2024年2月8日发(作者:)
经典文
第一章 Visual Basic介绍
第二章 用户界面设计
第三章 编程的基础(含变量,常量,条件语句,循环语句,自定义变量,自定义过程,对象和类等基础)
第四章 Windows 95的新控件Visual Basic的输入输出
第五章 Visual Basic的鼠标事件和绘图
第六章 Visual Basic的数据库、报表、预览、打印
第七章 从文件中存取资料
第八章 发行应用程序
第九章 使用Windows API和用Visual Basic建立自己的屏幕保护程序
第十章 创建ActiveX控件
第十一章 ActiveX文档
第十二章 用对象链接与嵌入(OLE)扩展Visual Basic
第十三章 使用资源文件
第十四章 用Visual Basic建立ActiveX DLL
第十五章 用Winsock控件进行Internet通信
第十六章 Web浏览控件
第一章 Visual Basic介绍
§2 窗体和命令钮介绍
一、窗体
窗体是Windows的基本组成部分,这也是为什么这个操作系统叫Windows的原因。它的主要属性除上面介绍的以外,还包括:
1,Appearance属性
这个属性用来决定控件是否采用三维效果。
2,BorderStyle属性
这个属性决定了窗体的边框形式,共有6种属性值。改变窗体的BordrStyle属性后,窗体在屏幕上没有变化,它只在运行时才变为你所要求的样子。
3,ControlBox属性
程序员用来决定采用不采用控制框的属性,仅在程序运行时才有效。
4,Font属性
程序员可以改变该窗体上显示信息的字体,它控制着直接在窗体上打印的文本显示。
5,Icon属性
这个属性是用户经常要使用的一种属性。当用户的应用程序在工具条上最小化或在Windows桌面上变为一个独立应用程序时,该属性决定将采用何种图标,窗体控制框里的图标也由它决定。为自己的窗体设置该属性时,要控制住自己挑三拣四的冲动。
6,Visible属性
该属性决定窗体是否可见。错误地改变其值是很危险的,窗体会从眼前消失,这种莫名其妙的事情会使用户惊惶失措,所以肩负重任的程序员一定要慎重哟!
7,WindowState属性
指定窗体在运行时的三种状态:正常、最小化、最大化。
文档下载后可复制编辑
经典文
二、窗体的主要事件
1,Load事件
这个事件发生在窗体被装入内存时,且发生在窗体出现在屏幕之前。窗体出现之前,Visual Basic会看一看Load事件里有没有代码,如果有,那么它先执行这些代码,再让窗体出现在屏幕上。
2,Click事件,Dblclick事件
这两个事件在单击或双击窗体时发生。不过你单击窗体里的控件时,窗体的Click事件并不会发生,Visual Basic会去看控件的Click事件里有没有代码。
3,Activate (活动事件)与Deactivate(非活动事件)
显示多个窗体时,可以从一个窗体切换到另一个窗体。每次激活一个窗体时,发生Activate 事件,而前一个窗体发生Deactivate事件。
三、窗体控制
1,装入或卸出窗体
要装入或卸出窗体,用Load 或Unload语句。Load语句的语法如下:
Load formName
而UnLoad语句的语法是:
UnLoad formName
FormName变量是要装入或卸出的窗体名。 Load语句只是把窗体装入内存,并不显示出 来,要显示窗体可以使用窗体的Show方法。
2,显示或隐藏窗体
要显示窗体,用Show方法。若尚未装入内存则先装入再显示。它的语法如下:
mode
FormName变量是窗体名,可选变元mode为0(缺省值)时窗体为非模态,为1时窗体为模态。模态窗体完全占有应用程序控制权,不允许切换到别的应用程序,除非关闭!而非模态窗体则反之。
同理,隐藏窗体用。
四、命令钮
命令钮有两类:一类是简单的命令钮,一类是图形钮。图形钮常常成组地出现在屏幕的顶端,成为一些程序炫耀自己贴近用户的标志。图形钮充分利用了图形用户界面的特征,而且比命令钮小,但它的缺点是用户必须知道图形钮是什么意思,而且没有鼠标的用户恐怕用不了图形钮。命令钮也有Appearance、Caption、Font、Left、Visible之类的属性。命令钮的最主要事件就是Click事件,它还有MouseDown和MouseUp等事件
§3 建立菜单
一般Windows的菜单条包含File,Edit,Window和Help菜单标题。其它的菜单,程序员应将它们插在Edit和Window菜单之间。在Visual Basic里,为了创建菜单,必须打开菜单编辑窗口。可以按下Ctrl+E键,也可以从Tools菜单中选择Menu Editor项,或者单击Visual
Basic主窗口的从左边数第六个图形钮。
一、给菜单命名
菜单标题和菜单命令也有Caption和Name属性,你设置了这两个属性就等于创建了菜单。于控件一样Caption是屏幕上可见的,而Name则是一个抽象名称。别忘了在Caption里加入 “&” 以帮助没有鼠标的用户。
文档下载后可复制编辑
经典文
二、增加和删除菜单
在Menu Editor中部有三个命令钮分别是Next,Insert,Delete。Insert可用来增加新的菜单。在这三个键下面的Caption列表框里选中菜单项(这时它的底色就变成深蓝色),单击Insert键,Visual Basic将上一个增亮菜单下推并增亮一空行,你就可以输入新菜单名和标题了。Delete键可用来删掉菜单。你选中要删掉的菜单,单击Delete键就可以删掉它了。
三、移动菜单标题
有四种情况,向上移动,向下移动,向左缩排,向右缩排,这就是Menu Editor中间上下左右箭头的功能。选中某一菜单标题,安上下箭头,则这个菜单将上下移动到你喜欢的位置上,这也决定了它在界面中的位置。如果你按左右箭头,情况则有所不同。由于菜单是分级的,所以,如果它没有缩排,则它是一个菜单标题;如果它缩排一次,那么它将变成一个菜单命令;如果缩排两次,那么它将成为一个子菜单命令。Visual Basic里你可以总共设计四层子菜单。
四、设置分离条
分离条是指在菜单中将命令分组的线。
奇怪的是,Visual Basic将分离条也看成一个菜单项,它也需要Caption和Name属性,而且它也有其它属性,分离条与菜单项的区别是分离条的Caption属性必须是连字号即减号。也就是,当你设置了一个Caption属性为 “-” 的菜单项时,实际上你就设置了一个分离条,分离条的名字可以是barFile1之类,以表明分离条的位置。
文档下载后可复制编辑
经典文
五、菜单的各种简单属性
在Menu Editor里有许多确认框和一些正文框及一个下拉式的列表框,这些东西决定了菜单的各种属性。
1,Checked属性
这个属性值设置为真,将在菜单命令左边产生一个打勾的确认标志,你可以看看File
Manager里的View菜单就可以了解什么是确认标志了。
2,Enabled属性
各种各样的用户会产生千奇百怪的操作,在许多Edit菜单里都会有不同形式的让菜单命令模糊的情况。Enabled属性就是用来做这件事的。Enabled属性为真,则菜单命令是清晰的,Enabled属性为假,则菜单命令是模糊的,这时用户就不能选中这个菜单项了。
3,Visible属性
用户看见一个模糊的菜单而不能选的时候,有时会非常生气。所以,如果用户看不见这个菜单命令时,他也就不会发无名之火了。如果把Visible属性设为假,则菜单根本不会出现在屏幕上。这样做比把Enabled属性设为假显得更加干脆!
4,Index属性
可以生成菜单命令数组,用索引号区分开。例如向File菜单中添加一系列最近打开的文件名。添加菜单可用Load方法。
以上属性可以在运行时设置,形成动态的菜单的情况。
例如:
d = False
e = False
你还可以改变Caption等属性。
n = “Redo”
在对窗体,命令钮和菜单有所了解后,工具箱里的其它控件就更加容易理解了。下面这些控件的熟练运用,将使你做出漂亮的界面。
六、生成弹出式菜单(或浮动菜单)
几乎每个Windows应用程序都提供弹出式菜单,用户可以右键单击窗体或控件取得这个菜单。弹出式菜单也属于普通菜单,只是不固定在窗体上,而是可以在任何地方显示。
文档下载后可复制编辑
经典文
弹出式菜单用PopupMenu方法调用。假设我们已经用Menu Editor生成了名为mnuedit的菜单,则可以在MouseUp事件加入如下代码:
If Button = 2 Then PopupMenu mnuedit
下面将用一个实例展示动态菜单和弹出式菜单。
左图表单显示了一个弹出式菜单,在表单的空白处右击鼠标就可得到。左图表单显示了一个动态菜单,单击Add runtime option钮一下就会使菜单Runtime Menu增加一项,而单击Remove runtime option钮一下就会使菜单Runtime Menu减少一项。其源代码如下:
Dim rtmenu
Private Sub cmdadd_Click()
rtmenu = rtmenu + 1
If rtmenu = 1 Then mnuoption(0).Caption = "Runtime Option"
Load mnuoption(rtmenu)
mnuoption(rtmenu).Caption = "option #" & rtmenu
End Sub
Private Sub cmdremove_Click()
If rtmenu = 0 Then
MsgBox "menu is empty"
Exit Sub
End If
Unload mnuoption(rtmenu)
rtmenu = rtmenu - 1
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then PopupMenu mnuedit
End Sub
§4 框架,确认框和选项钮
文档下载后可复制编辑
经典文
一、确认框和选项钮就好比多项选择和单项选择,在考试时选择题总比简答题要好做,因为你可以用瞎蒙的策略。用户界面设计的保持简单的原则使确认框和选项钮成为有用的框件。确认框和选项钮用于向程序输入信息。确认框选中时会在小方框里打一个钩,菜单设计窗口里就有这种确认框的例子。
选项钮选中时会在小圆圈里点一个点。它们的主要属性除了Name,Caption等,还有:
1,Value属性
决定它们是否被选中的属性。
2,Alignment属性
决定它们的对齐方式。
二、有两道选择题或更多时,我们就必须对它们进行分组。这种分组需要借助框架控件。分组的方法是:
1, 在工具箱里单击Frame控件;
2, 在窗体里拖曳鼠标画出框架;
3, 在工具箱里单击确认框或选项钮控件;
4, 在框架里画确认框或选项钮;
5, 把所需的确认框或选项钮都画好。
§5 正文框和标签
正文框通常用于向计算机输入信息,而标签通常用于输出信息。正文框是一个十分重要的控件,因为由确认框和选项钮向程序输入的信息毕竟只有少数的几条信息而已。标签和正文框的区别很小,标签可以看成是一个在运行时不能修改正文的正文框。因此标签主要用于输出信息。标签是生活中不可缺少的部分,比如教室里的“团结,勤奋,严谨,活泼”就是一个每天不得不面对的标签。
1,BorderStyle属性
决定了正文框和标签的边框形式。
文档下载后可复制编辑
经典文
2,正文框的Text属性和标签的Caption属性
这两个属性其实是一样的,它决定了用户在屏幕上看到的东西,只不过正文框的Text属性在运行时可以直接在正文框里修改。
3,Alignment属性
这个属性决定正文或标题的排列方式。
4,正文框的Multiline属性
如果正文框里的字太多了,超过了正文框的宽度,那么计算机就在某个我们不知道的地方显示这行字,所以我们要设置Multiline属性为True,这样正文框就有了字换行的能力。
5,正文框的PasswordChar属性
如果用户从事的是一种掌握大量金钱或机密的工作的话(此类用户肯花大钱来买关于计算机的东西),那么他就需要对自己的工作遮遮掩掩,在Visual Basic里你可以作一个口令正文框来实现这种遮掩。方法是:
(1)选中作为口令正文框的正文框。(它的周围出现八个小方块)
(2)按F4键打开属性窗口。
(3)设置Multiline属性为False。
(4)设置PasswordChar为用于掩盖的字符。(只能是一个字符,比如 * 号)
第三步使口令正文框只有一行,因为Multiline属性为True将使Password属性失效。Visual
Basic认为口令不必太长,因为太长的口令更加容易忘记。
6,正文框的Maxlength属性
为了防止一些古怪用户输入太多的废话,程序员有限制正文框正文长度的权力,这就是Maxlength属性。如果Maxlength属性设置为零,那么正文框就只受计算机内存的限制了。
7,Label的AutoSize属性和WordWrap属性
这两个属性在一起搭配使用总是让人混淆,以至于Visual Basic附带的示例程序里有一个程序里有这两个属性的例子,它的路径通常是c:。在Visual
Basic里运行这个例子,选择Options菜单的WordWrap and AutoSize。AutoSize属性使标签自动地扩大缩小以适应标签的Caption属性,但是它只会水平伸展。WordWrap属性使标签具有字换行处理的能力。
为了使标签具有垂直伸展和字换行处理,必须设置它的AutoSize属性和WordWrap属性同时为True。
AutoSize属性为False,WordWrap属性为False时,若标签不够高而Caption太长时,Caption将被切割掉。
AutoSize属性为False,WordWrap属性为True时,情况同上。
AutoSize属性为True,WordWrap属性为False时,表示可以水平伸展,但只显示一行信息。
Locked属性
程序员可以阻止用户改变文本框的内容,用户只可以看文本而不能改变它。这是Visual
Basic 4.0的新功能。
文档下载后可复制编辑
经典文
§6 图形框(Picture Box)和图象框(Image Box)
Picture Box和Image Box是用来把图形放入程序里的。Picture Box和Image Box可以显示几种不同格式的图形。Bitmap文件(.BMP或.DIB)、Icon文件(.ICO或.CUR)、Metafile图元文件(.WMF)、增强型图元文件(.EMF)、JEPG(.JPG)及GIF(.GIF)文件。在Visual Basic里Microsoft大概送给了我们几百个上述前三类文件,它们的路径通常是:c:vbbitmaps、c:vbicons、c:vbmetafile。它们的主要属性有:
1,设置Picture Box和Image Box的Picture属性
(1)单击Picture Box或Image Box。
(2)按F4键打开属性窗口。
(3)单击Picture属性。
(4)单击设置框右边的省略号,Visual Basic将显示Load Picture对话框。
(5)选择用户需要的文件,单击Ok键。
则Visual Basic将图形装入Picture Box或Image Box。如果想在程序运行期间装入或删除图形,就需要用程序代码来实现了。我们可以使用Load Picture函数。例:
装入图形
e = LoadPicture ( “c:” )
删除图形
e = LoadPicture ( “ ” )
2,Picture Box和Image Box的BorderStyle属性
如同正文框和标签一样,你可以设计Picture Box和Image Box的边框。
3,Stretch属性和AutoSize属性
Image Box只有Stretch属性,而Picture Box只有AutoSize属性。
AutoSize属性设为True,则Picture Box改变自己的大小来适应其中的图形。
Stretch属性设为True,则Image Box中的图形将改变自己的大小来适应外面的边框。
§7 Line和Shape控件
总有一些除了装饰作用没有别的功能的东西。如Line 和Shape控件。
1,Line和Shape的BorderColor属性
一般来说边界颜色是黑的,但你也可显示你喜爱的颜色。在属性窗口里单击BorderColor属性,再单击省略号,Visual Basic将显示一块调色板,在调色板里选择你喜爱的颜色。
2,Line和Shape的BorderWidth属性
这个属性决定线的粗细。
3,Line和Shape的BorderStyle属性
文档下载后可复制编辑
经典文
这个属性决定线的轮廓。
4,Shape的FillStyle属性
在形状中我们可能更加喜欢实心的样子,这也可以做到。
我们已经了解了窗体,菜单,及十种不同的控件,这正是Windows的基本元素,再加上它们的各种属性,就可以画出各式各样的用户界面了!
§6&§7总结:Image、Shape 和 Line 控件有时被称作轻量图形控件。它们需要较少的系统资源,因此比 PictureBox 控件显示得快并且包含 PictureBox 中可用的属性、方法和事件的子集。每一个控件都适用于一个特定的目的。
1、其它控件的容器: PictureBox 2、Printing 或 graphics 方法: PictureBox 3、显示图片 Image 或 PictureBox 4、控件显示简单图形元素:Shape 或 Line 控件
第三章 编程的基础
在我们设计完用户界面后,我们就将开始了编写指令代码的过程。这是一个相对枯燥但却是必须的过程。
§1 Visual Basic编程概述
一、事件驱动应用程序
简单地说就是当事件发生时程序才工作,否则程序将等待事件的发生。在事件驱动程序中,用户的操作或系统事件执行一个事件过程,这样,程序执行的顺序就由哪一个事件的发生决定,由用户的操作决定。就是用户管理,代码响应。
二、事件过程
用户界面对事件响应的三个部分是:
1,窗体
2,控件
3,菜单
编写程序代码的通常过程是:
1,确定哪一个对象(窗体,控件或菜单)做出反应——单击此对象选中它;
2,打开代码窗口——简单的方法是按False7键或者双击对象;
3,找到响应的事件;
代码窗口的Object列表框可以选择对象,旁边的Proc列表框可以选择对象的事件。如果事件已经有了代码的话,那么在Proc列表框里这个事件名用黑体显示。空的事件代码都由两行组成,如:
Private Sub Form_Load()
文档下载后可复制编辑
经典文
|
End Sub
4,编写程序代码。
三、变量
程序总是要做三件事:
1,得到数据;
2,处理数据;
3,输出数据。
在程序运行时,这些数据被储存在变量里,变量可理解为计算机内存条上的一个微观的东西。一旦关机,变量就消失了。变量在Visual Basic里有两种类型:
1,程序员建立的变量;
2,对象的属性往往也看成变量。
变量必须满足:
1,字母开头;
2,不超过40个字;
3,只包括字母,数字,下划线;
4,不是保留字。
创建变量的方法:
1,用Dim语句说明它;
2,可以省略声明语句而用变量声明字符生成确定类型的变量。在程序执行时若要生成变量并指定数据类型,可加入下表所示的变量声明字符后缀。
符号
$
%
&
!
#
数据类型
String
Integer
Long
Single
Double
举例
A$, message Text$
Counter%, var%
Population&,colorValue%
Distance!
ExactDistance#
3,把一个值赋给一个名称,Visual Basic就把这个名称看成变量。
Dim语句的语法是:
Dim VariableName As Type
例如: Dim MyName
As Type部分可以省略,它涉及到我们将要讲的关于数据类型的问题。Dim语句的作用是声明变量并分配存储空间。
赋值语句的语法是:VariableName = Value 或 VariableName1 = VariableName2
与数学中的等号意义不同,这里等号只表示把后者的值赋给前者,所以,A = A + 1在Visual Basic里是合法的。例如:n = “Exit” (这是一个改变对象属性的例子)
文档下载后可复制编辑
经典文
四、数据类型
变量可以存放数字或字符串等东西,但是MyName变量并不需要存放数字,所以你可以限制存放的数据类型。你可以规定MyName只能字符串。Visual Basic提供了七种数据类型:
1,整型(Integer)
2字节整数,标识符(同上面的变量声明字符)为百分号(%),范围从-32768到32767,运算很快。
2,长整型(Long)
4字节整数,标识符为&,范围从-2147483648到2147483647,运算很快。
3,单精度型(Single)
4字节浮点数,标识符为!,范围可达38位数字,前7位可靠,运算比整型和长整型慢。
4,双精度型(Double)
8字节浮点数,标识符为#,范围可达300多位,但是可靠的只有前16位数字。
5,字符串型(String)
标识符为$,在32位版本的Visual Basic 4.0中,字符串可容纳高达200兆字节的内容。
6,货币型(Currency)
8字节定点数,标识符为@,小数点右边4位,左边15位。
7,日期型(Date)
用于存放日期,范围从#January 1,100#到#December 31,9999#,日期的格式取决于系统的设定,赋值方法是:New = #January 1,2000# 。
8,字节型(Byte)
Visual Basic 4.0新增加的数据类型,用于存放0到255的整数。
9,布尔型(Boolean)
只有True或False两个值。
10,变体型(Variant)
如果你不告诉Visual Basic你的变量是什么类型,Visual Basic就自动把它看成变体型。变体型的意思就是它没有类型,或者是任何类型。如果声明了Variant变量而未赋值,则其值为Empty。
例如:Dim MyName As String
事实上,语句Dim MyName只是将MyName变量声明为变体类型罢了,因为变体类型是Visual Basic的缺省类型。但是,我们使用数据类型的原因是什么呢?
1,使用最小的数据类型可节省内存;
2,程序员可以容易地找出每一变量所存放的数据类型;
3,可以防止数据类型存放错误引起的错误。
例如:
Private Sub Form_Load()
Dim MyName As String
MyName = “DongShan”
End Sub
变换变量类型
有时需要将一种变量类型变成另一种变量类型,下表列出了进行变量类型转换的函数:
函数
Cbool
Cbyte
说明
将变元变成布尔值
将变元变成字节值
函数
CLng
CSng
说明
将变元变成长整型值
将变元变成单精度值
文档下载后可复制编辑
经典文
CCur CStr
将变元变成货币型值 将变元变成字符串值
CDate Cvar
将变元变成日期值 将变元变成变体值
CDbl CVErr
将变元变成双精度值 将变元变成错误值
CInt
将变元变成整型值
Val: 将变量转成数值型,从左至右转,直到遇到第一个非数字为止。
Str: 将变量转成字符型,会在最前保留一符号位,正号时前为空格。
Format: 将按格式返回字符。 StrConv: 转换字符编码
例如要将如下的初始化变量:
Dim A As Integer
变成双精度值,可用下列函数:
B=CDbl(A)
用户自定义的数据类型------记录
保存多个相同或不同类型数值的结构称为记录(record)。
在VISUAL BASIC 中定义记录,用Type语句,其语法如下:
Type varType
Variable1 As varType
Variable2 As varType
…
Variablen As varType
End Type
例如定义一个名为CheckRecord的记录:
Type CheckRecord
CheckNumber as Integer
CheckDate as Date
CheckAmount as Single
End Type
CheckRecord结构可以像普通变量类型一样使用。要定义这个类型的变量,使用如下语句:
Dim check1 As CheckRecord
要对结构的各个字段访问, 可使用如下语句:
check1. CheckNumber=123
check1. CheckDate=#08/14/1996#
check1. CheckAmount=240.00
强制的变量声明
Visual Basic并不要求变量声明,但对于编写大型应用程序时,变量声明的确很有好处。
因此Visual Basic提供强制声明的方法,只要在窗体或模块的声明部分加上一条语句:
Option Explicit
这个语句使编译器检查每个变量的声明,如果要用的变量没有声明,则发出一个错误消息!
文档下载后可复制编辑
经典文
数组
单个变量只能存放单个实体,而数组可以存放一组相关的数据。像变量一样,数组有名称,存放在数组中的数值通过一个索引来访问。
数组的定义必须用Dim语句声明,如下:
Dim Names(9) As String '也可以不指定数据类型
Names是保存了10个元素的数组,Names(0)是第一个元素,Names(9)是最后一个元素。数组元素的赋值如下:
Names(0)="John"
Names(1)="Tom"
…
Names(9)="Xionghui"
数组的第一个元素的索引可以不是0,可以在Dim语句中指定下限:
Dim Names(1 To 16)
Dim Names(5 To 16)
动态数组
有时可能不知道需要多大的数组,这时可以生成动态数组,其长度可以在运行程序时改变。定义动态数组,和平常一样用Dim语句(或Private和Public),但不要指定长度(或维数):
Dim DynArray()
后面等能确定维数的时候,再用ReDim语句重新确定实际长度(或维数):
ReDim DynArray(UserCount)
ReDim语句只能出现在过程之中,它是可执行语句。
但每次执行ReDim语句,数组中原先存放的所有当前值会消失。但有时可能想改变数组的长度,而不损失原有的数据,幸好Visual Basic提供了Preserve关键字,它就能作到!例如下面语句将数组加大一个元素而不改变原有数据:
ReDim Preserve DynArray(Ubound(DynArray)+1)
由于ubound()函数只能返回静态数组或已经重定义上限的数组上标,否则将出错。所以我们常使用:
Dim arr()
…
Redim arr(0)
Redim preserve arr(ubound(arr)+1)
这样ubound()取得的上标即数组成员数,实际上是将arr(0)闲置,将有效的数组数据写入arr(1)之后的成员中。
清除数组
Erase arraylist ‘参数为数组列表,格式为array1,array2…,该语句清空并释放数组,一般用于动态数组。
五、变量的使用范围
Visual Basic的变量有三种使用范围。
1,局部变量;
2,模块级变量,也可以叫做窗体级变量,因为窗体和模块是同级的;
文档下载后可复制编辑
经典文
3,全局变量。
局部变量只存在于说明它的过程里,为说明一个局部变量,应在一个事件过程中说明。
模块级变量可存在于这个窗体或模块中,可以被所有窗体内的事件过程所引用和改变,说明模块级变量的方法是:
1,按F7键打开代码窗口;
2,在Object列表框中选择(general);
3,在Proc列表框里选择(declarations);
4,用Dim语句说明。
全局变量从程序开始时存在至程序结束,不过全局变量的错误也许会导致致命的错误,你不得不读遍程序来寻找到底在说明地方改变了全局变量。创建全局变量的方法是:
1,从Insert菜单里选Module项,这个命令为一个BAS模块文件显示代码窗口;
2,在Object列表框中选择(general);
3,在Proc列表框中选择(declarations);
4,用Public语句说明全局变量。
六、算术,逻辑,比较运算符
1,算术运算
尽管一台上万元的计算机看来很高科技,但它在算术运算方面并不比一个几十元的计算器强多少。
运算符
+
-
*
/
运算
加(也是字符串拼接)
减(也是取负值)
乘
浮点数除
运算符
Mod
^
&
运算
整数除
取余数
乘方
字符串拼接
2,逻辑运算
逻辑运算是对True和False进行操作的运算。Visual Basic将True的值看成-1,将False的值看成0。
运算符
And
Or
Xor
Not
使用
变量1 And 变量2
变量1 Or 变量2
变量1 Xor 变量2
变量1 Not 变量2
意义
两个量均为True ,才返回True
只要有一个量为True ,返回值就为True
两个量一个为True,一个为False才返回True
简单地把True 变为False ,把False 变为True
3,比较运算
比较运算是比较两个数或字符串的大小。
运算符 意义 运算符 意义
< >=
小于 大于等于
<= =
小于等于 等于
> <>
大于 不等于
说明:变体型变量必须使用VarType(Var)判断其是否为空,如返回1则为空。
文档下载后可复制编辑
经典文
有时候,复杂的运算会把我们搞晕,良好的习惯是加括号。如:x = ( 5 * ( 8 + 9 ) ) ^ 2,则计算机先处理 ( 8 + 9 ) ,再处理 ( 5 * ( 8 + 9 ) ) ,最后才是乘方。再如:x = ( 5 * 6 ) / 2,这个括号加得似乎没什么意义,但它使我们清晰地知道是从哪儿开始运算的。
七、字符串操作
有时程序需要对字符串进行操作,比如从一个文件的完整路径名中找出文件的名称。下面介绍几个常用的函数。
1,Len函数
返回字符串的长度。如Length = Len(“string”),则Length = 6。
2,LCase函数,UCase函数
LCase函数把字符串变为小写字母。UCase函数把字符串变为大写字母。如:
x = LCase (“DONGSHAN”)
x = UCase (“visual Basic”)
3,Left函数,Right函数
语法是:
Left (VariableName , N)
Right (VariableName , N)
Left函数从字符串的左边提出N个字符。Right函数从字符串的右边提出N个字符。
4,Mid函数
语法是:
x=Mid (VariableName , n, m)
Mid函数从VariableName字符串的第n个字符开始取出m个字符。
5,Instr函数
语法是:
Instr (VariableName1 , VariableName2)
Instr函数从VariableName1里找出VariableName2的位置。如:x = Instr (“ABCD” , ”CD”),此时x = 3。如果计算机没找到要找的字符串,则这个函数返回0。
6,LTrim函数,RTrim函数,Trim函数
LTrim函数将去掉字符串前的空格。
RTrim函数将去掉字符串后的空格。
Trim函数将去掉字符串前后的空格。如:x = RTrim (“John “),此时x = “John”。
7,Val函数
语法是:
x = Val (VariableName )
这个函数将字符串里的数字字符串转化为数字。如:Y = Val (“123”),则 Y = 123。
当Visual Basic发现下一个字符不是数字时就停止继续转化。
8,Str函数
与Val函数相反,Str函数将数字转化为字符串。
语法是:
x = Str (VariableName )
八、常量及注释
1,使用常量
如果我们编一个程序从每笔收入中拿出40%用于饭卡的消耗,则在程序中我们会总是用到0.4这个数字。这时粮食涨价了,我们不得不把0.4全都改成0.5,这就显得非常麻烦。我文档下载后可复制编辑
经典文
们本可以定义并使用一个常量为0.4,在涨价时把它小小调整一下就可以了。常量命名的要求与变量一样。常量的使用范围也与变量一样,分为:局部常量(在过程里用Const说明)、 模块级常量(在窗体,模块的声明区用Const说明)、全局常量(在模块的声明区用Public
Const说明)
2,使用注释
用 “ ‘ “ 注释。如:‘ This Sub is used to get Windows version
撇号右边的东西Visual Basic通常用绿色的字来显示,而且Visual Basic将忽略注释的东西。在Visual Basic 4.0所附的示例程序里使用了大量的注释,这样使其他人(也包括自己)能更好地读懂程序,所以使用注释是一个好习惯。
注释的忽略性也有一些小用处,如:
x = ( 3.5 ^ 2 - 4 ) * ( 5 + 6.73 * 7 2 ) - 10.89
现在你需要测试这一语句是否是必要的,于是你把它删除,再运行看是否能得出正确的答案,如果它是不必要的,那就很顺利,如果它是必要的,你就不得不痛苦地再输入一遍而且还有输错的可能。现在你可以选择把它注释掉,这样程序运行将忽略它的存在,也可达到上面测试的目的。
§2 Visual Basic的语句
一、条件选择语句
人们面临选择的时候精神会变得脆弱,这就是为什么我们总是轻信偷看来的答案。因此,选择对于人类来说是一件复杂的事情,而对于计算机来说,则非常简单。它头脑简单,因而永远不会发出哈姆雷特式的疑问——“是生,还是死?”
1,条件式
条件式必然代表一个值,是真(True)或者是假(False)计算机可以检测出这个值以做出相应的行动。下面就是判断的例子,其中加下划线的部分就是指条件式。
If Love =
与之相同的简略的形式是:
If
而 If Love = 与 If Not 的意义是相同的。
条件式中可加入逻辑运算符,如:
If x < 20 And x > 15 Then 表示当 15 < x < 20 程序将做什么。
If x < 15 Or x > 20 Then 表示当 x < 15 或 x > 20 时程序将做什么。
2,If - Then 语句
语法是:
If Condition Then Instruction
例如: If n > 25 Then = “ABC”
3,If - Then - End If 语句
If Condition Then
Instruction 1
Instruction 2
End If
这种结构可指示计算机执行一串语句。
4,If - Then - Else 语句
If Condition Then
Instructions1
文档下载后可复制编辑
经典文
Else
Instructions2
End If
这种结构指示计算机在条件不成立时应该做的事,这样保证了计算机至少执行一些语句。
5,If - Then - Else If 语句
If Condition 1 Then
Instructions 1
ElseIf Condition 2 Then
Instructions 2
ElseIf Condition 3 Then
Instructions 3
Else
Instructions 4
End If
类似这样的完整的语句可做出多次判断,又保证计算机至少执行一些代码。
6,Select Case – case…case…end select语句
被选择的值为许多定值时,这个语句就更有用一些。
Select Case VariableName/object
Case Value 1 ‘可以是变量值或对象名
Instructions 1
Case Value 2
Instructions 2
Case else ‘除上述情况外的其他情况
Instructions 3
End Select
7,嵌套结构
我们可以把许多各式各样的条件语句嵌套在一起,而且这种嵌套在理论上没有限制。但事实上嵌套使用得越少,代码就越容易被理解。在嵌套时最好使用便于观察的缩排的格式。如:
Select Case Grade
Case "95"
If Class = "31" Then
Dorm = "1106-1108"
ElseIf Class = "33" Then
Dorm = "1104-1105"
End If
End Select
7,选择函数
IIf(expression,,) 根据表达式逻辑值,返回两个参数中的一个
Choose(expression,,,...) 根据表达式整数值,返回多个参数中的对应位置的那个。
文档下载后可复制编辑
经典文
二、循环语句
计算机擅长反复地做一件事,循环语句将发挥它的这种优势。
1,Do - Loop 循环
Do - Loop 循环基本上是一个死循环,所以需要在循环时判断一些条件。
(1)Do While 循环 (当Condition 条件为真时执行循环)。
Do While Condition
Instructions
Loop
While 也可以放在Loop 语句上。
(2)Do - Loop While 循环 (先执行一次程序体,再判断条件为真则继续执行循环)。
Do
Instructions
Loop While Condition
这两种循环的不同之处是:Do While 循环先判断条件,所以,Do While 循环可能一次都不执行。Do Loop While 循环先执行指令,再判断循环条件。所以Do Loop While 循环至少执行一次指令。但它们都是当一定条件为真时的循环。
(3)Do Until 循环 (条件为真即“退出”循环)。
Do Until Condition
Instructions
Loop
Do Until 先判断条件,所以循环可能一次都不执行,它是当一定条件为假时的循环。
Do Until 等同于:
Do While Not Condition
Instructions
Loop
(4)Do - Loop Until 循环 (执行程序体,直到条件为真时退出)。
Do
Instructions
Loop Until Condition
Do Loop Until 先执行指令再判断循环条件,所以指令至少被执行一次。Do Loop Until 是当一定条件为假时的循环。
2,计数的循环 For - Next
(1)For - Next 循环必须有一个控制变量,这个控制变量一般为整型。语法是:
For Counter = Start To End
Instructions
Next Counter
这里的 Counter 就是控制变量。如果想运行5次,可用下面的循环:
For i = 1 To 5
Instructions
Next i
这时,每循环一次,i 的值就加1。
(2)向前向后计数
For Counter = Start To End Step Increment
Instructions
Next Counter
文档下载后可复制编辑
经典文
Increment 表明每次循环控制变量所加的值。如下面代码也可循环5次:
For i = 5 To 1 Step -1
Instructions
Next i
只有当Counter <= End 时循环才执行,当Counter > End 的时候循环就不执行了。所以
For i = 1 To 10 Step 7
Instructions
Next i
循环将执行两次,一次是当 i = 1 时,一次是当 i =8 时。
最好不要在循环内改变控制变量的值,这样往往会导致逻辑上的错误。
(3) 对象的计次循环
For each element in group…..next ‘针对一个数组或集合中的每个元素,重复执行一组语句。
可参见Csdn中For each….next语句 或 Printer对象与Printers集合。
3,与条件语句一样,循环语句也可以嵌套。如:
Do While Condition
For i = 1 To 5
Instructions
Next i
Loop
循环总是先从内部开始的。比较:
For i = 1 To 4 For i = 1 To 4
For j = 1 To 5 For j = 1 To 5
Next j Next i
Next i Next j
是允许的 这种For - Next 的缠绕是不允许的
4,从循环中快速退出
通过使用命令Exit Do 和 Exit For ,我们可以在循环未结束前跳出循环。但我们应该保证所需的动作完成后再跳出来,否则也许会遇到新的错误。而且不要试图用Goto语句从循环外跳入循环。
下面的代码可以检测出3 至20 之间的质数。其中使用了循环的嵌套及条件语句,并且当发现 i 不是质数时立即用 Exit For 转向对下一个数的检测。
Sub Form_Click ()
Dim i, j, x As Integer
For i = 3 To 20
x = False
For j = 2 To i - 1
If (i Mod j) = 0 Then Exit For
If j = i - 1 Then x = True
Next j
If x Then Print i
Next i
End Sub
5,遍历对象(如:所有打印机、窗体等)
文档下载后可复制编辑
经典文
使用For Each object In collection语句来遍历集合中的对象
(1)、遍历所有窗体
‘MDI窗体Load事件中无法列出子窗体,因为它们还没加载。
‘判断是否mdi子窗体只能看name属性,因为MDI窗体没有Mdichild属性
‘方法一 (遍历含MDI窗体)
Dim frm As
For Each frm In Forms
n
Next
‘方法二(遍历不含MDI窗体)
Dim i
For i = - 1 To 1 Step -1
Forms(i).Caption
Next
(2)、遍历打印机(VB MSDN自带例程)
Dim X As Printer
For Each X In Printers
If ation = vbPRORPortrait Then
'设定为系统缺省打印机。
Set Printer = X
' 终止查找打印机。
Exit For
End If
Next
三、建立过程与函数
如同常量的定义一样,有时不仅仅是几个数字反复出现在程序中,而且是很多段代码在做几乎同样的事,如果有一些通用的代码可供调用的话,那么程序就会简练得多,而且更为清晰,这就是过程与函数。过程和函数保存在FRM文件和BAS文件里。若一个过程保存在BAS文件里,那么这个过程可供程序里所有的代码调用;如果一个过程保存在FRM文件里,那么这个过程只能被本窗体里的代码调用到。创建过程或函数的简单方法是选择Insert菜单的Procedure项。过程名,函数名的命名规则与变量名,常量名的命名规则一样。
1,过程结构
Sub subname (argumentlist)
Instructions
End Sub
argumentlist 指的是参数列表,所谓参数,就是指过程操作所需的指导条件。如下面过程:
Sub PrintHello (n As Integer)
Dim i As Integer
For i = 1 To n
文档下载后可复制编辑
经典文
Print "Hello"
Next i
End Sub
n 参数就是指导这个过程打印 “Hello” 的个数。当有许多参数时,可用 “,” 将它们分开。
如果在 Form_Click 事件过程里调用 PrintHello 过程,就可用键入:
Call PrintHello(5) ‘其中 Call 是Visual Basic的保留字
PrintHello 5
后一种省略 Call 和括号的方法使这个过程看起来更象一个Visual Basic的语句,所以我们可以这样认为:建立好的过程可以当作语句来使用。
2,函数结构
函数结构与过程结构基本上是一样的。
Function functionname (argumentlist) As type
Instructions
End Function
函数就是有返回值的过程,它自己是有数据类型的。但 As type 部分是可以省略的,这时函数的返回值将是变体类型的值。在调用没有参数的函数时也必须加括号。如:
Function Total (a As Integer, b As Integer, c As Integer) As Integer
Total = a + b + c
End Function
调用时可以这样:
Answer = Total (10, 20, 30)
又如:
Function CurrentTime ( ) As String
CurrentTime = Time
End Function
调用时应该这样:
s = CurrentTime( )
我们看出建立好的函数与Visual Basic 本身的函数在调用时也没有什么不同。程序员可以建立自己的过程与函数库以加快编程效率。
3,传值方式
当过程内改变了参数的值时,Visual Basic并不会产生错误信息,但这样可能引起一些混乱,如:
Sub PassedNotByValue (x As Integer)
x = x + 1
End Sub
在事件过程中调用:
Sub Form_Click ()
Dim i As Integer
i = 1000
PassedNotByValue i
Print i
End Sub
结果会是什么呢?是1001。在复杂的过程里不小心改变了参数的值,而调用过程的代码里这个参数又不应该改变的情况是很有可能发生的。改进的方法是:
Sub PassedByValue (ByVal x As Integer)
文档下载后可复制编辑
经典文
x = x + 1
End Sub
调用改为:
Sub Form_Click ()
Dim i As Integer
i = 1000
PassedByValue i
Print i
End Sub
结果将是1000,这就是传值方式,传值方式在参数行开始处加上 ByVal 保留字。属性总是用传值方式传递的。
4,程序跳转
在程序中加入On expression GoTo line(任何以字母开头以:结尾的标识处) 或 On Error
Resume Next 或 Exit Do/Sub/function/For等。
5,自定义过程默认参数
在定义过程参数前加上 Optinal 关键字即表示该参数可省略,如:Sub lookfor(Optional a
as string =”OK”)
6,响应外部过程
DoEvents() 响应其他程序及系统的事件,在过程或循环中插入该语句,可避免因程序忙而无法响应外部请求。
§3 Visual Basic的对象或类
静态创建对象一般有两种:一种是直接将对象从工具箱中拖放到窗口中,另一种是在程序中作用语句(dim/public/private等)声明后再使用NEW关键字启用。
还有一种动态加载对象的方法创建对象:先将对象使用语句声明为object,然后使用Set
obj=CreateObject()/Getobject() 语句获得对象并启用。
对象或类的使用格式为:Object.方法/属性 或 Object.集合/子对象(“成员”).方法/属性
给对象或类赋值格式为:Set Obj=OtherObject
对象使用完毕后应关闭(或unload object),或使用Set object=Nothing彻底释放对象。
创建对象例:
方法一、将对象拖动到窗口中,这种方法一般适用于工具箱中的可见对象,如:基本控件或ActiveX 控件/部件。
方法二、使用语句,这种方法一般适用于工具箱中不可见的对象或类,如:Active dll等。
静态加载(需先在菜单“工程—引用”中引用该对象)
dim Cn As New tion ‘等效于public cn as tion 加 set
cn=new ion
dim Rs As New set
动态加载(无需引用,只需语句)
Dim Cn,Rs As Object
Set Cn = CreateObject("tion")
Set Rs = CreateObject("set")
‘CreateObject()函数所指定的对象类应该存放在系统目录中的DLL库中或是在系统中注文档下载后可复制编辑
经典文
册过的DLL。
‘GetObject()函数可以指定对象所在的文件和类,从而加载对象。有关函数详见Csdn中相关内容。
第四章
出
Windows 95的新控件Visual Basic的输入输§1 ToolBar(工具条)控件
ToolBar就是那些在菜单下面的图形钮,这已经成为Windows应用程序的样板。
一、建立工具条
1,在工具箱里单击工具条图标,拖到窗体的任何位置,Visual Basic自动将ToolBar移到顶部。
2,按F4键打开属性窗口。
3,双击(Custom),打开ToolBar属性窗口。
4,选择Buttons标签。
5,单击Insert按钮,Visual Basic就会在你的工具条上显示一个空按钮,现在为你的每一个按钮重复这一步。
6,单击确定按钮。
如果你想把按钮分组,首先生成一个分隔的按钮,再在刚才提到的对话框里将这个按钮的Style属性改为3-Separator。
二、为工具条增加图画
1,在Visual Basic工具箱里单击ImageList图标,并将它拖到窗体的任何位置(位置不重要,因为它总是不可见的)。
2,按F4打开属性窗口。
3,双击(Custom),打开ImageListCtrl属性窗口。
4,选择Image标签。
5,单击Insert Picture,在现在图形的对话框里选择你想使用的位图或图标,然后单击打开按钮。为每个你想添加图形的工具条按钮重复此步。
6,单击确定按钮。
7,单击你的工具条,按F4,双击(Custom),显示ToolBar属性对话框。
8,选择General标签,在ImageList框里选择刚才添加的ImageList控件。
文档下载后可复制编辑
经典文
9,选择Buttons标签,单击紧挨Index框的向左或向右箭头以选择一个按钮序号。出现在工具条最左边的按钮序号为1。
10,在Image框里输入一个数,输入为1,则显示刚才ImageList控件里的第一个图形,输入为2,则显示刚才ImageList控件里的第二个图形。
11,为每个按钮重复第10和第11步。
12,单击确定按钮,现在Visual Basic就会在工具条上显示精美的图形了。
三、为工具条添加文本信息
在刚才提到的ToolBar属性对话框中选择Buttons标签,在Caption框里输入你想显示在按钮上的文本。
四、添加ToolTips
ToolTips是一种当你点到工具按钮是弹出的小标签。ToolTips很方便,可以告诉那些新手每个按钮是干什么用的。在刚才提到的ToolBar属性对话框中选择Buttons标签,在ToolTipText框里输入你想作为ToolTip的文本。
五、如何编写代码
双击你的工具条,以下面的格式输入代码就可以了。
Private Sub Toolbar1_ButtonClick(ByVal Button As Button)
Select Case
Case 1
'Code to follow if user clicks the first button
Case 2
'Code to follow if user clicks the second button
Case 3
'Code to follow if user clicks the third button
End Select
End Sub
§2 StatusBar(状态条)控件
和ToolBar一样,选中状态条,按F4键进入属性窗口,双击(Custom)可以进入主要的设置窗口SBarCtrl属性窗口。
一、选择面板形状
在SBarCtrl属性窗口里选择General标签,在Style列表框里选择多面板(缺省形式)或单面板简单文本形式。
二、添加或删除状态条面板
在SBarCtrl属性窗口里选择Panels标签,单击Insert按钮添加一个面板,或单击Remove按钮删除一个面板。
三、在单面板里显示文本
在SBarCtrl属性窗口里选择General标签,在SimpleText框里输入你想显示在状态条面板里的文本。用代码显示的方式是:
Text = "New string to appear"
文档下载后可复制编辑
经典文
四、在多面板里显示文本或图形
1,在SBarCtrl属性窗口里选择Panels标签,用Index旁的按钮选择面板序号。
2,在Text框里输入你想显示在状态条面板里的文本。
3,如果你想加入图形,单击Browse按钮打开一个图形选择对话框,选择你想加入的图形,然后单击打开按钮。
4,最后按确定按钮。
5,用代码显示的方式是:(x).Text = "New string to appear"
五、如何编写代码
如果是一个单面板状态条,当用户单击状态条时,只需用下面的事件过程来响应:
Private Sub StatusBar1_Click()
End Sub
如果是一个多面板状态条,就需要鉴别用户单击的是哪一个面板,可用下面的事件过程来识别用户所单击的面板:
Private Sub StatusBar1_PanelClick(ByVal Panel As Panel)
Select Case
Case 1
'Code to follow if user clicks the first panel
Case 2
'Code to follow if user clicks the second panel
Case 3
'Code to follow if user clicks the third panel
End Select
End Sub
§3 ProgressBar(进程条)控件
一、进程条的三个属性
1,Min属性代表进程条全空时的值,缺省时为0。
2,Max属性代表进程条全空时的值,缺省时为100。
3,Value属性代表进程条当前的值(不用在属性窗口里找这个属性,它不出现在属性窗口中,但它的确存在),它大于Min属性,小于Max属性。改变Value属性的值将改变进程条的进度显示。
为了了解进程条的功能,在窗体里添加一个进程条和一个命令钮,双击命令钮进入代码窗口,键入如下代码:
Private Sub Command1_Click()
If < Then
= + 5
Else
e = False ‘当进程条满了的时候让进程条消失
End If
文档下载后可复制编辑
经典文
End Sub
§4 Slider(滑块)控件
一、选择滑块的外观
1,Orientation属性决定滑块的方位,可以是垂直的或水平的滑块。
2,TickStyle属性决定滑块标记的样子。
3,TickFrequency属性规定了沿着滑块的标记的间隔大小,缺省的状态是1,表明每个可能值都出现标记,如果你把值设置为3,则每三个可能值出现一个标记。
二、滑块的Min,Max,Value属性
这三个属性和进程条的这三个属性差不多,Min,Max表示滑块的最小和最大值,Value表示进程条的当前值。
三、滑块的LargeChange,SmallChange属性
LargeChange规定了当用户用鼠标单击滑块时,滑块可移动的距离。SmallChange规定了用户按左箭头或右箭头时滑块的移动距离。
§5 TabStrip控件(象笔记本书签或一组文件夹的标签)
和ToolBar一样,选中TabStrip,按F4键进入属性窗口,双击(Custom)可以进入主要的设置窗口TabStrip属性窗口。
一、设置样式
在TabStrip属性窗口里选择General标签,在Style列表框里选择Tabs或Buttons样式。
二、规定TabStrip的标题,ToolTips和
1,在TabStrip属性窗口里选择Tabs标签,在Caption框里输入标题。
2,在TabStrip属性窗口里选择Tabs标签,在ToolTipText框里输入ToolTip。
三、增减标签总数
在TabStrip属性窗口里选择Tabs标签,单击Insert Tab按钮增加标签,单击Remove Tab按钮删除标签。
四、在TabStrip上显示图形
1,在窗体里拖入一个ImageList控件,
2,按F4打开属性窗口。
3,双击(Custom),打开ImageListCtrl属性窗口并选择Image标签。
文档下载后可复制编辑
经典文
4,单击Insert Picture,在现在图形的对话框里选择你想使用的位图或图标,然后单击打开按钮。为每个你想添加图形的Tab按钮重复此步。
5,单击确定按钮。现在ImageList里存储了你需要的图形。
6,选择你的TabStrip,进入TabStrip属性窗口并选择General标签,在ImageList列表框里选择ImageList1。
7,现在选择Tabs标签,单击紧挨Index框的向左或向右箭头以选择一个Tab序号。在Image框里输入一个数,输入为1,则显示刚才ImageList控件里的第一个图形,输入为2,则显示刚才ImageList控件里的第二个图形。
8,单击确定按钮。
五、用户响应
可用类似下面的代码来识别用户在哪一个项目上单击。
Private Sub TabStrip1_Click()
Select Case
Case 1
'Code to follow if user clicks the first tab
Case 2
'Code to follow if user clicks the second tab
Case 3
'Code to follow if user clicks the third tab
End Select
End Sub
六、在TabStrip上放置其它控件
在用户选择了标签后,TabStrip要求你编写代码来显示或隐藏控件。下面的代码上是一个TabStrip上有一个命令钮和一个选项钮的例子,当用户选择了第一个Tab时,选项钮出现,当用户选择了第二个Tab时,命令钮出现。
Private Sub TabStrip1_Click()
Select Case
Case 1
e = False
e = True
Case 2
e = True
e = False
End Select
End Sub
§6 Visual Basic的输入机制
程序的基本操作就是数据的输入,数据处理和数据的输出。Visual Basic的可用于输入的控件主要有:
正文框Text Box、确认框Check Box、选项钮Option Button、列表框List Box、组合框Combo Box、滚动条Scroll Bar、通用对话框控件。还有一个函数叫InputBox函数,也可用于数据的输入。
一、通过正文框输入数据
1,我们只要取得正文框的Text属性就可以对其进行操作了。如下面代码可将Text1正文档下载后可复制编辑
经典文
文框的正文变成大写输出至Text2正文框。
Private Sub Form_Click ()
= UCase()
End Sub
二、通过确认框和无线钮输入数据
我们只要检测到Check Box和Radio Button的Value属性值就可以知道它们是否被选上了。
三、通过列表框和组合框输入数据
1,列表框List Box和组合框Combo Box在Windows的Open,Save As对话框里最为常见。组合框又包括三种类型,这三种类型要在它的Style属性里设置。列表框仅仅把可以选择的项目列出来,而组合框里有的类型可以允许用户输入数据。它们的异同是:
名称
列表框
组合框类型0
组合框类型1
组合框类型2
是否有下拉选项
否
是
否
是
是否允许用户输入
否
是
是
否
2,列表项目的增减
使用AddItem,RemoveItem语句。通常将项目增减的语句放入Form_Load事件里。
ListBoxName. AddItem item
ComboBoxName. AddItem item
item是新项目名称,必须是字符串类型,非字符串类型可通过Str函数或Format函数来转换。
列表框,组合框的每一项目都有一个Index值,第一个项目的Index值是0,第二个是1,依此类推。删除项目可通过删除其Index值来实现。
ListBoxName. RemoveItem item
ComboBoxName. RemoveItem item
如:ListBoxName. RemoveItem 0则删除了第一项,这时原来的第二项就变成了第一项。
在Visual Basic 4.0里程序员终于可以在设计阶段设定列表项目了。方法是:
在属性窗口选择List属性,将出现一个下拉列表,在列表中输入第一项,按Ctrl+Enter,输入第二项……,最后用Enter结束。
3,取得列表框,组合框的数据
可以通过取得Text属性或通过取得ListIndex属性来判断哪一项被选择了。ListIndex属性的值也同样是第一个为0,第二个为1……如:
If = “Visual Basic” Then Instructions
If dex = 1 Then Instructions
组合框有时允许用户自己输入数据,这时所输入数据的ListIndex值为-1。
文档下载后可复制编辑
经典文
四、通过滚动条Scroll Bar取得数据
在Visual Basic的工具箱里有两种滚动条:一种是垂直的,一种是水平的,它们的差异无非是摆放的方向不一样。
1,滚动条的主要属性及事件
(1)Min,Max属性
Min属性决定滚动条最左端或最顶端所代表的值。Max属性决定滚动条最右端或最下端所代表的值。
(2)LargeChange,SmallChange属性
SmallChange决定在滚动条两端的箭头钮上单击时改变的值。LargeChange决定在滑块上方或下方区域单击时改变的值。
(3)Value属性
Value属性代表当前滑块所处位置的值,这个值由滑块的相对位置决定。
(4)Change事件
当滑块位置发生变化时就引发了Change事件。
2,取得滚动条的数据
滚动条并不是一个数据输入的好控件,因为你无法从滚动条上直接看出输入的数据,但它的优点是可以表示一定范围里的相对位置。为了得到数据,只要取得滚动条的Value属性就可以了。
五、InputBox函数
InputBox函数提供一个简单的对话框供用户输入信息。在把其它版本的BASIC程序移植到Visual Basic时,InputBox函数通常用来代替INPUT语句。这个对话框的样子基本上是下面的样子。
它的完整语法是:x = InputBox (prompt, title, default, xpos, ypos, helpfile, context)
其中,prompt是提示的字符串,这个参数是必须的。title是对话框的标题,是可选的。default是正文框里的缺省值,也是可选的。xpos,ypos决定输入框的位置。helpfile,context用于显示与该框相关的帮助屏幕。返回值 x 将是用户在正文框里输入的数据,x是一个字符串类型的值。如果用户按了Cancel钮,则 x 将为空字符串。
六、使用通用对话框控件
Windows应用程序里的Open对话框,Save As对话框在各个应用程序里看起来都是一样文档下载后可复制编辑
经典文
的,通用对话框控件就可以提供这些对话框的标准功能。
1,Open对话框及Save As对话框
打开Open对话框使用ShowOpen方法,打开Save As对话框使用ShowSave方法。
Private Sub mnuOpen_Click ()
On Error GoTo ErrorHandler
Error = True
= "Text Files (*.txt)|*.txt|Batch Files (*.bat)|*.bat|All Files
(*.*)|*.*"
en ' display Open common dialog box.
Call OpenFile(me)
ErrorHandler:
Exit Sub
End Sub
其中第三行决定了在文件格式类型栏里出现的文件类型。第五行需要一个你自己的打开文件的过程,这个过程需要的参数就是通用对话框返回的文件名。通用对话框的CancelError属性设为True的话,用户单击Cancel按钮将产生一个错误信息程序,凭借这个信息程序可以检测到用户的放弃操作。
2,Color对话框
下面的过程可用用户选择的颜色作为窗体的底色。
Private Sub mnuColor_Click ()
On Error GoTo CancelButton
Error = True
lor
lor =
CancelButton:
Exit Sub
End Sub
代码的第三行出现了通用对话框的Flags属性决定了通用对话框的一些可选项,不过即使不赋值给Flags,代码也一样会按缺省的情况去执行的。
3,Fonts对话框
下面的过程可用字体对话框改变正文框的字体。
Private Sub mnuFonts_Click ()
On Error GoTo CancelButton
Error = True
= cdlCFBoth ' Flags property must be set to cdlCFBoth
nt ' Display Font common dialog box.
me = me
ze = ze
ld = ld
alic = alic
derline = derline
rikethru = rikethru
lor =
CancelButton:
Exit Sub
文档下载后可复制编辑
经典文
End Sub
§7 Visual Basic的输出机制
通过正文框等控件的输入,经过程序代码的处理,现在我们要把结果输出了。作为输出的对象,Visual Basic提供了标签,正文框,窗体,图片框(Picture Box)等用于输出,而且Visual Basic里也有一堆命令、属性涉及信息的输出,较常用的有:MsgBox函数,Print方法,Cls方法,Tab函数,Format函数,FontName,FontSize,FontBold,FontItalic,FontStrikethru,FontUnderline属性,CurrentX,CurrentY属性等。
一、通过MsgBox函数输出
了解Windows应用程序的人都知道当用户操作错误时,应用程序往往打出一个消息框来提示用户的错误,象这样:
Dim Action As Integer
Action = MsgBox("单击确定键将引爆此计算机!", vbYesNo + vbCritical +
vbDefaultButton2, "警告!")
If Action = 6 Then Explode
这个功能在Visual Basic里是通过MsgBox函数来实现的,这样程序员就不必自己去画一个消息框了。语法是:
Action = MsgBox (msg, type, title)
其中,msg是消息的内容,是一个字符串型的变量,type及title参数是可以省略的,type参数指定显示的按钮是什么及使用什么样的图标(这个参数往往让新程序员思考几分钟),title参数指定消息框的标题。type参数的含义是:
数值 符号常量 意义
0 vbOKOnly
只显示 Ok 按钮
1 vbOKCancel
显示 Ok,Cancel 按钮
2 vbAbortRetryIgnore
显示 Abort,Retry,Ignore 按钮
3 vbYesNoCancel
显示 Yes,No,Cancel 按钮
4 vbYesNo
显示 Yes,No 按钮
5 vbRetryCancel
显示 Retry,Cancel 按钮
16 vbCritical
Stop Sign对极其重要的问题提醒用户
32 vbQuestion
Question Mark增亮没有危险的问题
文档下载后可复制编辑
经典文
48
64
0
256
512
vbExclamation
vbInformation
vbDefaultButton1
vbDefaultButton2
vbDefaultButton3
Exclamation Mark强调警告用户必须知道的事情
Information Mark可以使乏味的信息变得有趣
第一个按钮缺省
第二个按钮缺省
第三个按钮缺省
例如:Action = MsgBox (“Are you girl?”, vbYesNo + vbQuestion, “Question”)。使用这个函数时Visual Basic将产生一个标题为Question,具有问号和Yes,No按钮的消息框。作为一个函数,本质上还是要返回值的,MsgBox的返回值确定了用户的选择,程序可根据返回值做出相应的动作。
返回值
1
2
3
4
含义
选择 Ok 按钮
选择 Cancel 按钮
选择 Abort 按钮
选择 Retry 按钮
返回值
5
6
7
含义
选择 Ignore 按钮
选择 Yes 按钮
选择 No 按钮
二、Print方法,Cls方法,Tab函数
1,Print方法
我清晰地记得小学时所学的第一个计算机语句就是Print,并且成功地用这个语句及一堆
“*” 号 “#” 号在屏幕上打出一间小屋。Print 方法的语法是:object. Print expressionlist
object表示Print作用的对象,比如是Form或者是Picture Box,object是可以省略的,省略时的Print往往在窗体上输出。expressionlist是输出的内容,允许许多项数据的输出,在数据间你可以加入“,”或”;”。加入分号将使下一数据项紧挨着上一数据项输出。而加入逗号,则Visual Basic将下一数据项在下一打印区输出,其实就是空了几个空格后再输出。两个打印区之间有14个字符的宽度,其实这也很难衡量,比如14个“W”所占的宽度大概是14个“i”所占宽度的三倍多。幸好中国日本之类的方块字所占的宽度基本上是一样的,所以较好处理一些。
2,Tab函数
Tab函数只用在Print方法中,它用来移动下一个字符到打印位置,这将省去你数空格的功夫。语法是:Tab (column)
Tab函数将Visual Basic自定义的14字符宽的打印区扔到一边,用自己的方式定义了新的灵活的打印区宽度。
3,Cls方法
Cls也是一个古老的BASIC语句原来它的作用总是把屏幕变成黑色,然后在左上角或左下角闪烁一个光标,Visual Basic里它的作用是清除绘图语句和Print语句产生的文字和图形。语法是:object. Cls
object指清除的对象,可以是Form或Picture Box。如果object省略,通常Visual Basic都把当前的窗口作为Cls操作的对象。
三、Format函数
Format函数用于制定字符串或数字的输出格式。语法是:x = Format (expression,fmt)
expression是所输出的内容。fmt是指输出的格式,这是一个字符串型的变量,这一项若文档下载后可复制编辑
经典文
省略的话,那么Format函数将和Str函数的功能差不多。如:
语句
Format (2, “0.00”)
Format (.7, “0%”)
Format (1140, “$#,##0”)
简单地,fmt里的字符是这样的:
字符
0
#
%
意义
显示一数字,若此位置没有数字则补0
显示一数字,若此位置没有数字则不显示
数字乘以100并在右边加上”%”号
输出
2.00
70%
$1,140
字符
.
,
- + $ ( )
意义
小数点
千位的分隔符
这些字出现在fmt里将原样打出
Format函数也可用来对时间进行输出。
fmt fmt
输出 输出
m/d/yy 8/16/96 h:mm:ss a/p 10:41:29 p
d-mmmm-yy 16-August-96 h:mm 22:41
d-mmmm 16-August h:mm:ss 22:41:29
mmmm-yy august-96 m/d/yy h:mm 8/16/96 22:41
hh:mm AM/PM 10:41 PM
四、FontName,FontSize,FontBold,FontItalic,FontStrikethru,FontUnderline属性
很明显,这些属性都与字体有关,许多控件都有这些属性。通常它们在设计阶段可以双击font属性来设置,运行期间可以直接设置。它们的意义是:
FontName FontItalic
字体的名称 字体是否用斜体显示
FontSize FontStrikethru
字体的大小 字体是否有删除线
FontBold
字体是否用粗体显示
FontUnderline
字体是否有下划线
如:ld = True,将把Text1正文框的FontBold属性设为True。
五、窗体,图片框的CurrentX,CurrentY属性
这两个不可见的属性确定了下一次打印或绘图的水平及垂直坐标。如上面讲的Print方法,当expression后使用 “,” 时,Visual Basic将改变CurrentX,CurrentY值为下一打印区域开始的值,于是,输出便指向了下一个打印区域。而Cls方法将把操作对象的CurrentX,CurrentY的值设为(0,0)。
六、通过标签控件输出
标签控件的特点是运行时不能直接修改它,通常一个正文框旁边都有一个标签用来标识正文框。标签的Autosize和WordWrap属性是一对有用且令人困惑的属性。
文档下载后可复制编辑
经典文
第五章 Visual Basic的鼠标事件和绘图
§1 Visual Basic的鼠标事件
Click就是一个鼠标事件,它可以发生在许多对象上。同时鼠标事件还有DblClick,MouseDown,MouseUp,MouseMove以及拖曳后放下的事件。在Visual Basic所附的示例程序里,有一个介绍鼠标事件的例子,它的通常的路径及文件名是:c:
一、MouseDown,MouseUp事件
MouseDown,MouseUp事件分别发生在按下鼠标按键和松开鼠标按键时,窗体的空的MouseDown,MouseUp事件是这样的:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As
Single)
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
End Sub
1,MouseDown,MouseUp事件与Click事件的不同
Click事件不能检测到是哪一个按键按下了,也不能检测到按下鼠标的同时键盘上是否按着Shift,Ctrl,Alt键,而且Click事件还不能确定按鼠标时鼠标指针的位置。而这些在MouseDown,MouseUp事件里都可以知道,这也是这两个事件过程发生时后面四个参数的意义。在需要上面所说的参数时,可以用MouseDown事件或MouseUp事件代替Click事件。
2,Button参数
这个参数确定按下的鼠标按键是哪一个。
参数值
1
2
4
符号常量
vbLeftButton
vbRightButton
vbMiddleButton
意义
按下左键
按下右键
按下中键
但是这个参数无法判断出两个键或三个键同时按下时的情况。比如当你同时按下左右键时将引发两个MouseDown事件,Button参数分别为1和2,或者是2和1。
3,Shift参数
这个参数用来确定MouseDown,MouseUp发生时键盘是否同时按着Shift,Ctrl,Alt键
参数值
0
1
2
3
意义
没按
Shift(常量vbShiftMask)
Ctrl(常量vbCtrlMask)
Shift和Ctrl同时被按下
参数值
4
5
6
7
意义
Alt(常量vbAltMask)
Shift和Alt同时被按下
Alt和Ctrl同时被按下
三个键同时按下
所以Shift参数是可以判断多个键同时被按下的情形的。
4,X,Y参数
文档下载后可复制编辑
经典文
这两个参数表明MouseDown,MouseUp发生时,鼠标指针所指向的位置。
二、MouseMove事件
1,MouseMove事件发生在鼠标移动的时候。窗体的空的MouseMove事件是这样的:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
End Sub
MouseMove的四个参数与MouseDown,MouseUp的四个参数的意义是一样的,但MouseMove的Button参数可以判断出多个按键按下时的情形。
参数值
0
1
2
3
意义
三个键都没按
左键
右键
左右键
参数值
4
5
6
7
意义
中键
左中键
右中键
三个键都按着
2,了解了鼠标的这三个事件后就会发现Windows Paintbrush里的绘图也不过如此,下面的代码就可以实现用鼠标当作画笔在窗体上乱画的功能。
把下面代码拷到窗体的声明区就可以了。
Dim Draw As Integer
Sub Form_MouseDown (Button As Integer, Shift As Integer, X As Single, Y As Single)
Draw = True
CurrentX = X
CurrentY = Y
End Sub
Sub Form_MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single)
If Draw = True Then Line -(X, Y)
End Sub
Sub Form_MouseUp (Button As Integer, Shift As Integer, X As Single, Y As Single)
Draw = False
End Sub
三、关于“拖曳后放下”的属性和方法
1,DragMode属性
这个属性决定了拖放操作是手动还是自动方式。前者必须用Drag方法来让程序知道拖曳已经开始或用Drag方法让程序知道拖曳结束了。而后者则计算机自己就可以知道拖曳的开始及结束。这说明手动方式更具有灵活性,而自动方式则简单一些。
文档下载后可复制编辑
经典文
属性值
0
1
意义
(缺省)手动,需使用Drag方法初始化源控件的拖动操作
自动,单击源控件就可以自动初始化拖动操作
2,DragIcon属性
这个属性确定拖放操作中显示指针的图标。在运行期间可用赋值方式或LoadPicture函数给出DragIcon属性。如:
Image1. DragIcon = Image2. DragIcon
Image1. DragIcon = LoadPicture (“C:”)
3,Drag方法
语法是:control. Drag action
control决定被拖动的控件,action指出执行的动作。
action值
0
1
2
意义
取消拖动
开始拖动控件
放下控件
四、关于“拖曳后放下”的事件
1,DragDrop事件
拖动时总是要放下的,如果拖动的控件放在了另一个窗体或控件上,就引发了后者的DragDrop事件。空的DragDrop事件基本上是这样的:
Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)
End Sub
Source参数指明了前者——被拖动的对象,Control类型的变量就是说明这个变量代表一个控件,也就是控件的名字,但在传递这个参数时不必打上引号。X,Y参数表明鼠标指针所在的位置。
2,DragOver事件
在拖放操作进行之中,被拖动的控件可能会从其它控件上空飘过,或者在目标控件上空盘旋一下,这时,就引发了在被拖动控件下方的控件的DragOver事件,这时它可以修改被拖动控件的DragIcon属性,使它可以表明是否允许控件的着陆。在Explorer里通过鼠标拖动实现文件的拷贝与移动时就可看到DragOver事件的应用。空的DragOver事件差不多是这样的:
Private Sub Form_DragOver(Source As Control, X As Single, Y As Single, State As Integer)
End Sub
Source, X, Y 参数的意义与DragDrop 的意义相同。State 参数表明被拖动的控件相对于它飘过的控件的迁移状态。
State值
0
1
2
文档下载后可复制编辑
描述
Source控件飘进本控件的领空
Source控件飘出本控件的领空
Source控件在本控件上空盘旋
经典文
DragOver事件的例子可以参考Visual Basic Help里的例子。
§2 在Visual Basic程序里绘图
计算机的绘图和动画是一件奇妙且引人入胜的主题,许多软件公司都开发了优秀的关于图象的软件,三维的有3D Studio Max、LightWare、True Space等,二维的有CorelDRAW、FreeHand等等。这也是计算机渗透到其它领域的一个很好的例子,在许多影片中都可以看到计算机的出色表现。
速度并不是Visual Basic的优势,不过Visual Basic已经为我们提供了不少的素材。已经有一些厚达600页以上的书籍在介绍Visual Basic下的图象处理技术,包括绘图,色彩,动画,三维空间,虚拟现实,甚至计算机仿真的基础。听起来很诱人的东西往往需要大量不诱人的知识,比如数学,物理,逻辑等等。
一、在Visual Basic程序里加入图片
1,图片通常可以放在Form,Picture Box,Image Box里,用代码加入图片的方法有两种,一种是用LoadPicture函数,如:e = LoadPicture(“c:”)
另一种是用赋值的方式,如:e = e
删除图片的方法是:e = LoadPicture(“”)
2,Visual Basic送给我们的几百个ICO文件是非常有趣的,这些文件通常的子目录是:C:VBICONS
它包括12类。在这些ICO文件里,有许多是成对出现的,用这些图标,可以做出一些简单的动画。
3,这个例子用VB目录下的ICONSTRAFFIC子目录下的,,图标模拟一个红绿灯的变化。建立如下界面:
控件名
img(右上)
img(右中)
img(右下)
imgShow(左)
键入代码:
Private Sub Form_Click()
文档下载后可复制编辑
属性
Index
Picture
Visible
Index
Picture
Visible
Index
Picture
Visible
Picrure
设置值
0
c:vb iconstraffictrffc10a
False
1
c:vb iconstraffictrffc10b
False
2
c:vb iconstraffictrffc10c
False
c:vb iconstraffictrffc10a
经典文
Static i As Byte
If i = 2 Then
i = 0
Else
i = i + 1
End If
e = img(i).Picture
End Sub
这里出现的Static语句同Dim语句一样用于声明变量。用Dim语句声明的变量在退出这个过程时,变量的值就不存在了,第二次进入这个过程时变量的值将变成0,而不是上次处理后的值。而用Static语句声明的变量在第二次进入过程时将保持上次退出时变量的值,这就是Static与Dim的不同之处,用Static语句声明的变量被称作静态变量。
二、可用于制作特殊效果的数学及语句
1,Move方法
Move方法的语法是: left, top, width, length
object是被移动的对象,这个参数是可以省略的。left参数是必须的,指定对象左边的水平坐标。top参数是可以省略的,指定对象上面的垂直坐标。width参数是可以省略的,指定对象的新宽度。length参数是可以省略的,指定对象的新长度。width,length参数的指定也就是指移动的同时改变对象的大小。
三、Visual Basic的坐标系统
1,Visual Basic的坐标系和笛卡尔的平面坐标系不同,计算机屏幕的坐标系是这样的。
窗体的左上角是原点,X轴的正向水平向右,Y轴的正向垂直向下,这是计算机领域里的顽固传统之一。所以窗体里的控件的位置用Left,Top属性描述,Left是控件左上角到窗体左边的距离,Top是控件左上角到窗体上边的距离。
2,建立自己的坐标系
这涉及到窗体的许多Scale属性。ScaleLeft属性确定对象左边的水平坐标,ScaleTop属性确定对象顶端的垂直坐标,ScaleWidth属性确定对象内部水平的单元数目,ScaleHeight确定对象内部垂直的单元数目。如:
ScaleLeft = -50
ScaleTop = 50
ScaleWidth = 100
ScaleHeight = -100
将建立一个笛卡尔的坐标系如下:
文档下载后可复制编辑
经典文
更简单的方法是用Scale方法: (-50, 50) - (50, -50)
也可建立上面的笛卡尔坐标系,其中前一个括号里是左上角的坐标,后一个括号里是右下角的坐标。
3,刻度系统
这是由控件的ScaleMode属性设置的。ScaleMode的值有:
ScaleMode值
0
1
2
3
意义
用户自定义
点素(Twip)
点(Point)
象素(Pixel,这与屏幕分辨率有关)
ScaleMode值
4
5
6
7
意义
字节(Character)
英寸(Inch)
毫米(Millimeter)
厘米(Centimeter)
1 Inch = 1440 Twips
1 Centimeter = 567 Twips
1 Inch = 72 Points
1 字符宽(水平方向)= 120 Twips
1 字符高(垂直方向)= 240 Twips
有一次,我设置ScaleMode = 7,并在屏幕上打印了三个厘米长的线段,我拿尺子在屏幕上量了量,觉得好象和三个厘米的长度有一定的差距,这是为什么呢?后来知道除了0,3之外,其它值都是以打印长度为准的,也就是说打印出来才是三厘米。
四、基本的绘图
1,AutoRedraw属性
当AutoRedraw属性设为True时,所有的绘图都将被储存在内存上,当程序比较在意内存且绘图不很复杂的时候,可以在Form,Picture Box的Paint事件里编写绘图代码。Paint事件发生在Form或Picture Box重画时(如盖在上面的窗口移开,或窗体变大变小)。
2,色彩
决定用哪种色彩可以用三种办法
(1)使用RGB函数。语法是: RGB(Red, Green, Blue)
这三个参数分别决定红色,绿色,蓝色的亮度强度,三个参数的范围是0-255,0表示最浅最弱,255表示最深最强。如:lor = RGB(255,255,0) ‘黄色
(2)使用QBColor函数
这是Quick Basic的颜色系统可决定16种颜色,16种颜色是:
值
0
1
颜色
黑
蓝
值
4
5
颜色
红
品红
值
8
9
颜色
灰
淡蓝
值
12
13
颜色
淡红
淡紫
文档下载后可复制编辑
经典文
2
3
绿
青
6
7
黄
白
10
11
淡绿
淡青
14
15
淡黄
亮白
如:lor = QBColor(5)
(3)直接输入数值
颜色值的格式是16进制的,为&HBBGGRR。BB代表蓝色,GG代表绿色,RR代表红色。所以lor = &HFF0000
与lor = RGB(0, 0, 255)的含义是一样的。
(4)取得特定点的颜色值,使用Point方法。如:x = Point (20,30)
x将是一个长整型数字,它代表了(20,30)点的RGB值。x如果直接输出的话会让人难以理解,它是一个按16进制&HBBGGRR的方式排列的数。如何才能拆出Red,Green,Blue的值呢,可以用下面的公式。
Red = ((x, y) And &HFF)
Green = ((x, y) And &HFF00&) 256
Blue = ((x, y) And &HFF0000) 65536
计算机有时是通过抖色的方法来实现一些它表现不了的一些颜色。抖色就是比如一块淡红的颜色实际上是一些红点和一些白点组成的。这时从这块淡红的颜色里取一个点读它的RGB值也许会令你失望,你明明用RGB(255,128,128)填充了底色,但你用Point方法取出点的颜色时却是RGB(255,255,255)或RGB(255,0,0)。
3,绘图方法
包括Cls方法,Pset方法,Line方法,Circle方法
(1)Cls方法
前面已经介绍过的Cls方法将以背景色清除绘图区域。
(2)Pset方法
语法是: (x, y) , color
Pset方法将在object对象的(x, y)点用color参数决定的颜色画一个点。object参数和color参数是可以省略的。
(3)Line方法
Line方法用于画直线或方框。基本的语法是:object .Line (x1, y1) - (x2, y2) , color
如:Line (250,300) - (400,500)
画一条从(250,300)到(400,500)点的直线。
Line - (400,500)
从当前位置(由CurrentX,CurrentY决定)画到(400,500)
Line (150,250) - Step (150,50)
出发点是(150,250),终点是向X轴正向走150,向Y轴正向走50的点。
等同于:Line (150,250) - (300,300)
又如: Line (20,40) - (150,200) , , B
画一个左上角在(20,40),右下角在(150,200)的矩形,注意在color 参数省略时,逗号并不省略。
Line (20,40) - Step (50,70), RGB(255,0,0), BF
用红色从(20,40)到(70,110)画一个实心的矩形。
Line - (30,50), RGB(0,255,255), ABC
这个语句是错的,因为color 参数后面的参数只有 B,或 BF 两种形式。
(4)Cricle方法
Cricle方法用于画圆或椭圆,它的参数很多,语法是: (x,y), r, color, start, end,
文档下载后可复制编辑
经典文
aspect
(x,y) 参数是不能省略的参数,表示圆心的位置。r 是不能省略的参数,表示半径。color是可以省略的参数,表示画的颜色。start、end用于画弧,是用弧度度量的。
start、end为负值将在圆心至这个负值的点画出半径,这样就可以画出扇形了。如:
Circle (2000,2000) , 2000 , , -1.571 , -2.543
可画出扇形。这里的负号并没有更深的含义,仅仅表示多画了一条半径。
Circle (2000,2000) , 2000 , , -2.543 , -1.571
将画出右边那样的饼图。
五、关于绘图的属性
这些属性包括:CurrentX、CurrentY、DrawMode、DrawStyle、DrawWidth、Fillcolor、FillStyle、BackColor、ForeColor等属性。CurrentX、CurrentY已经介绍过了,就不再介绍了。
1,DrawMode属性
这个属性用来决定用什么逻辑关系将一个图案画到另一个图案上,DrawMode有16个值可供选择。可以用这些逻辑关系作出一些有趣的效果。
2,DrawStyle属性
这个属性决定了线的类型,有六种设置。
3,DrawWidth属性
这个属性决定了线的粗细。
4,BackColor、ForeColor属性
这两个属性分别决定了对象的背景色和前景色。
5,FillColor属性
这个属性确定填充在Shape控件或用Circle和Line方法建立的圆形或矩形里的颜色。
6,FillStyle属性
这个属性同Shape控件的FillStyle属性是一样的,指的是填充Shape或用Circle和Line方法建立的圆形或矩形里的模式。
六、在Visual Basic的绘图程序里使用Windows API里的绘图函数将使程序有更灵活的变化性,例如涉及到画笔和刷子的API函数就有十几个,而在Windows NT,Windows 98及未来的32位的Windows操作系统里将有更多的关于绘图的函数。
第六章 Visual Basic的数据库 及 预览打印
数据库主要使用Oracle、MSSQL、MYSQL、ACCESS等数据库工具创建并维护,使用文档下载后可复制编辑
经典文
OLE DB驱动(如:ADO就是其中一种,而OLE DB有两种一种是通过ODBC驱动访问数据库,一种是直接访问的OLE DB驱动)的ADODB、ADODC、DataEnvironment数据环境连接,通过MSHFlexGrid、TextBox、DataList、第三方ReportX表格等显示及编辑,通过直接写PictureBox和printer对象进行预览打印或通过Datareport、第三方Grid++ Report报表控件生成报表预览打印。
设置当前打印机有两种方法,一种是用本文第三章中遍历打印机对象设置默认打印机。一种是知道打印机索引号时直接Set printer = Printers(1)
由于内容很多,详见数据库相关、VB例程大全中数据库、Datareport、ADO相关内容。
§1 数据库的一些知识
数据库编程,无论是从Visual Basic中还是从其它更为成熟的数据库管理系统中去做,都不太容易。如果你热衷于此,你就会发现更多的专业书籍,仅仅介绍Visual Basic的数据库编程功能就将足够再开设一门讲座了。所以这里的介绍只是简单的介绍。(但我还得介绍,以便使这本书的覆盖面看起来更广一些)
开始,简单的数据库就象一张张表格一样,有行有列。后来一些管理数据库又有数学头脑的人,想出了一些好点子,于是数据库就发展成为一门计算机的分支的学科,到了现在数据库似乎拥有无限的玄机。一些公司靠数据库发了财,做学生的就有越来越多的人学习数据库的知识了。
但我们要知道的是数据库的建立无非是为了让人们更好的获得、使用、分析众多的信息(随着科学的发展,信息越来越多了)。通常的操作是用户有了好奇心,于是他问:“我想知道从有邮票以来,邮票的印刷数量排名前十名的都是什么?”计算机经过一系列艰难的筛选终于显示了结果。用户并不知道计算机是如何做到的,他只不过得到了方便的可以处理的数据(可能是放在表格里的)。
术语中把用户的问题叫做“查询”,把得到的结果叫做“表”或“视图”。在Visual Basic里解决这类问题的是Microsoft Access “Jet”机。查询关系数据库的常用语言叫做SQL(Structured Query Language)结构化查询语言。在Visual Basic的专业版和企业版中SQL是固有的。
§2 通过数据库控件(Data Control)处理Visual Basic的数据库
通过数据库控件(Data Control)处理的数据库类型里,最适合Visual Basic的就是Access类型的数据库,可以说Visual Basic的数据库和Access的数据库是完全相同的。如果使用的是Jet database engine(也就是Access类型)的数据库,则我们不必设置数据库控件的Connect属性,否则我们得设置Connect属性为所使用的数据库类型名。
数据库类型
Access
dBASE III
dBASE IV
Paradox 3.x
Paradox 4.x
文档下载后可复制编辑
设置Connect属性
";"
"dBASE III;"
"dBASE IV;"
"Paradox 3.x;"
"Paradox 4.x;"
设置路径
"drive:"
"drive:path"
"drive:path"
"drive:path"
"drive:path"
经典文
Btrieve "Btrieve;" "drive:"
FoxPro 2.0 "FoxPro 2.0;" "drive:path"
FoxPro 2.5 "FoxPro 2.5;" "drive:path"
FoxPro 2.6 "FoxPro 2.6;" "drive:path"
Excel 3.0 "Excel 3.0;" "drive:"
Excel 4.0 "Excel 4.0;" "drive:"
Excel 5.0 "Excel 5.0;" "drive:"
如果你找不到Microsoft Access的话,你就不得不用Visual Basic自带的Data Manager建立自己的Access数据库文件,然而在使用过后会发现Data Manager是十分不便利的,你可以在Visual Basic的Add-Ins菜单下找到Data Manager。
一、显示数据
例如用一个正文框和一个数据库控件读取一个MDB文件里一个表(Table)里的一个域(Field)里的信息,这个功能我们连一条代码也不用编,这正是Visual Basic在数据库方面的优势所在。
(1)画出一个数据库控件,按F4键打开Properties窗口。
(2)选择DatabaseName属性并单击设置框旁边的有省略号的那个钮,Visual Basic显示DatabaseName对话框,在这个对话框里选择你要的数据库文件。
(3)选择RecordSource属性,从下拉的列表里选择一个Table,这个数据库控件在运行时将指向这个Table。现在数据库控件的属性设置完了。
(4)画出一个正文框,按F4键打开Properties窗口。
(5)选择DataSource属性,从下拉列表里选择正文框对应的数据库控件。
(6)选择DataField属性,从下拉列表里选择正文框对应的Field。
所以,简单地说,画两个控件设置四个属性就可以读取一个数据库一个Table的一个Field了。在运行时,数据库控件的四个按钮可以用来移动记录。最左边的钮表示移动到第一条记录上,最右边的钮表示移动到最后一条记录上,另两个在内侧的钮分别表示每次向前或向后移动一条记录。
二、移动记录
除了使用数据库控件四个按钮来移动记录外,代码也可以实现这些功能,假设数据库控件的名字叫Data1。
功能
显示第一个记录
显示最后一个记录
显示下一个记录
显示上一个记录
代码
h
rst
st
xt
evious
三、删除记录
首先用上面的那些方法找到这个倒霉的记录,然后用下面的代码删除它。
第一行表明要删除这个记录,第二行表明让数据库文件知道这个不幸的决定。
四、增加记录
(“FieldName”) = “NewData”
文档下载后可复制编辑
经典文
第一行决定要增加一个新记录,第二行表示增加的内容,其中FieldName 是Field 的名称,NewData 是增加的内容,第三行把这个决定通知数据库文件,让它去做这件事。
五、找出指定的记录
假定在一个Table 里的Age 域里寻找记录值为18的记录,则:
功能
找出第一个匹配的记录
找出最后一个匹配的记录
找出下一个匹配的记录
找出上一个匹配的记录
代码
rst “ Age = ‘18’ ”
st “ Age = ‘18’ ”
xt “ Age = ‘18’ ”
evious “ Age = ‘18’ ”
六、从数据库域中取得数据
x = Data1. (“FieldName”).Value
这条指令将取出存在域FieldName 中的数据并赋给x。
七、改变数据库中域的数据
(“FieldName”).Value = NewValue
这段指令将NewValue 中的值代替FieldName 域中的当前值。
§3 使用数据库网格、数据库组合框、数据库列表框控件
现在我们先加入一个数据库控件(它暂时叫做Data1),我们为它设置好DatabaseName、RecordSource属性。
一、生成数据库网格
1,在工具箱中单击数据库网格控件,拖动它成为数据库网格;
2,按F4键;
3,单击DataSource属性,选择刚才建立的数据库控件Data1。
现在就可以显示你所选择的数据记录,不需要你编写任何代码。
二、修改显示在网格里的数据
你可以编辑在网格里的数据,因为它与数据库控件已经建立了联系。但你必须改变下面三种数据库网格的属性。
属性
AllowUpdate
AllowDelete
AllowAddNew
值
True
False
True
False
True
False
含义
可任意修改数据库网格中的数据
只显示数据,不能修改
可删除所有记录
不可删除记录
可增加新记录
不可增加新记录
三、数据库组合框
数据库组合框用来在数据库中输入新数据。数据库组合框可以显示储存在某一字段的数文档下载后可复制编辑
经典文
据内容,这一字段用户可以从中选择,也可以输入一新值。生成数据库组合框的方法:
1,在工具箱中单击数据库组合框控件,拖动它成为数据库组合框;
2,按F4键;
3,单击DataSource属性,选择你的数据库控件Data1;
4,单击RowSource属性,选择你的数据库控件Data1;
5,单击ListField属性,选择你想在数据库组合框中出现的字段;
6,单击DataField属性,选择你想在数据库组合框中作为默认选择而出现的字段。(通常和上一步一样)
四、数据库列表框
数据库列表框可以显示储存在数据库字段中的数据内容,虽然你可以看到数据,但你不能增加、删除和编辑它的内容。生成数据库列表框的方法:
1,在工具箱中单击数据库列表框控件,拖动它成为数据库列表框;
2,按F4键;
3,单击DataSource属性,选择你的数据库控件Data1;
4,单击RowSource属性,选择你的数据库控件Data1;
5,单击ListField属性,选择你想在数据库列表框中出现的字段;
6,单击DataField属性,选择你想在数据库列表框中高亮度显示的字段。(通常和上一步一样)
总之,数据库的建立是十分有用的,然而当你发行你的应用程序的时候,含有数据库控件的应用程序往往所需的发行文件比你想象的要大。
第七章 从文件中存取资料
读写文件主要相关语句:
1、Open pathname For mode As [#]filenumber [Len=reclength]
其中mode有Append、Binary、Input、Output或 Random 方式。未指定方式,则以 Random方式打开。如果 pathname 指定的文件不存在,那么,在用 Append、Binary、Output或 Random 方式打开文件时,可以建立这一文件。一个有效的文件号,范围在 1 到 511
之间。使用 FreeFile 函数可得到下一个可用的文件号。
2、读文件使用Line Input、Input #,(以上为文本方式)和Get(以上为二进制方式)。
3、写文件使用Print #、Write(以上为文本方式)和Put(以上为二进制方式)。
4、Close语句关闭文件
5、二进制方式下移动文件读/写位置使用Seek [#]filenumber, position
若在文件结尾之后进行 Seek 操作,则进行文件写入的操作会把文件扩大。如果试图对一个位置为负数或零的文件进行 Seek 操作,则会导致错误发生
6、LOF(文件号)取已打开的文件长度 FileLen(pathname)取未打开文件长度。
所有大于2G的文件必须分割读写,或使用API CreateFile和ReadFile以及SetFilePointerEx等来完成。
文档下载后可复制编辑
经典文
§1 文本文件,就象盒式磁带机
一、生成文本文件,使用下列命令:
Open "Filename" For Output As #FileNumber
其中Open告诉Visual Basic生成一个新文件;Filename是文件名(可以包含路径);For Output表明文本文件要接受程序输出的数据;FileNumber是文件号(1-511之间),Visual
Basic很傻,不知道文件名,它只认文件号,程序可能打开多个文件,如果你忘了该生成哪一号文件,你可以用FreeFile函数来得到一个文件号。如:
Dim Free As Integer
Free = FreeFile
Open "c:" For Output As #Free
则生成文件c:,Visual Basic替你找一个未用的文件号来代表它。
二、打开已有的文本文件
Visual Basic不仅仅想知道你要打开文件,它还想知道你打开文件后想做什么。
1, 如果你想从文本文件中读取数据给计算机,则使用下面命令:
Open "Filename" For Input As #FileNumber
如果文件不存在,Visual Basic就会对你的玩笑表示生气,它会发出叫声,然后指出你的错误。
2, 如果你想把数据写到文本文件中,则使用下面命令:
Open "Filename" For Output As #FileNumber
快看这个命令和生成新文件的命令一样!你可以这样理解:如果Visual Basic找不到那个文件,那么它就生成一个新的,如果它找到了,就打开文件并准备向里面写东西。但是如果程序员向已存在的文件内写数据,那么将会把原来的数据覆盖掉。这可要小心!
3, 如果你想把数据追加写到文本文件中,则使用下面命令:
Open "Filename" For Append As #FileNumber
这种操作也是准备写数据到文本文件中,不过Visual Basic将把数据追加到文件的末尾。
三、向文本文件中写数据
Print #FileNumber, "Text String"
将Text String字符串写入#FileNumber代表的文件中,写到什么地方取决于你打开文件的方式。For Output方式写到文件的开头,For Append方式写到文件的末尾。
四、关闭文件
不论什么时候生成了文本文件或打开了已有的文本文件都要在程序终止前关闭它。否则,可能会出现一些问题,甚至把文件内的数据搞坏。
关闭所有打开的文件,可使用命令:Close
关闭特定的文件,可使用命令:Close #FileNumber
五、从文本文件中读取数据
首先要用For Input方式打开文本文件,然后可将文件内容赋给一个字符串变量。由于在32位系统中,字符串的容量可达百兆,所以可以简单地把文件的内容赋给一个字符串变量。在16位的系统中读取大文件时,恐怕还要考虑内存的问题。
Dim FileContents As String
Open "Filename" For Input As #FileNumber
FileContents = Input(LOF(FileNumber), FileNumber)
Close #FileNumber
第三句就可以将文件的所有内容读入FileContents中,LOF函数用以去得文件的长度。
六、改变文本文件的内容,这是很烦琐的过程,需用下面的步骤。
文档下载后可复制编辑
经典文
1, 打开文件。
2, 取出文件内容赋给一个变量。
3, 关闭文件。
4, 编辑变量内容。
5, 打开文件。
6, 变量存入文件。
7, 关闭文件。
§2 随机存取文件,就象CD
文本文件就象盒式磁带机,因为如果你想读取后面的数据就得把前面的数据先放过去。随机存取文件就象CD,因为你可以立即跳至你想听的那一首歌。随机存取文件是以结构(Structure)来存取的,在文件里数据放在一个一个结构里,
每个结构里的数据是一样的。
一、使用结构(Structure)保存信息
写程序时,也许要生成几个变量来保存信息。如要跟踪如下的信息:姓名、地址、年龄。可以为各信息生成单独的变量,如:
Dim Name As String
Dim Address As String
Dim Age As Integer
然而,Visual Basic看不出这些信息的关联之处,对Visual Basic来说这些信息散乱地堆放在内存中的某个地方,没有很好地组织起来。为了解决这个问题,Visual Basic使用叫做结构(Structure)的东西将分散的东西组织起来。在别的一些语言里这被称为记录类型。如下面的例子:
Type PersonRecord
Name As String
Address As String
Age As Integer
End Type
1, 生成结构
只能在代码窗口的声明区生成结构。即在Object列表框中选择(General),在Proc列表框中选择(declarations)后再输入结构。在窗体的声明区生成结构须加上Private关键字。
2, 定义变量为结果类型
Dim VariableName As StructureName
如上面的PersonRecord结构,可用下面的代码定义:
Dim Employees As PersonRecord
3, 赋值给结构中的数据
例如赋值给上面定义的Employees变量:
= "Tom"
s = "1-107"
= 22
4, 取出结构中的数据
例如取出上面赋值过的Employees变量中的数据:
Who =
文档下载后可复制编辑
经典文
5, 随机存取文件里的结构
随机存取文件里有一个一个的结构,它们安静地象下面一样排列着:
Name Address Age Name Address Age
二、随机存取文件使用的重要变量
用一个变量代表你定义的结构,用一个变量跟踪现在的位置,再用一个变量表明最后一个结构的位置。
Dim Friends As FriendStructure
Dim Position As Long
Dim LastOne As Long
必须有一个变量来代表你定义的结构。
三、生成和打开随机存取文件
Open "Filename" For Random As #FileNumber Len = StructureLength
看起来和生成和打开文本文件的语句差不多,如果Visual Basic找不到文件的话则Visual Basic就生成一个新的文件,如果找到的话就把旧文件打开。For Random告诉Visual
Basic你想打开一个随机存取文件。#FileNumber还是文件号,你可以用FreeFile让Visual
Basic替你选一个没有用过的文件号。StructureLength是你的结构的长度,如果你不知道的话,可以用Len函数来获得。如:
Dim StructureLength As Long
Dim Friends As PersonRecord ‘PersonRecord是一个结构名称
StructureLength = Len(PersonRecord)
四、向随机存取文件写入数据
Put #FileNumber, Posetion, DataName
Put表明你想向由#FileNumber决定的随机存取文件里写入数据,Posetion是你想放置数据的位置。在随机存取文件里第一个结构放在位置1,第二个结构放在位置2,等等。需要知道的是:随机存取文件的写入和读出不需要以不同的方式打开文件,Open…For
Random打开文件后既可以写入又可以读出,比文本文件方便多了。
下面是向文件的末尾增加数据的代码的示例,LastOne变量用于表明文件已存在多少结构:
Dim StructureName As StructureType ‘StructureType是一个结构的名字
Dim SLength As Long
Dim LastOne As Long
SLength = Len(StructureName)
Open "FileName" For Random As #FileNumber Len = SLength
LastOne = LOF(FileNumber) Slength ‘LOF函数返回FileNumber文件号代表的文件的长度
LastOne = LastOne + 1
Put #FileNumber, LastOne, StructureName
Close #FileNumber
下面是替换文件中结构的代码的示例:
Dim StructureName As StructureType ‘StructureType是一个结构的名字
Dim SLength As Long
SLength = Len(StructureName)
Open "FileName" For Random As #FileNumber Len = SLength
Put #FileNumber, Position, StructureName ‘Position是你想替换的结构的位置
Close #FileNumber
文档下载后可复制编辑
经典文
五、从随机存取文件中读出数据
Dim GetData As StructureType ‘StructureType是一个结构的名字
Get #FileNumber, Position, GetData
这样就可以把#FileNumber代表的文件中的在Position位置上的数据读到GetData变量中。
六、关闭文件
一定要在程序终止前关闭打开的文件。否则,可能会出现一些问题,甚至把文件内的数据搞坏。
关闭所有打开的文件,可使用命令:Close
关闭特定的文件,可使用命令:Close #FileNumber
§3 二进制文件
二进制文件并不是一种新的文件类型,而是操作任何种类文件的一种方法。二进制文件技术允许程序员修改文件中的任意字节。所以说,二进制文件技术是一种强有力的工具,但是强有力的工具往往必须小心使用。使用二进制文件可以操作许多文件类型,甚至直接读写图形文件等等。具体的实现方法请参考其他详细介绍的书籍。
操作二进制文件
Dim b() as byte
Open "c:" For Binary As #111
Get #111,,b()
Open “c:” For Binary As #222
Put #222,,b()
Close #111 : Close #222
第八章 发行应用程序
§1 把你的应用程序编译成扩展名为EXE可执行文件
终于,你把自己的应用程序编制完成了,而且你已经极其耐心地测试了你的程序或者你的程序已经通过质量部门的检测,于是要把它散发给用户去使用。为了散发程序,你必须把程序编译为可执行的文件(通常以EXE为扩展名)。下面是把程序编译为可执行文件的步骤:
1, 保存文件;
2, 从File菜单选择Make EXE File项,弹出Make EXE File对话框;
3, 按Options按钮,弹出EXE Options对话框;
4, 做你需要的修改后,按OK按钮;
5, 在Make EXE File对话框填入可执行文件名后按OK按钮。
这样你就生成了可执行文件。现在来解释一下EXE Options对话框中各项的含义。
文档下载后可复制编辑
本文发布于:2024-02-08 05:42:05,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170734212566703.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |