网络信息安全项目教程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第五章 多媒体程序设计

复习要求

1.理解窗体坐标系、Pset、Line语句和使用VB颜色。

2.了解Circle方法应用。

3.了解Line控件、Shape控件。

4.熟练掌握图像框控件、图像控件。

5.了解Declare语句、API函数mciSendString。

6.掌握ShockWaveFlash控件、Windows Media Player控件。

复习内容

一、窗体坐标系

Visual Basic提供了几个在控件上绘制图形的方法,使用这些方法绘图之前,首先需要了解坐标、坐标系统及其在绘图中的应用方法。

坐标描述一个像素在屏幕上的位置或打印纸上的点的位置。窗体上任何一点都可以用X坐标和Y坐标表示。

窗体的 ScaleMode属性返回或设置一个值,指定坐标的度量单位,其值在表5-1中列出。

表5-1 ScaleMode属性的设置值

要改变默认的坐标系,设置 ScaleMode属性即可。如果设置 ScaleMode属性为vbInches,则控件上的距离必须指定为英寸,这时相距 1个单位的两个点就表示相距 1英寸。还可以指定小数距离,如0.1,对应于1/10in。改变 ScaleMode属性并不影响控件的大小,只是改变控件上点的网格分布密度。

要建立用户自定义坐标系,可以用 Scale方法或 Scale方法的相关属性。

Scale方法的语法格式如下:

        Scale (X1, Y1) - (X2, Y2)

其中(X1, Y1)是绘图区域左上角的坐标;(X2, Y2)是绘图区域右下角的坐标。

例如,Scale (-320, 240) - (320, -240) 定义了绘图区域大小为 640×480,坐标原点(0, 0)在绘图区域中心。

Visual Basic设置坐标的方式有“绝对坐标”与“相对坐标”两种。绝对坐标是相对于原点(对象左上角)的横向距离与纵向距离。相对坐标则是相对于“最后参照点”(调用绘图方法后停留的位置)的横向距离与纵向距离。在坐标前面加Step表示相对坐标,没有加Step就是绝对坐标,使用相对坐标时有延续效果。

二、使用 Visual Basic 颜色

Visual Basic提供了两个选择颜色函数 QBColor和RGB,其中QBColor函数能够选择 16种颜色。表5-2列出了QBColor()可选择的颜色。

表5-2 QBColor()可选择的颜色

RGB函数返回一个 Long整数,用来表示一个 RGB颜色值,语法如下:

        RGB(red, green, blue)

其中参数 red、green、blue 分别指定三原色中红色、绿色、蓝色的比例,它们的取值范围为 0~255。

BackColor属性设置对象的背景颜色,ForeColor属性设置对象的前景颜色,对于窗体而言前景颜色表示输出文字或图形的颜色。在设计时,可以利用属性窗口来设置颜色。在程序代码中,可以利用语句来设置颜色。

三、PSet方法

PSet方法将对象上的点设置为指定颜色,语法如下:

        object.PSet [Step] (x, y), [color]

其中object是可选的,其值为在其上绘图的对象,可以是窗体、图像框或打印机的名称。如果省略object, 则具有焦点的窗体作为object。关键字Step是可选的,指定相对于由CurrentX和CurrentY属性提供的当前图形位置的坐标。

参数(x, y)是必需的,其值为单精度浮点数,指定点的水平(x轴)和垂直(y轴)坐标。

参数 color是可选的,其值是长整型数,为该点指定的 RGB 颜色。如果它被省略,则使用当前的 ForeColor属性值。可以用 RGB函数或 QBColor函数指定颜色。

使用 PSet 所画点的尺寸取决于 DrawWidth属性值。当 DrawWidth 为 1,PSet 将一个像素的点设置为指定颜色。当 DrawWidth大于 1,则点的中心位于指定坐标。

画点的方法取决于DrawMode和 DrawStyle属性值。

执行 PSet时,CurrentX和CurrentY属性被设置为参数指定的点。

要想用PSet方法清除单一像素,规定该像素的坐标,并使用BackColor属性设置作为color参数。

四、Line方法

Line方法用于在窗体或图像框中画直线和矩形,语法如下:

        object.Line [Step] (x1, y1) [Step] (x2, y2), [color], [B][F]

其中object是可选参数,用于指定执行 Line方法的对象,省略此参数,则以具有焦点的窗体作为对象。

两个Step关键字都是可选参数,第一个 Step用于指定相对于当前绘图位置(CurrentX, CurrentY)的起点坐标;第二个 Step用于指定相对于直线起点的终点坐标。

(x1,y1)是可选参数,其值为单精度浮点数,用于指定直线或矩形的起点坐标。窗体的ScaleMode属性决定了使用的度量单位。省略(x1,y1)时,直线起始于由属性 CurrentX和CurrentY所指定的位置。

(x2,y2)是必选参数,用于指定直线或矩形的终点坐标。

color是可选参数, 其值是一个长整型数,用于指定画线时用的 RGB 颜色。 如果省略 color参数,则使用窗体的 ForeColor属性值画线。在程序可以用 Visual Basic预定义的符号常量来设置颜色值,也可以用 RGB函数或QBColor函数来设置颜色值。

B和F都是可选项。如果同时使用 B和F 选项,则利用对角坐标画出一个矩形,此时 F选项规定矩形内部以其边框的颜色来填充。如果仅用 B 而不用 F,则矩形内部按窗体的 FillColor和FillStyle属性值指定的填充颜色和填充样式来填充。FillStyle的默认值为transparent(透明的),此时不填充矩形内部。只有在用 B的前提下才能用 F。

使用 Line方法时,应注意以下几点:

(1)画两条相连的直线时,前一条直线的终点就是后一条直线的起点。

(2)线宽取决于 DrawWidth属性值,其取值范围为1~32767,以像素为单位,默认线宽为1。

(3)在背景上画线和矩形的方法取决于 DrawMode和 DrawStyle属性值,前者的取值范围为1~16,后者的取值范围为0~6,其中0表示实线(默认值),1表示虚线,2表示点线,3表示点画线,4表示双点画线,5表示无线,6表示内收实线。

(4)执行 Line方法时,将以线的终点坐标来设置CurrentX和CurrentY属性。

五、Circle方法

1.Circle方法用于在对象上画圆、椭圆或弧,语法如下:

        object.Circle [Step] (x, y), radius, [color, start, end, aspect]

其中object是一个可选参数,用于指定执行 Circle方法的对象,如果省略该参数,则以当前具有焦点的窗体作为执行对象。

Step关键词是一个可选项,用此选项可将圆、椭圆或弧的中心指定为相对坐标,参考点的坐标即当前对象的 CurrentX和CurrentY属性值。

(x,y)和radius都是必选参数,它们的值为单精度浮点数。(x,y)用于指定圆、椭圆或弧的中心坐标。radius用于指定圆、椭圆或弧的半径。圆心坐标和半径所用的度量单位由对象的 ScaleMode属性决定,默认值为 1,此时的度量单位是缇(twip)。

color是一个可选参数, 其值是一个长整型数,用于指定圆周的 RGB 颜色,可以用Visual Basic 预定义的符号常量来设置 color参数,也可以用 RGB函数或 QBColor函数指定颜色。

如果省略 color参数,则使用窗体的 ForeColor属性值。

start、end和aspect 也都是可选参数,它们的值为单精度浮点数。start和end以弧度为单位,取值范围为-2π~2π。当弧、部分圆或椭圆画完以后,这两个参数指定弧的起点和终点的位置。起点的默认值是 0,终点的默认值是 2π。aspect参数用于指定圆的纵横尺寸比,其默认值为 1.0(标准圆),当该参数不等于 1时,将画出椭圆。

2.使用 Circle方法时,应注意以下几点:

(1)如果要填充圆或椭圆,则应把所属对象的FillStyle属性设置为除1(透明)以外的其他值,并选择适当的 FillColor属性。只有封闭图形才能填充,这里所说的封闭图形包括圆、椭圆和扇形。

(2)画部分圆或椭圆时,如果 start参数为负数,Circle方法画一个半径到由 start指定的角度,并将该角度处理为正值;如果 end参数为负,Circle画一个半径到由 end指定的角度,也将该角度处理为正值。Circle方法总是按逆时针方向绘图。

(3)画圆、椭圆或弧时线宽取决于 DrawWidth属性值。在背景上画圆的方法则取决于DrawMode和DrawStyle属性值。

(4)画角度为 0的扇形时,要画出一个半径(即向右画一水平线段),这时应给 start指定一个很小的负值,不要取0。

(5)在 Circle方法中可以省略语法中间的某个参数,但不能省略分隔参数的逗号。最后一个参数后面的逗号可以省略。

(6)执行 Circle方法时,将以中心点坐标来设置 CurrentX和CurrentY属性。

六、Line控件

Line控件是图形控件,它显示水平线、垂直线或者对角线。

在设计时,可以使用 Line控件在窗体上绘制线。在运行时,除了使用 Line方法外,还可以使用 Line控件,或者使用后者代替前者。即使 AutoRedraw属性设置为 False,Line控件绘制的线也仍会保留在窗体上。可以在窗体、图像框和框架中显示 Line控件。运行时不能使用 Move方法移动 Line控件,但是可以通过改变 X1、X2、Y1和Y2的属性来移动它或者调整它的大小。

Line控件的常用属性如下。

1.BorderColor

返回或设置对象的边框颜色。

2.BorderStyle

返回或设置对象的边框样式。BorderStyle属性有以下设置值:

0 表示透明,1(默认值)表示实线,2表示虚线,3 表示点线,4 表示点画线,5 表示双点画线,6表示内收实线。

3.BorderWidth

返回或设置控件边框的宽度。

4.X1、Y1、X2、Y2

返回或设置 Line控件的起始点(X1, Y1)和终止点(X2, Y2)的坐标。水平坐标是 X1和 X2;垂直坐标是Y1和Y2。

设置BorderStyle属性的效果取决于 BorderWidth属性的设置。如果 BorderWidth 不是 1而 BorderStyle不是 0或 6,则将 BorderStyle设置成 1。

七、Shape控件

Shape控件是图形控件,可以用于显示矩形、正方形、椭圆、圆形、圆角矩形或者圆角正方形。

除了 BorderColor、BorderStyle和 BorderWidth外,Shape形状控件还具有以下属性。

1.Shape

用于设置所显示的形状,该属性有6个可选值:

0 表示矩形,1 表示正方形,2 表示椭圆,3 表示圆,4 表示圆角矩形,5 表示圆角正方形。

2.FillColor

用来设置形状控件的填充颜色。

3.FillStyle

设置填充效果。FillStyle属性有以下设置值:

0 表示实心,1 表示透明,2 表示水平线,3 表示垂直线,4 表示左上对角线,5 表示右下对角线,6 表示交叉线,7 表示对角交叉线。

可以在容器中绘制 Shape控件,但是不能把该控件当做容器。设置 BorderStyle属性产生的效果取决于 BorderWidth属性的设置。如果 BorderWidth 不是 1,并且 BorderStyle不是 0或者 6,则将 BorderStyle设置成 1。

八、图像框控件

图像框控件除了可以接受和输出一般图形以外,还可用于创建动态画图,并支持 Print方法,因此可以在对象中输出文本。与窗体一样,图像框也是容器对象,可以在此控件中放置其他控件。

(一)图像框控件的常用属性

1.AutoRedraw

返回或设置从图形方法到持久图形的输出。如果设置为 True,则使图像框控件的自动重绘有效,图形和文本输出到屏幕并存储在内存的图像中,必要时用存储在内存中的图像进行重绘;如果设置为 False(默认值),则使对象的自动重绘无效,且将图形或文本只写到屏幕上。

2.AutoSize

返回或设置一个值,以决定控件是否自动改变大小以显示其全部内容。

3.Height、Width

返回或设置图片的高度和宽度。

4.Picture

返回或设置图像框控件中要显示的图片。

(二)图像框控件的常用方法

1.PaintPicture

在图像框控件上绘制图形文件(.bmp、.wmf、.emf、.cur、.ico 或.dib)的内容,语法如下:

        object.PaintPicture picture, x1, y1, width1, height1, x2, y2, width2,
        height2,opcode

其中object表示图像框控件或窗体。如果省略 object,带有焦点的窗体默认为 object。

参数 picture是必需的,指定要绘制到 object 上的图形源。可以是窗体或图像框控件的Picture属性。

参数 x1和y1是必需的,均为单精度值,指定在 object 上绘制 picture的目标坐标(x 轴和y轴)。object的 ScaleMode属性决定使用的度量单位。

参数 width1是可选的,为单精度值,指示 picture的目标宽度。object的 ScaleMode属性决定使用的度量单位。 如果目标宽度比源宽度 (width2) 大或小,将适当地拉伸或压缩 picture。如果省略该参数,则使用源宽度。

参数 height1是可选的,为单精度值,指示 picture的目标高度。object的 ScaleMode属性决定使用的度量单位。 如果目标高度比源高度 (height2) 大或小,将适当地拉伸或压缩 picture。如果省略该参数,则使用源高度。

参数 x2和y2是可选的,均为单精度值,指示 picture 内剪贴区的坐标(x 轴和y 轴)。

object的 ScaleMode属性决定使用的度量单位。如果省略这些参数,则默认值为 0。

参数 width2是可选的,为单精度值, 指示 picture 内剪贴区的源宽度。 object的ScaleMode属性决定使用的度量单位。如果省略该参数,则使用整个源宽度。

参数 height2是可选的,为单精度值,指示 picture 内剪贴区的源高度。 object的ScaleMode属性决定使用的度量单位。如果省略该参数,则使用整个源高度。

参数 opcode是可选的,是长型值或仅由位图使用的代码,用来定义在将 picture 绘制到object上时对 picture执行的位操作。

2.LoadPicture

将图像加载到图像控件、图像框控件或窗体,语法如下:

        object.Picture = LoadPicture([filename])

其中参数 filename指定要加载的图像文件,如果省略该参数,则清除窗体、图像框及图像控件中的图形。

九、图像控件

图像控件是 Visual Basic 提供的一种显示图像的控件,它可以从文件中装入并显示这几种格式的图形:位图、图标、图元文件、增强型图元文件、JPEG和GIF 文件。除此之外,图像框控件还可响应 Click 事件,并可用图像框控件代替命令按钮或作为工具条的内容。此外,它还可以用来制作简单动画。

图像控件的主要属性如下。

1.Picture

返回或设置控件中要显示的图片。

2.Stretch

返回或设置一个值,指定一个图形是否要调整大小,以适应与图像控件的大小。设置为 True,则表示图形要调整大小以与控件相适合;设置为 False(默认值),则控件要调整大小以与图形相适应。

3.Tag

返回或设置一个表达式用来存储程序中需要的额外数据。与其他属性不同,Tag属性值不被 Visual Basic使用;可以用该属性来标识对象。

还可以通过调用图像控件的 Move方法来移动该控件,其语法如下:

        object.Move left, top, width, height

其中object是可选的,它是一个对象表达式。如果省略 object,则带有焦点的窗体默认为 object。

参数 left是必需的,为单精度值,指示 object 左边的水平坐标(x 轴)。

参数 top是可选的,为单精度值,指示 object 顶边的垂直坐标(y轴)。

参数 width是可选的,为单精度值,指示 object 新的宽度。

参数 height是可选的,为单精度值,指示 object 新的高度。

十、Declare语句

Declare语句用于在模块级别中声明对 DLL 动态链接库中外部过程的引用。该语句有以下两种语法格式。

语法 1:

        [Public | Private] Declare Sub name Lib "libname" [Alias "aliasname"]
        [([arglist])]

语法 2:

        [Public  |  Private]  Declare  Function  name  Lib  "libname"  [Alias
        "aliasname"][([arglist])] [As type]

其中 Public和 Private是可选的,Public用于声明对所有模块中的所有其他过程都可以使用的过程,Private用于声明只能在包含该声明的模块中使用的过程。

Sub 或 Function 二者需选其一,Sub表示该过程没有返回值,Function表示该过程会返回一个可用于表达式的值。

name是必需的,可以是任何合法的过程名。注意动态链接库的入口处区分大小写。

Lib是必需的,指明包含所声明过程的动态链接库或代码资源。所有声明都需要使用Lib子句。

libname是必需的,指定包含所声明的过程动态链接库名或代码资源名。

Alias是可选的,表示将被调用的过程在动态链接库中还有另外的名称。

aliasname是可选的,指定动态链接库或代码资源中的过程名。如果首字符不是数字符号(#),则 aliasname是动态链接库中该过程的入口处的名称。如果首字符是(#),则随后的字符必须指定该过程的入口处的顺序号。

arglist是可选的,代表调用该过程时需要传递的参数的变量表。

type是可选的,指定 Function过程返回值的数据类型,可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持变长)、Variant、用户定义类型或对象类型。

arglist参数的语法及语法各个部分如下:

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type]

其中Optional是可选的,表示参数不是必需的。如果使用该选项,则 arglist 中的后续参数都必须是可选的,而且必须都使用 Optional关键字声明。如果使用了 ParamArray,则任何参数都不能使用Optional。

ByVal是可选的,表示该参数按值传递。

ByRef表示该参数按地址传递。ByRef是 Visual Basic的默认选项。

ParamArray是可选的,只用于 arglist的最后一个参数,表示最后的参数是一个Variant 元素的 Optional的数组。使用 ParamArray关键字可以提供任意数目的参数。ParamArray关键字不能与 ByVal、ByRef或 Optional 一起使用。

varname是必需的,代表传给该过程的参数的变量名,应遵循标准的变量命名约定。

( )对数组变量是必需的,指明 varname是一个数组。

type是可选的,指定传递给该过程的参数的数据类型,可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持变长)、Object、Variant、用户自定义的类型或对象类型。

十一、API函数mciSendString

API函数 mciSendString函数使用字符串作为操作命令来控制媒体的设置, 常用的操作命令如下。

(1)Open:打开媒体设备。

(2)Close:关闭媒体设备。

(3)Play:播放媒体文件。

(4)Pause:暂停播放媒体文件。

(5)Stop:停止播放媒体文件。

(6)Seek:设置播放位置。

(7)Set:设置设备状态。

(8)Status:确定设备当前的状态。

十二、ShockWaveFlash控件

(一)ShockWaveFlash控件的常用属性

(1)Movie:指定要播放的 Flash动画文件。

(2)TotalFrames:返回总共帧数。

(3)CurrentFrame:返回当前帧编号。

(二)ShockWaveFlash控件的常用方法

(1)Play:开始播放动画。

(2)Back:跳到动画的上一帧。

(3)Forward:跳到动画的下一帧。

(4)Rewind:返回动画的第一帧。

(5)Stop方法:暂停 Flash动画播放。

十三、Windows Media Player控件

(一)Windows Media Player媒体播放器控件的主要属性

(1)URL:指定媒体文件的位置。

(2)enableContextMenu:设置是否显示播放位置的快捷菜单。

(3)fullScreen:设置是否处于全屏显示状态。

(4)stretchToFit:设置非全屏状态时是否伸展到最佳大小。

(5)uiMode:设置播放器的模式。如果设置为 full,则包含控制条;如果设置为 none,则只有播放部分而没有控制条。

(6)playState:返回当前控件状态。1表示已停止,2表示暂停,3表示正在播放。

(二)Windows Media Player控件的主要对象

Windows Media Player控件包含一些对象, 通过这些对象的属性和方法可以对播放进行控制并获取相关信息。

1.controls相关属性和方法

(1)controls.play方法:播放媒体。

(2)controls.stop方法:停止播放。

(3)controls.pause方法:暂停播放。

(4)controls.currentPosition属性:返回当前播放进度。

(5)controls.currentPositionString:返回时间格式的字符串,如“0:32”。

2.currentMedia 相关属性

(1)currentMedia.duration:返回媒体的总长度。

(2)currentMedia.durationString:返回时间格式的字符串,如“4:34”。

3.settings

通过 WindowsMediaPlayer.settings可以对播放器进行设置,包括设置音量和左右声道等。

(1)settings.volume:设置音量,设置为0~100。

(2)settings.balance:设置立体声的左声道和右声道的音量。