1、第十章节图形的控制第十章节图形的控制跟处理课本新跟处理课本新10.1 10.1 图形控件图形控件vVB提供的与绘图有关的标准控件有图片框(PictureBox)、图像框(Image)、直线(Line)和形状(Shape)。Image、Line、Shape控件需要较少的系统资源,且包含PictureBox中可用的属性、方法和事件子集,因此他们比PictureBox控件显示速度快些。vPictureBox和Image控件可以显示位图、图标、图元文件中的图形,也可处理GIF和JPEG格式的图形文件。10.1.1 PictureBox10.1.1 PictureBox控件控件v图片框(PictureB
2、ox)控件的主要作用是在窗体的指定位置为用户显示图片,也可作为其它控件的容器、显示Print方法输出的文本或显示图形方法输出的图形。实际显示的图片由Picture属性决定。在工具箱面板中,PictureBox控件的图标如图10-1所示。图10-1 PictureBox控件的图标 10.1.1 PictureBox10.1.1 PictureBox控件控件1、主要属性 基基本本属属性性Name标识唯一的对象,运行时为只读标识唯一的对象,运行时为只读Height、Width、Top、Left标识控件在容器上显示的尺寸及位置标识控件在容器上显示的尺寸及位置Enabled决定对象运行时是否有效。决定对
3、象运行时是否有效。True:运行时有效;:运行时有效;False:运行时:运行时无效无效Visible决定对象运行时是否可见。决定对象运行时是否可见。True:运行时可见;:运行时可见;False:运行时:运行时不可见不可见Font设置与字体有关的所有内容。包括设置与字体有关的所有内容。包括FontName、FontSize、FontBold、FontItalic、FontUnderline等等特特有有属属性性PicturePicture属性用来返回或设置控件中要显示的图片,可以通过属属性用来返回或设置控件中要显示的图片,可以通过属性窗口进行设置。如果要在程序运行过程中载入图片,常常性窗口进行
4、设置。如果要在程序运行过程中载入图片,常常使用使用 LoadPicture 函数函数AutoSizeAutoSize属性用于设置是否能自动调整图片框大小,以完整显示属性用于设置是否能自动调整图片框大小,以完整显示装入的图片。值为装入的图片。值为True时,自动调整大小,以显示装入的整时,自动调整大小,以显示装入的整个图片;值为个图片;值为False时,保持控件大小,装入的图片超出的部时,保持控件大小,装入的图片超出的部分被截除。分被截除。10.1.1 PictureBox10.1.1 PictureBox控件控件2、加载图片 v(1)在设计阶段加载图片文件有两种方法:v 1)通过设置属性窗口中
5、的Picture属性来加载图片,步骤如下:在窗体上建立一个图片框 保持图片框为激活的控件,在属性窗口中找到Picture属性,单击该属性条,其右侧出现“”按钮 单击“”按钮,屏幕显示“加载图片”对话框,从相应文件夹中找到所需加载的图片,单击打开,图片即被加载v 2)利用剪贴板加载 用绘图或图像处理软件完成图形处理,并将图形复制到剪贴板中 切换到VB,在窗体上建立图片框,并保持为激活状态 使用“粘贴”命令,即完成图片加载10.1.1 PictureBox10.1.1 PictureBox控件控件2、加载图片 v(2)在运行阶段通过LoadPicture函数加载图片,格式如下:v对象名.Pictu
6、re=LoadPicture(图片文件名)v例如:加载图片:Picture1.Picture=LoadPicture(C:PicMyPic1.gif)10.1.1 PictureBox10.1.1 PictureBox控件控件3卸载图片和复制图片 v(1)卸载图片v 卸载图片文件也有两种方法:一种是在设计阶段卸载,另一种是在运行阶段卸载。在设计阶段设置属性窗口中的Picture属性为None,在运行阶段通过LoadPicture函数卸载图片,格式如下:v 对象名.Picture=LoadPicture()v(2)复制图片v 复制图片可以利用Picture属性和LoadPicture()函数来完
7、成,如:v Picture1.Picture=LoadPicture(C:PicMyPic1.gif)v Picture2.Picture=Picture1.Picture10.1.1 PictureBox10.1.1 PictureBox控件控件4图形文件的保存v格式:SavePicture picture,stringexpressionv说明:vpicture:图片框对象或其他对象的picture属性vStringexpression:文件名10.1.1 PictureBox10.1.1 PictureBox控件控件5Paint事件v在一个对象被移动或放大之后,或在一个覆盖该对象的窗体被
8、移开之后,该对象部分或全部暴露时,此事件发生。v如果AutoRedraw属性被设置为True,重新绘图会自动进行,就不需要Paint事件。10.1.1 PictureBox10.1.1 PictureBox控件控件6常用方法v图片框中常使用Cls方法和Print方法。v【例例10-1】在C:新建一个文件夹stu1,将我的文档中的示例图片Sunset.JPG复制到stu1文件夹下。再启动VB,在stu1文件夹下新建一个工程文件,其布局与运行结果如图10-2所示。图10-2 控件布局图及运行结果图 10.1.1 PictureBox10.1.1 PictureBox控件控件v(1)控件选择:两个标
9、签控件:Label1、Label2;两个图片框控件:Picture1、Picture2;三个命令按钮:Cmd1、Cmd2、Cmd3v(2)控件属性设置:控件名称属性Caption属性标签Label1Caption源图标签Label2Caption复制图片图片框Picture1PictureNone图片框Picture2PictureNone命令按钮Cmd1Caption加载图片命令按钮Cmd2Caption复制图片命令按钮Cmd3Caption清除图片10.1.1 PictureBox10.1.1 PictureBox控件控件v(3)代码编写:v 编写命令按钮Cmd1的Click事件:v Pr
10、ivate Sub Cmd1_Click()v Picture1.Picture=LoadPicture(App.Path&Sunset.JPG)v End Subv 编写命令按钮Cmd2的Click事件:v Private Sub Cmd2_Click()v Picture2.Picture=Picture1.Picturev End Subv 编写命令按钮Cmd3的Click事件:v Private Sub Cmd3_Click()v Picture1.Picture=LoadPicture()v Picture2.Picture=LoadPicture()v End Subv 说明:Ap
11、p.Path用于取得当前工程文件所在的文件夹路径,App.Path&Sunset.JPG指明了Sunset.JPG文件的物理位置。这种方法常被应用,可提高程序的可移植性。10.1.2 Image10.1.2 Image控件控件v图像框(Image)控件是一个简单易用的显示图像文件的控件,其使用的系统资源较少而且显示速度较快,它可以自动调整自身的大小以适应图像大小,或者伸缩图像的大小使图像适合图像框控件的大小。Image加载图片的方法和使用图片的文件格式与PictureBox相同。在工具箱面板中,Image控件的图标如图10-3所示。图10-3 Image控件的图标10.1.2 Image10.
12、1.2 Image控件控件v1.主要属性 基本属性Name标识唯一的对象,运行时为只读Height、Width、Top、Left标识控件在容器上显示的位置及尺寸Enabled决定对象运行时是否有效。True:运行时有效;False:运行时无效Visible决定对象运行时是否可见。True:运行时可见;False:运行时不可见特有属性Picture可通过属性窗口进行设置,也可以在程序中进行设置。VB6.0支持位图文件、图标文件、JPEG 及GIF压缩位图文件Stretch自动调整图像框中图形内容的大小。False:图像框可以自动改变大小以适应其中的图形True:图形自动调整尺寸以适应图像框的大小
13、。10.1.2 Image10.1.2 Image控件控件v 2常用事件v 图像框可以响应Click和DblClick事件v 3Image与PictureBox的区别v(1)PictureBox是“容器”控件,可以作为父控件,而Image不能作为父控件。也就是说,在PictureBox中,可以包含其它控件,作为他的子控件,如果移动PictureBox,则框中的控件也随之一起移动,并且与PictureBox的相对位置保持不变;当PictureBox的大小改变时,这些子控件的图片控制的相对位置保持不变,PictureBox内的子控件也不能移到PictureBox外。v(2)PictureBox可以
14、通过Print方法接收文本,并可接收由像素组成的图形,而Image不能接受用Print方法输入的信息,也不能用绘图方法在Image上绘制图形。v(3)Image比PictureBox占用内存少,显示速度快。v(4)Image没有AutoSize属性,但可以实现图形缩放10.1.2 Image10.1.2 Image控件控件v【例例10-2】在C:新建一个文件夹stu2,将我的文档中的示例图片Sunset.JPG复制到stu2文件夹下。再启动VB,在stu2文件夹下新建一个工程文件,其布局与运行结果如图10-4所示。图10-4 控件布局图及运行结果图 10.1.2 Image10.1.2 Ima
15、ge控件控件v(1)控件选择:1个图像框Image1;2个命令按钮:Command1、Command2v(2)控件属性设置 控件 名称属性属性值图像框Image1Stretch True命令按钮Command1Caption放大命令按钮Command2Caption缩小10.1.2 Image10.1.2 Image控件控件v(3)代码编写:v 编写命令按钮Command1的Click事件:v Private Sub Command1_Click()v If Image1.Height 2000 Or Image1.Width 1000 Or Image1.Width 2000 Thenv I
16、mage1.Height=Image1.Height-500v Image1.Width=Image1.Width-500v End Ifv End Subv 编写窗体Form1的Load事件:v Private Sub Form_Load()v Image1.Picture=LoadPicture(App.Path&Sunset.JPG)v End Sub10.1.3 Line控件 vLine控件可用来在窗体、框架或图片框中创建各种直线。既可以在设计时通过设置直线的端点坐标来画直线,又可以在程序运行时动态地改变直线的各种属性。Line控件主要属性是BorderWidth、BorderStyl
17、e和BorderColor属性,以及X1、Y1和X2、Y2属性。BorderWidth确定线的宽度,BorderStyle确定线的形状,BorderColor确定线的颜色。X1、Y1和X2、Y2属性控制线的两个端点的位置。程序运行时,不能使用Move方法移动Line控件,但是可以通过改变X1、Y1、X2、Y2属性来移动或调整直线。在工具箱面板中,Line控件的图标如图10-5所示。图10-5 Line控件的图标 10.1.4 Shape控件 vShape控件可用来在窗体、框架或图片框中创建矩形、正方形、椭圆形、圆形、圆角矩形或圆角正方形。通过设置Shape控件的Shape属性来实现所需要的形状
18、,以控制Shape控件的外观。在工具箱面板中,Shape控件的图标如图10-6所示。图10-6 Shape控件的图标10.1.4 Shape控件v语法:对象名.Shape=valuev其中,对象名是Shape控件的Name属性;value用来指定控件外观的整数。其设置值如表10-5所示。常数值描述vbShapeRectangle0矩形,默认值vbShapeSquare1正方形vbShapeOval2椭圆形vbShapeCircle3圆形vbShapeRoundedRectangle4圆角矩形vbShapeRoundedSquare5圆角正方形10.210.2坐标系统坐标系统v对象定位使用的是容
19、器的坐标系,每个容器都有一个坐标系。坐标系由三要素构成:坐标原点,坐标度量单位(刻度),坐标轴的长度与方向。VB提供两类坐标系:默认坐标系和自定义坐标系。v默认坐标系中原点(0,0)定位于对象容器用户区的左上角,X轴向右为正方向,Y轴向下为正方向。对象坐标的度量单位由容器对象的ScaleMode属性决定,共有8种形式的单位,默认为Twip。用ScaleMode属性只能改变刻度单位,不能改变坐标原点及坐标轴的方向。10.210.2坐标系统坐标系统v建立自定义坐标系更简单的做法是调用容器对象的Scale方法,语法格式为:v容器对象.Scale(x1,y1)-(x2,y2)v说明:容器对象是指窗体或
20、图片框,省略时默认为当前窗体。(x1,y1)为左上角的坐标,(x2,y2)为右下角的坐标。注意两对括号之间的“-”不代表相减。v调用Scale方法后,ScaleLeft和ScaleTop属性分别被设为x1和y1的值。ScaleWidth属性被设为x2与x1之差,ScaleHeight属性被设为y2与y1之差。若省略(x1,y1)-(x2,y2),则恢复默认坐标系统,即以容器对象的左上角为坐标原点。10.3相关属性和函数 v10.3.1与绘图方法有关的属性与绘图方法有关的属性 v10.3.2 与颜色有关的函数与颜色有关的函数10.3.1与绘图方法有关的属性v 1当前坐标v CurrentX,Cu
21、rrentY属性给出窗体或图片框或打印机在绘图时的当前坐标。v 这两个属性在设计阶段不能使用,使用CLS方法后,CurrentX、CurrentY属性值为0。v 2线宽和线型v DrawWidth属性用来返回或设置图形方法输出的线宽。属性值的单位为像素,取值范围为132767,默认值为1。v DrawStyle属性用来返回或设置图形方法输出的线型,如表10-6所示。该属性的设置值04的效果分别与Line控件的BordeStyle属性的15对应。若DrawWidth属性设置值大于1,在DrawStyle属性被设置为14时,只能画实线。10.3.1与绘图方法有关的属性v2线宽和线型常数设置值描述常
22、数设置值描述VbSolid0实线(缺省)VbDashDotDot4点点划线VbDash1虚线VbInvisible5透明线VbDot2点线VbInsideSolid6内实线VbDashDot3点划线表10-6 DrawStyle设置表 10.3.1与绘图方法有关的属性v2线宽和线型常数设置值描述常数设置值描述VbFSSolid0实线VbUpwardDiagonal4上斜对角线VbFSTransparent1透明(缺省)VbDownwardDiagonal5下斜对角线VbHorizontalLine2水平直线VbCross6十字线交叉对角线表10-7 FillStyle设置表10.3.1与绘图方
23、法有关的属性v3填充颜色与填充样式vFillColor属性用于为Line和Circle方法生成的矩形和圆填充颜色。vFillStyle属性用于为Line和Circle方法生成的矩形和圆指定填充的图案,如表10-7所示。该属性的设置值与Shape控件的FillStyle属性相同。v除Form对象外,若FillStyle属性被设置为默认值1(透明),则忽略FillColor属性的设置值。10.3.2 与颜色有关的函数v颜色的使用是绘图操作中的重要环节。在程序运行时,有四种方式可以指定颜色值:使用QBColor函数;使用RGB函数;使用内部常数;直接输入颜色值。v1QBColor函数vQBColor
24、函数能够选择早期版本的Basic所规定的16种颜色之一。其语法格式为:vQBColor(Color)v说明:Color是一个界于015的整型数,用于指定颜色。表10-8列出了QBColor函数中Color取值所对应的颜色。10.3.2 与颜色有关的函数Color取值颜色Color取值颜色0黑8灰1蓝9亮蓝2绿10亮绿3青11亮青4红12亮红5洋红13亮洋红6黄14亮黄7白15亮白表10-8 QBColor函数中Color的取值与所对应的颜色10.3.2 与颜色有关的函数v 2RGB函数v RGB函数用来返回一个Long整数,用来表示一个RGB颜色值。其语法格式为:v RGB(red,green
25、,blue)v 说明:v red是必需的,Variant(Integer)。数值范围从0255,表示颜色的红色成分。v green是必需的,Variant(Integer)。数值范围从0255,表示颜色的绿色成分。v blue是必需的,Variant(Integer)。数值范围从0255,表示颜色的蓝色成分。v 一个RGB颜色指定红、绿、蓝三原色的成分,生成一个用于显示的特定的颜色。传给RGB的任何参数的值,如果超过255,会被当做255。表10-9列出了常见的标准颜色RGB的值。10.3.2 与颜色有关的函数v 2RGB函数颜色redgreenblue黑000红25500绿02550蓝002
26、55青0255255洋红2550255黄2552550白255255255表10-9 常见的标准颜色RGB的值10.410.4图形方法图形方法v10.4.1 Line方法方法v10.4.2 Pset方法方法v10.4.3 Circle方法方法v10.4.4 PaintPicture方法方法10.4.1 Line10.4.1 Line方法方法v Line方法用于画直线或矩形,其语法格式如下:v 对象.LineStep(x1,y1)-Step(x2,y2),Color,BFv 说明:v(1)对象:可以是窗体或图片框,若省略则默认为当前窗体。v(2)(x1,y1):线段的起点坐标或矩形的左上角坐标。
27、v(3)(x2,y2):线段的终点坐标或矩形的右下角坐标。v(4)Step:表示采用当前作图位置的相对值。v(5)Color:线段或矩形边线的颜色。若省略,则使用对象的ForeColor属性值。v(6)B:表示画矩形。v(7)F:表示用画矩形的颜色来填充矩形,F必须与关键字B一起使用。如果只用B不用F,则矩形的填充由对象当前的FillColor和FillStyle属性决定。v 画直线时,省略BF参数;画矩形时,参数B为空心矩形,BF为实心矩形。10.4.1 Line10.4.1 Line方法方法v【例例10-3】使用Line方法画出如图10-7所示的三角形。v 首先将窗体的AutoRedraw
28、属性设置为True。然后编写代码如下:v Private Sub Form_Load()v Line(100,100)-Step(0,500)终点采用相对坐标v Line-Step(500,0)以上次画线的终点为本次画线起点v Line-(100,100)返回最初的起点v End Sub图10-7 使用Line方法绘制的三角形10.4.1 Line10.4.1 Line方法方法v【例例10-4】用Line方法在窗体上绘制如图10-8所示的同心矩形,每当单击窗体时,矩形的颜色随机变化。v编写代码如下:vPrivate Sub Form_Click()v Dim CX,CY,F,F1,F2,i 声
29、明变量v CX=ScaleWidth/2 水平中点v CY=ScaleHeight/2 垂直中点v DrawWidth=10 设置线宽v For i=50 To 0 Step-4 从外向内画矩形v F=i/50 坐标偏移量系数。v F1=1-F:F2=1+F 计算矩形左上角和右下角坐标偏移量系数。v ForeColor=QBColor(Int(Rnd*16)设置前景色为随机色v Line(CX*F1,CY*F1)-(CX*F2,CY*F2),BF 使用参数B画矩形,F参数填充颜色v Next ivEnd Sub图10-8 使用Line方法绘制同心矩形10.4.2 Pset10.4.2 Pset
30、方法方法v Pset方法用于在窗体、图片框或打印机指定位置上画点,利用Pset方法可以画任意曲线。v 其语法格式如下:v 对象.Pset Step(x,y),Colorv 说明:v(1)参数(x,y):必需的。x和y是单精度浮点数,即所画点的水平坐标(x轴)和垂直坐标(y轴)。v(2)Step:可选,表示采用当前作图位置的相对值。v(3)Color:可选,长整型数,为该点指定RGB颜色。可用RGB函数或QBColor函数指定颜色。如果省略Color,则使用当前的ForeColor属性值。如果使用背景颜色,则可清除某个位置上的点。10.4.2 Pset10.4.2 Pset方法方法v【例例10-
31、5】绘制正弦曲线和余弦曲线。程序运行结果如图10-9所示。图10-9 绘制正弦曲线和余弦曲线10.4.2 Pset10.4.2 Pset方法方法v本例使用PictureBox控件的Line方法绘制坐标轴,使用其Pset方法描绘曲线。在Form_Load过程中的语句Picture1.Scale(-360,2)-(360,-2),建立了新坐标系:左上角坐标是(-360,2),右下角坐标是(360,-2);坐标原点位于矩形的中心,X轴的正向水平向右,Y轴的正向垂直向上。v窗体中除了图片框Picture1外,还需要四个命令按钮:绘制正弦曲线的按钮command1,绘制余弦曲线的按钮command2,清
32、除图片框中的内容的按钮command3,绘制坐标轴的按钮command4。程序代码如下:10.4.2 Pset10.4.2 Pset方法方法vDim StartAngle As Single 存起始角vDim EndAngle As Single 存终止角vDim i As SinglevDim Rate As Single 存角度弧度转换系数vPrivate Sub Form_Load()窗体加载v Picture1.Scale(-360,2)-(360,-2)建立自定义坐标系v StartAngle=-360 起始角v EndAngle=360 终止角v Picture1.CurrentX
33、=-360 绘图起点坐标v Picture1.CurrentY=0v Rate=3.1416/180 角度弧度转换系数vEnd SubvPrivate Sub command1_Click()正弦曲线v For i=StartAngle To EndAnglev Picture1.PSet(i,Sin(i*Rate)v NextvEnd SubvPrivate Sub command2_Click()余弦曲线v For i=StartAngle To EndAnglev Picture1.PSet(i,Cos(i*Rate)v NextvEnd SubvPrivate Sub command3
34、_Click()清除v Picture1.ClsvEnd SubvPrivate Sub command4_Click()画坐标轴v Picture1.Line(-360,0)-(360,0)X轴v Picture1.Line(0,2)-(0,-2)Y轴vEnd Sub10.4.3 Circle10.4.3 Circle方法方法v Circle方法用于画圆、椭圆、圆弧和扇形,其语法格式如下:v 对象.Circle Step(x,y),r,color,起始角,终止角,纵横比v 说明:v(1)对象:可以是窗体、图片框或打印机,省略时默认为当前窗体。v(2)Step:表示采用当前作图位置的相对值。v
35、(3)(x,y):圆心坐标。v(4)r:半径。v(5)color:指定圆周边线的颜色。若省略,则使用ForeColor属性值。可以使用所属对象的FillColor和FillStyle属性填充封闭的图形。v(6)起始角和终止角:圆弧和扇形通过参数起始角、终止角控制。当起始角、终止角取值在02时为圆弧。当在起始角、终止角的取值前加一负号时,画出扇形,负号表示从圆心到圆弧端点画径向线。v(7)纵横比:控制画椭圆,默认值为1,画标准圆。v 注意:在VB坐标系中,采用逆时针方向绘圆。Circle方法中参数前出现的负号,并不能改变坐标系中旋转的方向。v 使用Circle方法时,如果想省掉中间的参数,逗号不
36、能省略。例如:画椭圆省掉了颜色、起始角、终止角三个参数,则必须加上四个连续的逗号,它表明这三个参数被省掉了。10.4.3 Circle10.4.3 Circle方法方法v【例例10-6】用Circle方法画圆、椭圆、圆弧和扇形,运行结果如图10-10所示。v 程序代码:v Private Sub Form_Click()v FillStyle=0v FillColor=RGB(255,0,0)v Circle(1000,1000),450v Circle(2000,1000),450,2v Circle(3000,1000),450,3.1415926/2,2*3.1415926v Circl
37、e(4000,1000),450,-3.1415926/2,-2*3.1415926v End Sub图10-10用Circle方法画圆、椭圆、圆弧和扇形10.4.4 PaintPicture10.4.4 PaintPicture方法方法v PaintPicture方法用来把一个窗体或图片框中已装入的图像文件(如:.BMP、.ICO、.WMF等)取出一部分放到另一个(或是它本身)对象中。该方法可实现在绘图对象内部或对象之间的图像复制操作。其语法格式如下:v 对象.PaintPicture 源图像,x1,y1,Width1,Height1,x2,y2,Width2,Height2v 说明:v(1
38、)对象名为一个对象表达式,是控件的Name属性。缺省时指带焦点的窗体。v(2)源图像是必需的,是指在源对象中已装入的图像文件,这里指定的必须是源对象的Picture属性。v(3)x1,y1是必需的,分别是指在对象上绘制图像的水平、垂直坐标。v(4)Width1、Height1是可选的,指定复制的图像在目标对象中的宽度和高度。当指定的宽度或高度大于或小于复制图像的宽度或高度时,复制对象自动被拉伸或压缩;默认时取原始尺寸;当这两个参数为负数时,复制的图像水平或垂直翻转。v(5)x2,y2是可选的,分别是指要复制的区域左上角的水平、垂直坐标。默认值均为0。v(6)Width2、Height2是可选的
39、,指定源对象中要复制区域的宽度和高度。默认时取源尺寸。10.4.4 PaintPicture10.4.4 PaintPicture方法方法v【例10-7】在窗体上将图片框中的图片水平翻转后平铺。通过给目标宽度参数设置负值可对图片进行水平翻转。v 在窗体中央放置一个图片框,在该图片框中添加一幅图片。输入以下代码:v Private Sub Form_Click()v Picture1.Visible=Falsev Form1.AutoRedraw=TruevDim i As Integer,j As Integerv Dim x As Integer,y As Integerv x=ScaleWidth Picture1.Width+1 根据窗体大小确定行、列数v y=ScaleHeight Picture1.Height+1v For i=0 To y 行v For j=0 To x 列v PaintPicture Picture1.Picture,j*Picture1.Width,i*Picture1.Height,-Picture1.Width,Picture1.Heightv Next jv Next iv End Sub10.4.4 PaintPicture10.4.4 PaintPicture方法方法图10-11 例10-7程序布局及运行结果