1、第 4 章 VBScript 的函数我们已经对 VBScript 的基本知识有所了解,本章我们将进一步学习 VBScript 的各类函数。由于学习抽象的函数知识近似于学习理论知识,会让人感到十分的枯燥和乏味,所以在这一章中,我们先从总体上对 VBScript 的函数作一综合介绍,然后再通过一些典型的例子,来详细讲解较常用到的 VBScript 函数。4.1 VBScript 函数综述在 VBScript 中,函数包含在 Function 和 End Function 之间,函数和过程有许多相同之处,同样可以获取一定的参数,执行一系列的语句,并完成一定的操作,但和过程不同之处在于,函数会有一个返
2、回值,其语法如下所示:Public|Private Function name (argulist)statementsname = expressionEnd Function和过程一样,使用 Private 和 Public 可以表示函数是是公有的还是私有的,缺省情况下,函数默认是公有的。name 是函数的名称,其命名需要遵循 VBScript 关于变量命名的规定。argulist 是函数的参数列表,多个参数之间通过逗号进行分隔,参数传递有两种传递方式:ByVal 进行值传递、ByRef 进行地址传递。statements 是函数内执行的脚本。name=expression 语句则将 ex
3、pression 的结果返回给调用该函数的语句,其中返回的结果数据类型是 Variant 类型。如果需要在函数执行的过程中,满足某种条件后直接退出函数的处理逻辑,返回主程序,应该使用 Exit Function 语句。例如,我们可以编写函数完成将温度的华氏度换算为摄氏度,如下所示:然后我们可以调用这个函数进行获取华氏温度相应的摄氏温度,在下面的语句,我们将华氏 100 度进行转换:VBScript 提供的函数通常称为内部函数,以与用户定义的函数即外部函数相区分。这些内部函数可以完成数学运算、数据子类型的转换、数据格式化等操作。我们可以在脚本中直接调用这些函数完成数据处理而不需要任何预先的声明。
4、下面,我们就对这些函数综合起来进行简要的介绍。4.1.1 数据类型判断VBScript 中只有一种数据类型 Variant,数据类型判断函数可以判断变量的子类型,运用这些函数,我们能够根据变量的子类型,对变量进行合适的处理:1. IsArray:IsArray 函数判断变量是否是一个数组,如果是数组,则返回 True,否则返回 False。2. IsDate:IsDate 函数判断表达式是否能够转换为日期,如果能够转换,则返回True,否则返回 False。例如,如果变量 Today = “12-30-2000”,那么使用 IsDate(Today)的返回值为 True。3. IsEmpty:
5、IsEmpty 函数用于指明变量是否已经被初始化,在声明变量之后,变量将自动被赋值为 Empty,这时候使用 IsEmpty 判断,返回值为 True;当变量经过赋值操作之后,调用 IsEmpty 函数,则返回 False。4. IsNull:IsNull 函数可以判断变量中存储的是否为 Null,如果为 Null,返回值为True,否则返回值为 False。需要说明的是,Null 并不是 0,也不是空字符串,而是代表无效数据。5. IsNumeric: IsNumeric 函数指明表达式是否能够被转换为数字表达式,如果转换能成功,则返回 True,否则返回 False。例如,如果字符串 Nu
6、m = “31.24”,那么IsNumeric(Num)的返回值为 True。6. IsObject:IsObject 函数可以判断变量是否是 ActiveX 对象,如是 ActiveX 对象则返回 True,否则返回 False。7. TypeName 和 VarType:TypeName 和 VarType 函数都能够返回变量的子类型,不同的是,TypeName 返回的是一个指示变量子类型的字符串,而 VarType 返回的是指示变量子类型的数字。4.1.2 格式化函数VBScript 中引入了格式化函数,这些函数可以对货币类型数据、时间类型数据、数字和百分比数值等进行格式转换和处理,这些
7、处理是基于控制面板中的区域设置属性完成的。1. FormatCurrency:FormatCurrency 函数返回格式化后的货币类型数值,货币符号的设置基于控制面板的区域属性设置中。其语法如下所示:formatCurrency(expression,NumDigitsAfterDecimal,IncludeLeadingDigit,UseParensForNVBScript 与 JScript 实例教程66egativeNumbers,GroupDigits)其中,expression 代表将被格式化的表达式,NumDigitsAfterDecimal 代表的是小数点后数字位数,Includ
8、eLeadingDigit 指示是否将显示数字前面的零,UseParensForNegativeNumbers 指示是否使用括号代替负号, GroupDigits 指示是否使用区域设置中指定的数字分组符号将数字分组。其信息来源是控制面板中区域设置属性的货币部分,其中,后面三个参数可以有以下取值:(1) TristateTrue,代表选项值为 True;(2) TristateFalse,代表选项值为 False;(3) TristateUseDefault,代表根据控制面板中的区域设置来进行处理。例如,我们可以将以下货币-12345.78 进行格式化显示:FormatCurrency(-123
9、45.78, 1, TristateTrue, TristateTrue, TristateTrue)函数的可能返回值是¥12345.8。2. FormatDateTime:运用 FormatDateTime 函数,可以用 5 种日期/ 时间格式来显示一个日期表达式,其语法如下所示:FormatDateTime(Date ,NamedFormat)其中,Date 是将要格式化的日期表达式,NamedFormat 是指示日期 /时间格式的值,它可以有以下 5 种取值:(1) vbGeneralDate,如果表达式中只有日期部分,则显示为短日期格式,如果表达式中只有时间部分,则显示为长时间格式,如
10、果两部分都存在,则全部显示;(2) vbLongDate,根据区域设置属性以长日期格式显示日期;(3) vbShortDate,根据区域设置属性以短日期格式显示日期;(4) vbLongTime,根据区域设置属性以长时间格式显示时间;(5) vbShortTime,根据区域设置属性以短时间格式显示时间。例如,我们可以在以下脚本中将 2000 年 12 月 20 日以长日期格式显示:FormatDateTime(“2000/12/20”, vbLongDate)不过,上述语句在不同的计算机上可能运行会得出不同的结果,因为在控制面板中的区域设置属性可能会各不相同。如果长日期样式设置为 yyyy年M
11、 月d日,那么,上述语句返回的结果将是 2000 年 12 月 20 日。3. FormatNumber:FormatNumber 函数可以用于一个数字表达式的自定义显示,其语法如下所示:FormatNumber(expression,NumDigitsAfterDecimal,IncludeLeadingDigit,UseParensForNegativeNumbers,GroupDigits)其中的参数和 FormatCurrency 完全相同,不同的是它所有的信息均来自控制面板中区域设置属性的数字部分。例如,FormatNumber(-12.3456, 2, TristateFalse,
12、 TristateFalse, TristateFalse)的可能反馈结果是12.35。4. FormatPercent:FormatPercent 函数用于返回一个表达式的百分比数值,其语法如下所示:FormatPercent(expression,NumDigitsAfterDecimal,IncludeLeadingDigit,UseParensForNe第 4 章 VBScript 的函数 67gativeNumbers,GroupDigits)其中参数和 FormatCurrency 完全相同,不同之处在于它的信息均来自控制面板中区域设置属性的数字部分。例如,FormatPercen
13、t(-12.3456, 2, TristateFalse, TristateFalse, TristateFalse)的可能反馈结果是-1234.56% 。4.1.3 数据类型转换函数运用 VBScript 的数据类型转换函数,我们可以方便地把数据进行子类型的转换,可以将字符串转换为日期,也可以将数字转换为字符串等等。1. CBool:CBool 函数将表达式转换为布尔子类型的数据。2. CByte:CByte 函数将表达式转换为字节子类型的数据,例如,CByte(“12”)=12。3. CCur:CCur 函数将表达式转换为货币子类型的数据。4. CDate:CDate 函数将表达式转换为日
14、期子类型的数据。5. CDbl:CDbl 函数将表达式转换为双精度浮点子类型的数据。6. CInt:CInt 函数将表达式转换为整数类型的数据。7. CSng:CSng 函数将表达式转换为单精度浮点子类型的数据。8. CStr:CStr 函数将表达式转换为字符串子类型的数据。例如,CStr(12.34)=“12.34”。9. Hex:Hex 函数将数值转换为表示十六进制值的字符串,例如,Hex(31)=“1F”。10. Oct:Oct 函数将数值转换为表示八进制值的字符串,例如,Oct(31)=“37”。当然,在上述类型转换中并不能无限制地进行类型转换,比如说,CDate 类型转换的表达式必须
15、是能够被识别为日期子类型的表达式,比如说,如果执行 CDate(“nothing”)函数,那么将会返回类型不匹配的错误。4.1.4 数学运算函数VBScript 还提供了一定的数学运算函数,可以完成简单的数学运算功能,当然,由于VBScript 的主要应用并不在数学运算中,所以其数学运算功能并不是十分强大,不过灵活运用这些函数也能够极大地方便我们脚本开发:1. Atn:Atn 函数用于计算数值的反正切值。2. Cos:Cos 函数用于计算角度的余弦值。3. Sin:Sin 函数用于计算角度的正弦值。4. Tan:Tan 函数用于计算角度的正切值,在这些计算角度的函数中,角度的表达形式应该是弧度
16、,例如,计算 30的正切值,我们需要使用如下方式:Tan(30*3.1415927/180)。5. Exp:Exp 函数用于计算自然指数的幂次。6. Log:Log 函数用于计算数值的自然对数。7. Sqr:Sqr 函数用于计算数值的平方根。8. Randomize:Randomize 函数用于初始化随机数生成器。在 VBScript 中,生成的随VBScript 与 JScript 实例教程68机数并不是真正意义上的随机数,而是伪随机序列,在生成第一个随机数的时候,它需要一个数值作为种子值来生成伪随机序列。Randomize 函数有一个参数 number,Randomize函数执行后可以初始
17、化 Rnd 函数的随机数生成器,并以 number 作为其种子值,如果函数省略 number,则缺省使用系统计时器返回的值作为种子值。注意,如果不使用 Randomize 函数,则第一次调用 Rnd 函数的时候,它将使用相同的数字作为种子值,这样就不能起到生成随机数的作用了。9. Rnd:Rnd 函数用于生成一个随机数,这个随机数是一个小于 1 但大于等于 0 的小数。Rnd 函数也有一个参数 number,如果 number 大于 0,则返回伪随机序列中的下一个数值,如果 number 小于 0,则每次都会返回以 number 为种子值的随机数,如果 number 等于 0,则返回最近生成的
18、数。例如,如果我们需要生成一个 5 到 10 之间的随机数,我们可以采用如下公式:Int(10 5 + 1) * Rnd + 5)10. Abs:Abs 返回数值表达式的绝对值。11. Int:Int 函数返回数值表达式的整数部分。12. Fix:Fix 函数同样返回数值表达式的整数部分,如果数值表达式结果大于等于 0,则 Int 函数和 Fix 函数并没有什么区别,同样返回其整数部分,如果数值表达式结果小于0,则 Int 函数返回的是小于或等于这个数值的第一个负整数,而 Fix 函数返回的是大于或等于这个数值的第一个负整数,例如,Int(-2.4)=-3 ,而 Fix(-2.4)=-2。13
19、. Round:Round 函数对数值表达式进行四舍五入取整。14. Sgn:Sgn 函数返回代表数值表达式的整数,如果数值表达式的值大于 0,则返回1,如果等于 0,则返回 0,如果小于 0,则返回-1。4.1.4 日期时间处理函数VBScript 的日期时间处理函数能够获取当前系统的日期和时间,也能够对日期和时间中的各个部分单独取出进行处理:1. Date:Date 函数返回当前系统日期。2. Time:Time 函数返回当前系统时间。3. DateAdd:DateAdd 函数能够将给定日期添加时间间隔然后返回,其语法如下所示:DateAdd(interval, number, date)
20、其中,interval 是表示时间间隔部分的字符串,其取值可以是:“yyyy”,代表年份;“q”,代表季度;“m”,代表月份; “y”,代表一年的日数;“d” ,代表日;“w” ,代表一周的日数;“ww”,代表周;“h” ,代表小时;“n”,代表分钟; “s”,代表秒。number 是需要添加的时间间隔,date 则是给定的日期。例如,我们可以获取当前日期的 100 天后的日期:DateAdd(“y”, 100, Date)4. DateDiff:DateDiff 函数能够返回两个给定日期之间的差异,其语法如下所示:DateDiff(interval, date1, date2, firstd
21、ayofweek, firstweekofyear)第 4 章 VBScript 的函数 69其中,interval 是表示时间间隔部分的字符串,取值和 DateAdd 函数一样,date1 和date2 分别代表开始日期和结束日期,firstdayofweek 可以指定哪一天是一个星期的开始,其取值如表 4.1 所示:表 4.1 firstdayofweek 参数取值常数 取值 说明vbUseSystem 0 根据区域属性设置而定vbSunday 1 星期天(默认设置)vbMonday 2 星期一vbTuesday 3 星期二vbWednesday 4 星期三vbThursday 5 星期四
22、vbFriday 6 星期五vbSaturday 7 星期六firstweekofyear 可以指定一年中第一周的情况,其取值如表 4.2 所示:表 4.2 firstweekofyear 参数取值常数 取值 说明vbUseSystem 0 根据区域设置属性而定vbFirstJan1 1 从1月1日所在的星期开始(默认)vbFirstFourDays 2 新年中至少有四天的第一个星期开始vbFirstFullWeek 3 新年中完整的第一个星期开始firstdayofweek 和 firstweekofyear 这两个参数都是可选的。例如,我们可以计算 1999年 12 月 31 日和 200
23、0 年 12 月 31 日间相差的天数:DateDiff(“d”, “1999/12/31”, “2000/12/31”)=366,也可以计算相差年份:DateDiff(“yyyy”, “1999/12/31”, “2000/12/31”)=1。5. DatePart:DatePart 函数可以返回日期的指定部分,其语法如下所示:DatePart(interval, date1, date2, firstdayofweek, firstweekofyear)其中参数和 DateDiff 函数的参数完全相同。例如,我们可以获知 2000 年 5 月 26 日是星期几:DatePart(“w”,
24、“2000/5/26”)=6,6 代表的正是 vbFriday 常数,表明这一天是星期五。6. DateSerial:给定年、月和日各部分,DateSerial 函数可以将其合成为日期子类型的数据。例如对于 2000 年 12 月 31 日,我们可以使用 DateSerial 函数如下合成:DateSerial(2000, 12, 31)。7. DateValue:运用 DateValue 函数,能够将用以描述日期的字符串转化成为日期子类型的数据,其中包含的就是字符串所描述的日期。8. Day:Day 函数返回指定日期的日部分。例如,可以获取当前日期的日部分:Day(Date)。9. Mont
25、h:Month 函数返回指定日期的月份部分。10. Year:Year 函数返回指定日期的年份部分。VBScript 与 JScript 实例教程7011. MonthName:MonthName 返回代表指定月份的字符串,例如,MonthName(1)=“一月”,这个返回值是和系统相关的。12. WeekDay:WeekDay 函数可以返回指定日期是星期几,例如, WeekDay(Now)函数可以获取系统当前日期是星期几。13. WeekDayName:WeekDayName 函数可以返回一个字符传,指定星期中的某一天。14. Hour:Hour 函数返回指定时间的小时部分。例如,可以获取当
26、前时间的小时部分:Hour(Time)。15. Minute:Minute 函数返回指定时间的分钟部分。16. Second:Second 函数返回指定时间的秒钟部分。17. Now:Now 函数获取当前系统日期和时间值。18. TimeSerial:给定小时、分钟和秒钟,TimeSerial 函数可以将其合成为日期子类型的数据。例如对于 11 点 59 分 59 秒,我们可以使用 TimeSerial 函数如下合成:TimeSerial(11, 59, 59)。19. TimeValue:运用 TimeValue 函数,能够将用以描述时间的字符串转化成为日期子类型的数据,其中包含的就是字符串
27、所描述的时间。4.1.5 字符串处理函数VBScript 中字符串处理函数可以完成截取字符串、字符串大小写转换等功能,虽然我们完全可以自己编写脚本来实现同样的功能,但是直接调用 VBScript 的函数可以在脚本编写的过程中提供给我们不少方便。1. Asc: Asc 函数可以获取字符串中第一个字母的 ASCII 码,例如,Asc(“AB”)=65。2. Chr:Chr 函数可以返回指定数字对应的 ASCII 码字符,例如,Chr(65)=“A”。3. Instr:运用 Instr 函数,我们可以判断在一个字符串中是否包含另外一个字符串,它返回的是被搜索字符串第一次出现的位置,例如,Instr(
28、“acabc”, “ab”)=3 。4. InstrRev; InstrRev 函数的功能和 Instr 的功能类似,不同之处在于 InstrRev 函数是从字符串尾开始搜索,而 Instr 函数是从字符串首开始搜索,例如,Instr(“acabc”, “c”)=2,而 InstrRev(“acabc”, “c”)=5。5. Len: Len 函数返回字符串的长度,例如,Len(“abc”)=3。6. LCase:LCase 函数将字符串中的字母转换为小写字符,例如,LCase(“Case”)=“case”。7. UCase:UCase 函数和 LCase 函数的功能正好相反,UCase 函数
29、将字符串中的字母转换为大写字符,例如,UCase(“Case”)=“CASE”。8. Left:Left 函数可以从字符串左边开始截取指定长度的字符,例如,Left(“Case”, 2)=“Ca”。9. Right:Right 函数可以从字符串右边开始截取指定长度的字符,例如,Right(“Case”, 2)=“se”。10. Mid:Mid 函数的功能比 Left 函数和 Right 函数的功能要强大得多,它能够从字符第 4 章 VBScript 的函数 71串的指定位置截取指定长度的字符,例如,我们可以截取“Case”字符串从第二个位置开始的两个字符:Mid(“Case”, 2, 2)=“
30、as” 。11. LTrim、RTrim 和 Trim:LTrim 函数删除字符串中的前导空格,RTrim 函数删除字符串中的后续空格,Trim 函数则删除字符串中的前导和后续空格,例如,LTrim(“ Case ”)=“Case ”,RTrim(“ Case ”)=“ Case”,Trim(“ Case ”)=“Case”。12. StrReverse:StrReverse 函数将指定的字符串一逆序的形式排列,例如,StrReverse(“Case”)=”esaC”。13. String:String 函数返回指定长度并以相同字符组成的字符串,例如,我们可以生成一个长度为 5,并且全部由字符
31、 a 组成的字符串:String(5, “a”)=“aaaaa”。14. StrComp:StrComp 函数对两个字符串执行字符串比较,并返回比较结果,如果前者小于后者返回-1,如果前者大于后者返回 1,如果两个字符串相等返回 0,如果两个字符串中有一个字符串为 Null,则返回 Null。例如,StrComp(“good”, “ok”)=-1,这是因为“g”的 ASCII 码小于“o”的 ASCII 码,所以“good”从上述代码中可以看出,在按钮单击事件中只有一行代码,在这行代码中使用了MsgBox 函数。该函数的作用是将弹出一个对话框,对话框中可以写一些用户想要表示的信息。这个方法虽然
32、简单,但相当有用。4.2.2 函数介绍MsgBox 函数MsgBox 函数用于弹出一个对话框,并在对话框中显示一些用户信息,并等待用户单击按钮。该函数的返回值用于表示用户单击的按钮。关于该函数的语法如下:MsgBox (prompt, buttons, title, helpfile, context)关于该函数中的一些参数的说明如下:(1) Prompt。作为消息显示在对话框中的字符串表达式。prompt 的最大长度大约是1024 个字符,这取决于所使用的字符的宽度。如果 prompt 中包含多个行,则可在各行之间用回车符 (Chr(13)、换行符 (Chr(10) 或回车换行符的组合 (C
33、hr(13) & Chr(10) 分隔各行。(2) Buttons。数值表达式,是表示指定显示按钮的数目和类型、使用的图标样式,默认按钮的标识以及消息框样式的数值的总和。有关数值,请参阅下文。如果省略,则 buttons 的默认值为 0。(3) Title。显示在对话框标题栏中的字符串表达式。如果省略 title,则将应用程序的名称显示在标题栏中。(4) Helpfile。字符串表达式,用于标识为对话框提供上下文相关帮助的帮助文件。如果已提供 helpfile,则必须提供 context。在 16 位系统平台上不可用。(5) Context。数值表达式,用于标识由帮助文件的作者指定给某个帮助主
34、题的上下文编号。如果已提供 context,则必须提供 helpfile。在 16 位系统平台上不可用。Helpfile 和 Context 两个参数必须同时出现,这样用户就可以按下 F1 键来查看与上下文相对应的帮助主题。如果对话框显示“取消”按钮,则按 ESC 键与单击“取消”按钮的效果相同。如果对话框包含“帮助”按钮,则有为对话框提供的上下文相关帮助。第 4 章 VBScript 的函数 73此外对于参数 Button,这里还需要说明一下。在 VBScript 语言中,提供了一些常量来代替 Button 中枯燥而且没有任何意义的数值表达式,下面我们就介绍一下这些组常量。第一组常量用于描述
35、对话框中显示的按钮类型与数目(表 4.3):表 4.3 常量表示常量表示 代表数值 含义vbOKOnly 0 只显示确定按钮。vbOKCancel 1 显示确定和取消按钮。vbAbortRetryIgnore 2 显示放弃、重试和忽略按钮。vbYesNoCancel 3 显示是、否和取消按钮。vbYesNo 4 显示是和否按钮。vbRetryCancel 5 显示重试和取消按钮。第二组常量用于描述图标的样式(表 4.4):表 4.4 常量表示常量表示 代表数值 含义vbCritical 16 显示临界信息图标。vbQuestion 32 显示警告查询图标。vbExclamation 48 显示
36、警告消息图标。vbInformation 64 显示信息消息图标。第三组常量用于确定默认按钮,如表 4.5 所示。表 4.5 常量表示常量表示 代表数值 含义vbDefaultButton1 0 第一个按钮为默认按钮。vbDefaultButton2 256 第二个按钮为默认按钮。vbDefaultButton3 512 第三个按钮为默认按钮。vbDefaultButton4 768 第四个按钮为默认按钮。第四组常量用于决定消息框的样式,如表 4.6 所示。表 4.6 常量表示常量表示 代表数值 含义vbApplicationModal 0 应用程序模式:用户必须响应消息框才能继续在当前应用程
37、序中工作。vbSystemModal 4096 系统模式:在用户响应消息框前,所有应用程序都被挂起。在使用 buttons 参数值时,只需要从每组值中取用一个数字或常量来表示按钮即可。MsgBox 函数的返回值也是一些数值信息,而且是通用的。同时,这些返回值也可以用一定的常量来表示其具体的含义,具体如表 4.7 所示。VBScript 与 JScript 实例教程74表 4.7 常量表示常量表示 代表数值 含义vbOK 1 确定vbCancel 2 取消vbAbort 3 放弃vbRetry 4 重试vbIgnore 5 忽略vbYes 6 是vbNo 7 否4.2.3 程序清单例 4.1 V
38、BScript 程序范例:Hello4.3 程序范例:色彩在网页中,颜色的应用和数值之间的转换将会经常使用。因为网页制作不同于一般的应用程序,一般的应用程序往往注重功能的实现,而对于界面的美观一般不会有过于苛刻的要求。但是网页不同,网页的制作在完成基本功能实现后,更注重于美观来吸引更多的用户来浏览该页面。所以,颜色的应用显得相当的重要。幸好 VBScript 提供了相应的函数来解决这一问题。4.3.1 范例介绍我们可以使用一个网页编辑器来布局整个页面,比如使用 Microsoft FrontPage,来编排图 4.2 所示的网页。第 4 章 VBScript 的函数 75图 4.2 VBScr
39、ipt 程序范例:色彩(布局)其中所使用的控件,以及名称如表 4.8 所示。使用浏览器打开该页面后,用户可使用鼠标来移动分别代表红、绿、蓝三色的滚动条的按钮,可以调节从 0 到 255 的不同整数数值,从而调节不同的颜色。三种基本颜色的数值的十进制和十六进制的表示将在后面的文本框内显示出来。同时颜色框内将显示这三种基本颜色的调和色。此外,用户可以单击“设置背景”按钮,来改变背景的颜色,也可以单击“设置字符颜色”按钮,来改变输入框内的字符颜色,使其与颜色框内的颜色一致。页面的具体运行效果如图 4.3 所示。表 4.8 使用到的控件控件类型 名称 初始值滚动条 RedScroll滚动条 Green
40、Scroll滚动条 BlueScroll按钮 BtnBackgroud 初始值:设置背景按钮 BtnFont 初始值:设置字符颜色输入框 RedDec 初始值:0输入框 GreenDec 初始值:0输入框 BlueDec 初始值:0输入框 RedHex 初始值:0输入框 GreenHex 初始值:0输入框 BlueHex 初始值:0输入框 RGBDec 初始值:0输入框 RGBHex 初始值:0输入框 HTMLHex 初始值:0输入框 TxtFont 初始值:字体颜色VBScript 与 JScript 实例教程76图 4.3 VBScript 程序范例:色彩(运行)4.3.2 代码讲解在所给
41、范例中,需要处理的事件有五处,即三个滚动条的按钮移动事件和两个按钮的单击事件。在滚动条滚动(Scroll)的时候,需要改变颜色框内的颜色,以及其他输入框中三种基本颜色的值。单击“设置背景”的按钮,可以改变背景颜色。单击“设置字符颜色”的按钮,可以改变输入框内的字符颜色。在该页面中使用到的 6 个变量说明如表 4.8 所示。表 4.8 变量定义变量定义 变量说明Dim TempHexR 用于临时记录红颜色的十六进制数值。Dim TempHexG 用于临时记录绿颜色的十六进制数值。Dim TempHexB 用于临时记录蓝颜色的十六进制数值。Dim TempDecR 用于临时记录红颜色的十进制数值。
42、Dim TempDecG 用于临时记录绿颜色的十进制数值。Dim TempDecB 用于临时记录蓝颜色的十进制数值。范例中三个滚动条的滚动事件的代码下面分别介绍一下。(1) 代表红颜色的滚动条的滚动事件。其代码如下:Sub RedScroll_Change()RedDec.Text=RedScroll.ValueRedHex.Text=Hex(RedScroll.Value)TempDecR = RedScroll.ValueUpdateValsEnd Sub代码中各语句解释如下:第 4 章 VBScript 的函数 77RedDec.Text=RedScroll.Value 是将滚动条所代表
43、的数值(十进制 )填入输入框内。RedHex.Text=Hex(RedScroll.Value) 是将滚动条所代表的数值(十六进制 )填入输入框内。TempDecR = RedScroll.Value 将该数值记录在变量中,以便于后面的调用。UpdateVals 调用 UpdateVals 函数,来改变颜色框内的颜色。其中调用的 UpdateVals 函数的代码如下:1: Sub UpdateVals2: ColorTextBox.Backcolor = RGB(RedScroll.Value, GreenScroll.Value, BlueScroll.Value)3: RGBDec.Tex
44、t=RedDec.Text + (GreenDec.Text * 256) + (BlueDec.Text * 65536)4: TempHexR=“0“ & Hex(RedScroll.Value)5: TempHexG=“0“ & Hex(GreenScroll.Value)6: TempHexB=“0“ & Hex(BlueScroll.Value)7: TempHexR=Right(TempHexR, 2)8: TempHexG=Right(TempHexG, 2)9: TempHexB=Right(TempHexB, 2)10: RGBHex.Text=“&H“ & TempHexB
45、 & TempHexG & TempHexR11: HTMLHex.Text= TempHexR & TempHexG & TempHexB12: End Sub该函数中的有关语句解释如下:第 2 行:将三种基本色合成颜色,并将该颜色作为颜色框的背景颜色。其中,将三种基本颜色合成颜色,使用函数 RGB,该函数由 VBScript 提供。第 3 行:将三种基本色的十进制数值合并成颜色的十进制数值。第 4 至 9 行:计算三种基本色的十六进制数值,其中,每个数值都用两位来表示。以便于后面用于合成颜色的十六进制数值。第 10 行:将颜色的十六进制数值填入输入框内。第 11 行:将颜色的十六进制数值填
46、入输入框内。(2) “设置背景”按钮的单击事件。其代码如下:Sub BtnBackgroud_OnClick( )Document.bgColor = RGB(TempDecB, TempDecG, TempDecR)End Sub(3) “设置字符颜色”按钮的单击事件。其代码如下:Sub BtnFont_OnClick()TxtFont.ForeColor = RGB(TempDecR, TempDecG, TempDecB)End Sub4.3.3 函数介绍本范例中涉及的函数不少,下面我们就分别介绍一下。VBScript 与 JScript 实例教程78RGB 函数该函数的作用是将三种基本
47、色合成颜色,并返回代表该 RGB 颜色的整数值。其语法如下:RGB(red, green, blue) 在 RGB 函数的语法中,可以使用的参数及其说明如表 4.9 所示。表 4.9 参数说明参数 参数说明red 该参数必选。取值 0 到 255 间的整数,代表颜色中的红基本色成分。green 该参数必选。取值 0 到 255 间的整数,代表颜色中的绿基本色成分。blue 该参数必选。取值 0 到 255 间的整数,代表颜色中的蓝基本色成分。一般而言,在许多应用中,在使用到颜色属性时候,都要求用整数来代表 RGB 颜色值。RGB 颜色是将红色、绿色、蓝色,这三种基本颜色组合成某一特定的颜色值。
48、这一组合过程在 VBScript 语言中,就是通过 RGB 函数来实现的。其中红色、绿色、蓝色相对强度的数值一般是使用十进制来表示。如果 RGB 颜色用十六进制来表示的时候,低字节值表示红色,中字节值表示绿色,高字节值表示蓝色。在 RGB 函数中,三个参数的数值都是从 0 到 255 的范围。如果其中任一数值超过255,都作为 255 来计算。在该范例中,除了使用颜色函数外,还使用到了从十进制向十六进制进行转换函数,这里就具体来谈谈转换函数。首先要介绍的是将十进制数向十六进制和八进制转换的函数。Hex 函数该函数是对于任何输入的十进制数值进行转换,返回表示十六进制数字值的字符串。其语法如下:H
49、ex(number) 其中,number 参数是任意有效的表达式。有一些情况需要说明,详细见表 4.10 所示。表 4.10 情况说明参数情况 返回值情况如果 number 参数不是整数 则在进行运算前,将其四舍五入为最接近的整数。如果 number 参数是 Null Hex 返回 Null如果 number 参数是 Empty Hex 返回零 (0)。如果 number 参数是其他数 Hex 返回的数值最大到八位的十六进制字符。在十六进制计数法中,可以通过在数字前面添加前缀&H 来表示十六进制数。例如:&H10 表示十进制数 16。下面的示例利用 Hex 函数返回数字的十六进制数:Dim MyHex第 4 章 VBScript 的函数 79MyHex = Hex(5) 返回 5。MyHex = Hex(10) 返回 A。MyHex = Hex(459) 返回 1CB。Oct 函数该函数是对于任何输入的十进制数值进行转换,返回表示八进制数字值的字符串。其语法如下:Oct(number) number 参数是任意有效的表达式。与参数对应的返回值的情况见表 4.11