vb函数说明及使用方法

2024-07-24

vb函数说明及使用方法(精选4篇)

vb函数说明及使用方法 篇1

在 VB 中使用API函数 (之三) Any 有些消息的参数声明为Any.这表示该参数是一种可变的类型(你可以以整型,字符串,用户自定义或其他的类型来传递). 这有一个这样的例子: Public Declare Function SendMessage Lib “User32” Alias “SendMessageA” ByVal Hwnd as

在VB中使用API函数 (之三)

Any

有些消息的参数声明为Any.这表示该参数是一种可变的类型(你可以以整型,字符串,用户自定义或其他的类型来传递).

这有一个这样的例子:

Public Declare Function SendMessage Lib “User32” Alias “SendMessageA” ByVal Hwnd as Long, ByVal wMsg as Long, ByVal wParam as Long, lParam as Any) as Long

lParam 声明为Any并按引用(ByRef)传递.

这里是在这个函数中如果lParam是不同类型的值时应遵循的规则:

如果该值是 传递形式

numeric ByVal(as Long,or as Any)

Null ByVal(as Long,or as Any)

String ByRef(as String,or as Any)

Type ByRef(as Any)

array of Type ByRef(as Any)

如果你的函数声明同上面的一个而且你想传递一个Long型数,你应该这样写:

Call SendMessage(Me.Hwnd,WM_XXXX,0&,ByVal LongValue)

注意尽管头三个参数也是数值,但它们前边并没有ByVal.这是因为在函数声明中它们已经被声明为按值传递(ByVal).第四个参数,由于是按引用传递(ByRef)(VB并不知道你要传递参数的类型),因此你必须加上ByVal 你可以使用别名技术来传递不同类型的参数:

Public Declare Function SendMessageLng Lib “User32” Alias “SendMessageA”(ByVal Hwnd as Long, ByVal wMsg as Long, ByVal wParam as Long, ByVal lParam as Long) as Long

或:

Public Declare Function SendMessageStr Lib “User32” Alias “SendMessageA”(ByVal Hwnd as Long, ByVal wMsg as Long, ByVal wParam as Long, lParam as String) as Long

注意API参数类型本身是不会改变的.例子中的第四个参数总是一个4字节的长型数.当你按值(ByVal)传递一个Long或 Null时,该4字节长的数值就直接传递给函数.如果你传递一个String或其他的什么,你是按引用(ByRef)传递,VB传递的实际上是变量的地址,也是4个字节.

参数传递

你已经知道如何传递参数了,只需把他放到调用的函数中即刻.然而,当你使用API函数时,在传递参数是有一些你应该注意的 细节. ByVal还是ByRef. 通常情况下,你不用为此担心,VB的API浏览器已经为你做好了一切,只需你输入数值它就会照所声明的方式传递.总的来说,ByVal是把实际的数值传递给函数,而ByRef是把地址传给函数.唯一的麻烦就是 Any 类型. 把字符串传递给API函数也并不难.API函数需要的是字符串首字符的地址,然后读取该地址直到遇到一个Null字符.听起来很糟糕,但只是VB处理字符串的实际方法.你唯一要记住的是一定要按引用传递(ByRef)字符串 当你想得到所需的函数返回值信息时,情况有稍微的一点不同.

这里是GetComputerName函数的声明:

Declare Function GetComputerName Lib “kernel32” Alias “GetComputerNameA”(ByVal lpBuffer As String, nSize As Long) As Long

第一个参数是一个指向字符串的远程指针,第二个参数是字符串的长度.

如果你只是简单的声明一个字符串类型的变量并把它传递给函数,就会出现错误.因此,你首先需要初始化字符串.这里是如何得到计算机名字的例子: Dim Buffer As String

Buffer = Space(255)

Ret& = GetComputerName(Buffer, Len(Buffer))

if Ret& > 0 then CompName$ = Left(Buffer, Ret&)

在这里,待传递的字符串被初始化为有255个空格的字符串.我们把它传递给函数同时还有它的长度.如果出错则返回值为0.

CompName中将保存计算机名. 有些函数也需要传递数组,这里是一个例子:

Declare Function SetSysColors Lib “user32” Alias “SetSysColors” (ByVal nChanges As Long, lpSysColor As Long, lpColorValues As Long) As Long

最后两个参数是Long型数组.为了传递数组,你只需传递它的第一个元素.下面是示例代码:

Const COLOR_ACTIVECAPTION = 2

Const COLOR_INACTIVECAPTION = 3

Const COLOR_CAPTIONTEXT = 9

Const COLOR_INACTIVECAPTIONTEXT = 19

Dim SysColor(3) As Long

Dim ColorValues(3) As Long

Dim Ret& SysColor(0) = COLOR_ACTIVECAPTION

SysColor(1) = COLOR_INACTIVECAPTION

SysColor(2) = COLOR_CAPTIONTEXT

SysColor(3) = COLOR_INACTIVECAPTIONTEXT

ColorValues(0) = RGB(58, 158, 58) 注释:深绿

ColorValues(1) = RGB(93, 193, 93) 注释:浅绿

ColorValues(2) = 0 注释:黑色

ColorValues(3) = RGB(126, 126, 126) 注释:灰色

Ret& = SetSysColors(4&, SysColor(0), ColorValues(0))

该程序将改变所有活动和非活动窗口的标题栏背景和文本的颜色.

原文转自:www.ltesting.net

vb函数说明及使用方法 篇2

与任何高级语言一样,Visual Basic提供了许多内建函数,帮助程序设计者完成特定任务[1]。这些内建函数又称为标准函数,是系统为实现特定功能而设置的,其功能是固定的,不能改变。内部函数的使用极大地方便了程序设计者,但不能满足程序设计所有要求。Visual Basic允许自定义函数,但如自定义函数使用不当将产生函数副作用。函数副作用的出现常常歪曲了程序原来的意图,并使程序验证工作复杂化[2]。

1 函数的副作用及相关概念

1.1 函数的副作用

函数的副作用是指在函数内对全局变量或其形式参数进行赋值,在得到函数结果的同时更改了其它变量的值,这可能影响表达式求值,使程序产生其它错误[2]。举例分析如下:

假设存在一个全局变量a,变量a的值在函数fun1中被修改。

另有一段程序,计算x的值,在此期间调用了函数fun1:

实际的运行结果是:00

第一行和第二行第二句只是两个相乘因子次序的颠倒,按乘法交换律,此两句是等价的,但输出结果却全然不同。其原因在于函数fun1中对全局变量a的修改产生了副作用,也导致表达式含义不清。

而下面的函数fun2,则改变了形式参数的值,将影响形式参数对应的实际参数值。

函数fun2的功能是计算整数n各位数码之和。如果存在以下调用语句:

执行完以上两行语句后,m值将变成0,再使用这个“正整数m”,就变得无意义。究其原因,是由于在函数fun2中改变了形式参数n的值,而实际参数与形式参数又是引用传递,这个改变影响到实际参数m。

从以上两个示例可以看出,函数副作用会给程序设计带来不必要的麻烦,错误难以查找。对全局变量的修改增加了程序调用间的耦合程度[3,4,5];而无意地修改函数形式参数的值(这个值还能返回给对应的实际参数),将会产生意想不到的数据错误及数据逻辑。一般希望在函数值上带回运算结果,而不希望改变形式参数的值。

函数的副作用,不仅降低程序的可读性,而且也使程序的可测试性降低,严重影响程序质量。研究函数副作用消除具有重要意义。

1.2 与函数副作用相关的概念

(1)参数按值传递和按地址传递。参数传递指主调过程的实际参数传递给被调过程的形式参数,参数传递有按值传递和按地址传递两种方式。按值传递是一种单向型传递,实际参数和形式参数各分配内存单元,改变形式参数的值不会影响对应的实际参数。按地址传递则是一种双向型传递方式,实际参数和形式参数共用一个内存单元,对形式参数的修改就是对实际参数的修改。

(2)纯函数与非纯函数。如果一个函数与外界交换数据只通过参数和返回值,称这样的函数为纯函数。纯函数要求从函数外部接受的所有输入信息都通过参数传递到该函数内部、函数输出到函数外部的所有信息都通过返回值传递到该函数外部。

纯函数具有两个有用的特性:1没有任何副作用,不会更改函数以外的任何变量或任何类型的数据;2具有一致性,在提供一组输入数据的情况下,始终返回相同的输出值。

纯函数不更改全局变量、不改变传入的任何参数,纯函数具有明确的返回值,其函数功能稳定。如果一个函数通过参数和返回值以外的渠道和外界进行数据交换(比如读写全局变量),称这样的函数为非纯函数。假如一个参数通过引用调用(即按地址传递参数),任何形式参数的变化都将改变实际参数(函数外部的输入参数值)的值,这样的函数也是非纯函数。非纯函数会产生副作用,给函数带来不稳定性。

(3)引用透明性。如果程序中两个相同值的表达式能在该程序任何地方互相替换,而不影响程序动作,这种性质称为引用透明性。引用透明性表达出了以下含义,即表达式的意义只取决于其子表达式而不是计算顺序。纯函数具有引用透明性,只要使用相同参数值,不论何时调用,总是得到相同的结果。引用透明性提高了程序可读性和可测试性,有助于验证正确性、简化算法,甚至有助于找出优化方法。

有以下两个赋值语句:

按照表达式的运算,计算结果相等。如果函数f()没有副作用,那么r1和r2是等价的。如果函数f()有副作用,比如函数的执行与返回改变了a的值,那么r1和r2不相等。因此,副作用违背了引用透明性。

2 函数副作用消除

2.1 函数副作用消除方法

要保证函数无副作用,程序设计者应遵守一定原则,即:1函数入口使用参数传入数据,而且不修改参数值;2函数体内不修改函数外变量,如全局变量;3运算结果通过函数值返回给外部(出口)。

在Visual Basic中,为了消除函数副作用,应遵循以下原则:1形式参数的传递方式定义为传值方式,即使在函数体内修改了形式参数的值也不会影响实际参数的值;2如果形式参数的传递方式为按地址传递方式,不能修改形式参数的值;3在调用过程中,将实际参数表达式化,即用小括号将实际参数括起来,例如实际参数是a,用小括号将其括起来变成(a);4在函数体内不改变全局变量、模块变量的值。

按照纯函数要求,将fun2改写成以下的fun3:

在fun3中,在函数中增加了一个局部变量n1,函数中只对n1进行操作,从而保证不改变形式参数n的值。

也可以将将fun2改写成以下的fun4:

在fun4中,形式参数n定义为按值传递方式,即使在函数中修改了n的值,n的值不会传递给对应的实际参数。

2.2 示例分析

文本用以下三个示例说明纯函数的设计。

示例1:判断任何一个正整数是否是完全数。

完全数是指它的所有真因子(即除了自身以外的约数)之和等于本身,如6=1+2+3,28=1+2+4+7+14。

对于任意一个自然数number,其真因子只能出现在1~number2之间,所以用number分别除以1~number2之间的数,把那些能整除的数累加起来。

在函数perfect中,形式参数number是按值传递方式,函数中没改变它的值(即使改变了值,也不会返回给对应的实际参数),除了函数值返回外,没有改变函数外的任何数据。

示例2:设计一个函数digital(n,k),它返回正整数n从右边开始第k个数字的值,若n的位数小于k,则返回0。例如,digital(12345,2)=4,digital(1234,5)=0。

分离出正整数n的各位数字,并使n每次缩小10倍,当分离出的位数等于k时结束。

在函数digital中,尽管形式参数n、k采用按地址传递方式,但没有改变值,函数返回后对应的实际参数不会被更改。

如果在调用函数digital时,将实际参数用小括号括起来,这时实际参数和形式参数就完全按值进行传递:

实际参数a、b分别对应形式参数n和k,(a)和(b)已经变成表达式啦。

示例3:判断任何一个正整数是否是质数。

根据质数的定义,一个数x若是质数,则它只能被1和本身整除。根据质数的定义,2~x-1之间不存在一个被x整除的数。如果2~x-1之间有一个数被x整除,则x不是质数。

在函数prime中,形式参数x是按值传递方式,而且也没有改变x的值,除了函数值返回外,没有改变函数外的任何数据。

3 结语

Visual Basic允许程序设计者自定义函数,这样不仅扩展了函数的功能,而且方便程序设计者,但在设计函数时一定要遵循相关原则,否则产生的函数副作用将会对程序造成难以意料的错误,严重影响程序的可读性和可测试性。

参考文献

[1]王建忠,张萍.Visual Basic程序设计(第二版)[M].北京:科学出版社,2015.

[2]薛伟,胡进,高洁平.TURBO PASCAL程序设计及其应用[M].合肥:中国科学科学大学出版社,1994.

[3]张海藩,编著.软件工程导论(第6版)[M].北京:清华大学出版社,2013.

[4]何明瑞.VB语言中循环语句分析与应用[J].软件导刊,2014,13(7):44-45.

vb函数说明及使用方法 篇3

摘 要:本文介绍了在VB中利用ADO的AppendChunk方法在数据库中存取BLOB数据的具体方法,并给出实现图像存取显示的完整工作过程,为多媒体信息管理系统的开发提供了有效的解决方案。

关键词:VB 数据库 ADO BLOB图像存取

中图分类号:TP311.134.3 文献标识码:B 文章编号:1673-8454(2009)01-0082-05

一、引言

在使用数据库的过程中,除了保存大量的文字信息以外,我们经常要存储一些较大的二进制数据对象,像图形、长文本、多媒体(视频、音频文件)等,例如:一个学生管理系统就需要对每个人的照片进行保存,以便对每个人的信息进行处理。这些数据被称之为二进制大对象BLOB(Binary Large Object),亦称为大对象类型数据。[1]二进制大对象、OLE对象可以通过BLOB类型存入数据库,如果文本对象过大,超出了文本类型的规定长度,则必须用BLOB字段进行存储。[2] 将BLOB数据存储在数据库的相应字段中,其存取的方式与普通数据有所区别。我们在经常使用的编程环境中并不能直接支持BLOB字段,因此需要调用相应的函数完成BLOB数据的使用。本文介绍在VB中,如何通过ADO的AppendChunk方法,将BLOB数据的写入操作。

二、二进制大对象的存取方法

可以使用ADO中的AppendChunk方法来存取BLOB数据。AppendChunk包含在Field对象中,语法如下:[3]

ADO对象.Recordset.Fields(字段). AppendChunkData

其中,参数Data包含追加到数据库中的BLOB数据。

通常的处理步骤如下:

(1)用二进制方式打开BLOB数据文件;

(2)定义一个字节类型的数组,数组大小为文件长度;

(3)将文件保存到数组;

(4)使用ADO对象的AppendChunk方法写入数据库。

三、二进制大对象处理方法的具体实现

在得到图片数据并将其保存到数据库中时,要使用ADO的AppendChunk方法。[4]程序界面如图1所示,单击“图片输入”按钮,打开通用对话框,选择指定的图形文件到数据库;在浏览记录时可以显示图片;单击“图片删除”按钮,删除已加载的图片。

首先,在Access中创建一个数据库文件Student.mdb,在该库中建立一个表(表名为jbqk),字段如表1所示。

接着,在VB中创建一个工程,在form1窗体上添加ADO控件、命令按钮、图像控件、通用对话框、文本框和标签控件。将Adodc1控件连接到数据库Student.mdb,指定记录源为“jbqk”表。

所用的控件及属性设置见表2。

具体的窗口代码如下:

(1)为数据库添加图片

Private Sub Command1_Click()

Dim a()As Byte ′定义一个动态数组为字节类型

CommonDialog1.ShowOpen ′显示打开对话框

Open CommonDialog1.FileName For Binary As #1′以二进制读方式打开源文件

fl = LOF(1)′获得文件长度

ReDim a(fl)′设置数组大小为文件长度

Get #1, , a ′读文件到数组中

Adodc1.Recordset.Fields("照片").AppendChunka

Close #1

Image1.Picture = LoadPicture(CommonDialog1.FileName)′更新Image1内的图形

End Sub

(2)数据库中图片数据的删除

Private Sub Command 2_Click()'单击命令按钮2实现数据库中图片的删除

Adodc1.Recordset.Fields("照片").AppendChunk""

Adodc1.Recordset.Update

Image1.Picture = LoadPicture("")

End Sub

四、结束语

Visual Basic 6.0为存取BLOB数据提供了灵活的接口。本文所阐述的方法不但适用于图像文件,同样适用于其它类型的文件。数据库中BLOB数据的处理方法很多,不同的程序设计语言针对不同的DBMS,其处理方法都有差异。图片的出现为Visual Basic程序增添了美丽的情调,使程序更富魅力、更具专业。

参考文献:

[1]魏文胜.在VB中存取SQL Server 2000二进制数据的方法[J].电脑知识与技术(学术交流),2006(20):42-43.

[2]龚沛曾,杨志强,陆慰民. Visual Basic程序设计教程(第三版)[M].北京:高等教育出版社,2007.

[3]郑阿奇.Visual Basic实用教程(第二版)[M].北京:电子工业出版社,2003.

信息技术教案-VB函数 篇4

信息技术教案-VB函数

第三节 VB函数 王锋娟 在VB程序中,函数是一种特定的运算。能完成特定的操作。例如:用来求一个数的平方根、正弦值等。由于这些运算或操作在程序中会经常使用到,为此,VB提供了大量的内部函数供我们在编程时调用。VB内部函数按功能可分为 数学函数:数学函数用来完成一些基本的数学计算,其中一些函数的名称与数学中相应函数的名称相同。 转换函数:用来完成转换工作。例如,字符转换成数值,十进进制转换成十六进制数等。 字符串函数:用来完成对字符串的.操作与处理。如字符串的长度、除去字符串中的空格以及截取字符串等。 日期、时间函数:用于操作日期与时间,例如获得当前的系统时间,求出某一天是星期几等。 部分Visual Basic函数 类别 函数 功能 举例 结果 数学 Abs(x) Int(x) Fix(x) Sin(x) Cos(x) Spr(x) 返回参数的绝对值 返回参数的整数部分 返回参数的整数部分 返回参数的正弦值 返回参数的余弦值 返回参数的平方根 Abs(-6.5) Int(8.4) Fix(8.2) Sin(0) Cos(0) Spr(25) 6.5 8 8 0 1 5 转换 Hex(x) Val(x) Str(x) Lcase(x) Ucase(x) 将十进制数转换成十六进制 将数字字符串转换成数值 将数值转换为字符串 将大写字母转换成小写字母 将小写字母转换成大写字母 Hex(100) Val(“123.4ab56”) Str(123.4) Lcase(“HCQ”) Ucase(“hcq”) 64 123.4 “123.4” “hcq” “HCQ” 字符串 Left(s , n) Right(s , n) Len(s) Ltrim(s) Rtrim(s) Trim(s) Space(n) 返回字符串左边的n个字符 返回字符串右边的n个字符 返回字符串的长度 去掉字符串左边的空格 去掉字符串右边的空格 去掉字符串两边的空格 产生n个空格的字符串 Left(“morning , 4”) Right(“morning,2”) Len(“ABCDEF”) Ltrim(“ ABC”) Rtrim(“ABC ”) Trim(“ ABC “) Space(3) “ning” “morn” 6 “ABC” “ABC” “ABC” “ ” 日期 时间 Time Timer Date Now Day Month Year Weekday 返回当前的系统时间 返回从午夜开始到现在经过的秒数 返回当前的系统日期 返回当前的系统日期与时间 返回日期代号(1~31) 返回月份(1~12) 返回年份 返回表示星期的代号,星期日为1; 星期一为“2”……星期六为“7” Time Timer Date Now Day(“,9,7”) Month(“2002,9,7”) Year(“2002,9,7”) Weekday(“2002,9,7”) 7 9 2002-9-7 7 Loadpicture RGB( ) 为VB图片框或图像框装载图片 Loadpicture( ) Rgb(red, green, blue) 随机 Rnd(x) 返回一个随机数值 Rnd 0~1之间的某数 注: (1)Int 函数和Fix函数的不同之处在于,如果参数x为负数,则Int返回小于或等于该参数的第一个负整数,而Fix 则会返回大于或等于参数的第一个负整数。 例如:Int(-8.4)=-9而Fix (-8.4)=-8 (2)Val 函数在执行转换时,在它不能识别为数字的第一个字符上,停止读入字符串。 函数编程练习: 1、 在窗体上建立3个文本框和一个命令按钮,各对象的设置如下表: 对象 属性 值 窗体 文本框1 文本框2 文本框3 按钮1 Caption text text text caption 字符转换函数 text1 text2 text3 确定 事件:单击“确定”时,text1中显示“Good Morning Students” text2中显示小写 text3中显示大写 2、 改变以上按钮的单击事件过程代码,获得当前时间、日期、星期

上一篇:爱唠叨的奶奶作文700字下一篇:成为企业的核心员工专题