《第12章图形操作.ppt》由会员分享,可在线阅读,更多相关《第12章图形操作.ppt(30页珍藏版)》请在课桌文档上搜索。
1、,12.1 VB坐标系统12.2 图形控件12.3 图形方法12.4 绘图应用,第12章 图形操作,12.1 VB坐标系统,在VB中,每个对象定位于存放它的容器,例如,窗体处于屏幕内,屏幕是窗体的容器,在窗体内绘制控件,窗体就是控件的容器。每个容器都有一个坐标系,它里面的每一个点可用一对坐标(X,Y)表示,但采用的坐标系统不同,同一绘图区域的坐标刻度范围以及同一位置的坐标刻度X,Y也不一样。VB提供两类坐标系:默认坐标系、自定义坐标系。,12.1.1 默认坐标系,VB中,每个对象容器(屏幕、窗体、图片框、框架等)都有一个默认坐标系,其特点是:原点(0,0)定位在对象容器用户区的左上角,X轴向右
2、、Y轴向下为正方向。下图是窗体作为控件的容器时的默认坐标系:,默认坐标系中,属性ScaleTop和ScaleLeft用于控制容器对象左边和顶端的坐标,根据这两个属性值可形成坐标系原点。所有对象的ScaleTop、ScaleLeft属性的默认值均为0。属性Height和Width确定容器对象高度和宽度。属性ScaleHeight和ScaleWidth确定对象内部水平方向和垂直方向的单元数。属性ScaleMode决定对象坐标度量单位,共有8种单位,ScaleMode属性默认为twip,ScaleMode属性设置如下表所示。,12.1.1 默认坐标系,12.1.2 自定义坐标系,在图形操作中可通过下
3、面方法定制窗体、图片框等对象的坐标系,包括改变坐标原点的位置、改变X轴及Y轴的正向、改变坐标单位等。修改属性值:当容器对象的ScaleMode属性设置为0时,允许自定义坐标系统。此时程序设汁者可通过设置对象的四个属性ScaleWidth、ScaleHeight、ScaleLeft、ScaleTop来定义合适的坐标系。对象左上角坐标为(ScaleTop,ScaleLeft),右下角坐标为(ScaleLeft+ScaleWidth,ScaleTop+ScaleHeight)。例如,设置窗体Form1的四项属性为:Form1.ScaleLeft=-200 Form1.ScaleTop=250 For
4、m1.ScaleWidth=500 Form1.ScaleHeight=-400,Scale方法:Scale方法可重新定义窗体、图片框、打印机等对象的坐标系。语法格式为:对象名.Scale(X1,Y1)(X2,Y2)其中:对象名可以是窗体、图片框或打印机。如果缺省对象名,默认为带有焦点的窗体对象。(X1,Y1)是对象用户区左上角的新坐标,(X2,Y2)是对象用户区右下角的新坐标。缺省时恢复默认坐标系。执行了Scale方法后,VB根据给定的坐标参数自动计算出新的ScaleLeft、ScaleTop、ScaleWidth、ScaleHeight属性值:ScaleLeft=X1 ScaleTop=Y
5、1 ScaleWidth=X2 X1 ScaleHeight=Y2 Y1所以,通过设置(X1,Y1)、(X2,Y2)可改变坐标单位。,12.1.2 自定义坐标系,12.2 图形控件,图形控件包括直线控件(Line)和形状控件(Shape),它们是VB提供的两种标准控件,利用它们可在窗体、图片框、框架等绘图对象上快速直接地绘制各种简单的线条及形状。定制控件MSChart可在窗体上绘制图表,支持真正的三维显示。本节简单介绍这三个控件的使用。,12.2.1 Line控件,Line控件用于在窗体、图片框和框架中直接画直线或斜线,直线的长短、位置、颜色、形状等由其属性决定。直线的主要属性如下表所示:直线
6、的属性既可以在设计时通过属性窗口来设置,也可以在程序运行的时候动态的改变直线的各种属性。例如在运行时修改直线的宽度:Line.BorderWidth=3,12.2.2 Shape控件,Shape控件可在绘图对象上绘制矩形、正方形、椭圆、圆、圆角矩形以及圆角正方形等几何图形。在设计阶段将该控件加到窗体、图片框或框架中后,即显示为一个几何图形,图形的形状、颜色、形态等由其属性决定,Shape控件的几个主要属性如下表所示:,例 用Shape控件的Shape属性显示Shape控件的6种形状,并填充不同的图案,如图所示:采用Shape控件数组,程序如下:Private Sub Form_Activate
7、()Dim i As Integer Shape1(0).Shape=0 Shape1(0).FillStyle=2 For i=1 To 5 Shape1(i).Left=Shape1(i-1).Left+750 Shape1(i).Shape=i Shape1(i).FillStyle=i+2 Shape1(i).Visible=TrueNext iEnd Sub,12.2.2 Shape控件,12.2.3 MSChart控件,MSChart控件可用于绘制各种图表,支持真正的三维显示,支持所有主要的图表类型。值和数据点可以条形图、折线图、标记图、填充区域图、饼图等形式显示。图表还具有标题、
8、背景、图例、图形和脚注。MSChart是定制控件,文件名为MSCHART20.OCX,部件名为Microsoft Chart Control6.0,使用时先添加到工具箱中。MSChart控件的“属性页”如下图所示:,MSChart控件的主要属性有:ChartData:设置或返回一个值,该值确定一个矩阵的内容是否直接加载到图表的数据格子中,或当图表要求数据时是否返回一个矩阵。ColumnCount:用于设置或返回数据网格的列数。RowCount:用于设置或返回数据网格的行数。Column:用于设置或返回数据网格的当前列。Row:用于设置或返回数据网格的当前行。Data:用于设置或返回数据网格中由
9、Column和Row标识的指定数据点的值。ColumnLabel:设置或返回Column属性指定列的列标题。图表中每一列都有默认的列标题,第i列的默认列标题为Ci。RowLabel:设置或返回Row属性指定行的行标题。默认行标题为Ri。ShowLegend:决定图表中是否显示图例。ChartType:设置或返回数据网格中数据的图表类型。,12.2.3 MSChart控件,【例】用菜单改变下图中的图表的类型。在窗体中添加“图表类型”菜单,其子菜单标题为各种类型名,所有子菜单包括在一个菜单控件数组中,名称为TypeItem。程序代码如下:Private Sub Form_Load()MSChart
10、1.ColumnCount=4:MSChart1.RowCount=3 For i=1 To MSChart1.RowCount MSChart1.Row=i MSChart1.RowLabel=数据&i For j=1 To MSChart1.ColumnCount MSChart1.Column=j MSChart1.ColumnLabel=系列&j MSChart1.Data=i+j Next j,i MSChart1.ShowLegend=TrueEnd Sub(转下页),12.2.3 MSChart控件,(接上页)Private Sub TypeItem_Click(Index As
11、 Integer)Select Case Index Case 0,1,2,3,4,5,6,7,8,9 MSChart1.chartType=Index Case 11 MSChart1.chartType=14 Case 12 MSChart1.chartType=16 End SelectEnd Sub,12.2.3 MSChart控件,12.3 图形方法,VB除提供了图形控件外,还提供了多种绘图方法,因而可在绘图对象上完成复杂图形的设计。窗体和图片框都支持图形方法,可用图形方法在这些对象上作出任何你想到的图形。必须注意:绘图方法只能出现在程序代码中,只有当应用程序运行时才能显示出用绘图方
12、法所绘制的图形。,12.3.1 Pset方法,Pset方法用于在对象绘图区域的某一指定位置上画点并指定颜色。其语法格式为:对象名.Pset Step(x,y),颜色 其中,当颜色参数省略时,缺省颜色为当前绘图对象所设置的前景色;而点的粗细则由绘图对象的DrawWidth属性值决定。Step表示采用相对坐标,省略Step关键字时,(x,y)为画点的绝对坐标,x、y为单精度值。,【例】自定义坐标,用Pset方法在窗体上画正弦曲线。运行结果如图所示。程序代码如下:Private Sub Form_Click()Const Pi=3.1415926Dim x As SingleMe.DrawWidth
13、=2 设置画笔的粗细Me.Scale(-2*Pi,2)-(2*Pi,-2)自定义窗体绘图区域的坐标系统For x=-2*Pi To 2*Pi Step 0.01 在窗体上绘图区域绘制点由点组成的正弦曲线 PSet(x,Sin(x)Next xEnd Sub,12.3.1 Pset方法,12.3.2 Line方法,Line方法用于在窗体或图片框中画直线或矩形。语法格式为:对象名.LineStep(x1,y1)Step(x2,y2),Color,BF 其中:对象名是指在何对象上画线或矩形,省略时指带焦点的窗体。(x1,y1)指定所画直线的起点坐标。带有Step关键字时表示相对坐标;不带时表示绝对坐
14、标;省略时以对象的CurrentX和CurrentY属性确定起点坐标。(x2,y2)指定所画直线终点的相对或绝对坐标。Color为画线指定颜色值,省略时用对象的ForeColor属性,若省略Color而后面还带有选项,则逗号不能省。若选B,则该方法画出以(x1,y1)、(x2,y2)为主对角线的矩形。若选F(也必须选B),则以画矩形框的颜色填充矩形。,Line的语法格式也可以简化为以下三种形式:语法格式一:对象名.Line(xl,y1)(x2,y2),线条颜色 其中:(xl,y1)、(x2,y2)分别为起点、终点的坐标值 语法格式二;对象名.Line(xl,y1)Step(dx,dy),线条颜
15、色 其中:(x1,y1)为起点坐标,(dx,dy)是相对于(x1,y1)的相对距离 语法格式三:对象名.Line(x2,y2),线条颜色 其中:线条起始点为(CurrentX,CurrentY),线条终点为(x2,y2)注意:线条的粗细取决于绘图对象的Drawwidth属性值;线条的样式取决于绘图对象的DrawStyle属性;若在使用画线方法时设置了线条颜色参数,则线条颜色就是参数指定的颜色,否则将由绘图对象的ForeColor属性值来决定线条的颜色。,12.3.2 Line方法,【例】编程在窗体上分别绘制粗细不同和样式不同的水平直线。程序运行结果如下图所示:Private Sub Form_
16、Click()Dim i As Integer For i=1 To 4 Me.DrawWidth=i Line(100,100+i*250)-(2000,100+i*250)Next i Me.DrawWidth=1 For i=1 To 4 Me.DrawStyle=i 用DrawStyle属性设置画笔的样式 Line(2200,100+i*250)-(4000,100+i*250)Next iEnd Sub,12.3.2 Line方法,12.3.3 Circle方法,Circle方法用于画圆、椭圆、圆弧和扇形。其语法格式如下:对象名.Circle Step(x,y),r,Color,弧起
17、始角,终止角度,半径比 其中:对象名是指在何对象上产生Circle方法的结果,省略对象名默认为带焦点的窗体对象。(x,y)为画圆、椭圆或弧的圆心的坐标,关键字Step表示采用当前作图位置的相对值。r指定画圆、椭圆或弧的半径。对象的ScaleMode属性决定所用的度量单位。Color指定所画图轮廓线的颜色,缺省时用对象ForeColor属性。“半径比”指定纵轴和横轴的半径比值。默认值为1时画出的是圆,【例】用Circle方法绘制艺术图案。单击窗体,在窗体中画出如下图所示的的图形。程序代码如下:Private Sub Form_Click()Dim r,x,y,x0,y0 As Single r=
18、Form1.ScaleHeight/4 x0=Form1.ScaleWidth/2:y0=Form1.ScaleHeight/2 For i=0 To 6.283185 Step 3.1415926/20 x=r*Cos(i)+x0:y=r*Sin(i)+y0 Circle(x,y),r*0.9 Next iEnd Sub,12.3.3 Circle方法,12.3.4 与作图相关的其它方法,Cls方法:用于清除绘图区域的所有图形,即用绘图对象的背景色填充整个绘图区域。语法格式:对象名Cls(缺省对象名为当前窗体体)例:消除窗体(Form1)以及图片框对象(Picturel)上所有图形可分别使用
19、 Form1.C1s:Picture1.C1sPoint方法:Point方法用于返回对象中指定点的RGB颜色。语法格式:对象名.Point(x,y)Point方法可用于对图形的分析和处理。,PaintPicture方法:是在绘图对象内或绘图对象之间实现图像的拷贝操作。其语法格式为:对象名.PaintPicture 源图像,x1,y1,Width1,Height1,x2,y2,Width2,Height2 源图像:是在源对象中已装入的图像文件。x1,y1:是指在对象上绘制图形的坐标。Width1,Height1:指定复制图像在目标对象中的宽度和高度。x2,y2:指定图形内剪贴区(即要复制的区域)
20、的坐标,缺省值为0。Width2,Height2:指定源对象中剪贴区宽度和高度;缺省时取源尺寸。,12.3.4 与作图相关的其它方法,Move方法:用以移动MDIForm,Form或控件。其语法格式为:对象名.Move left,Top,Width,Height 对象名:指被移动的对象,如果是Form则指相对屏的左上角而言。Left:左上角的水平(x轴)坐标,Single类型。Top:左上角的垂直(y轴)坐标,Single类型。Width:对象的宽度,Single类型。Height:对象的高度,Single类型。,12.3.4 与作图相关的其它方法,12.4.1 图形的层次,VB在构造图形时,
21、在三个不同的屏幕层次上放置图形的可视组成部分。就视觉效果而言,最上层离用户最近,而最下一层离用户最远。下表列出了三个图形层所放置的对象类型。位于上层的对象会遮盖下层相同位置上的任何对象,同一图形层内控件对象排列顺序称为Z序列。设计时可以通过格式菜单中的顺序命令调整Z序列,运行时可使用ZOrder方法将特定的对象调整到同一图形层内的前面或后面。ZOrder方法的语法格式为:对象名.ZOrderPosition,12.4.2 简单动画设计,在程序运行时通过移动控件或修改图片可产生简单的动画效果。常用的实现简单动画的方法有:修改控件的Left、Top或其它能控制控件位置的属性。用Move方法。该方法
22、可移动窗体或控件的位置或改变其大小,连续调用该方法,逐渐移动对象,即可产生动画效果。切换图片载体对象的Picture属性,使在两个或多个图片之间轮换显示,产生动画。,12.5 综合应用程序设计,例:用pset方法在窗体画五彩碎纸,运行结果见下图所示。程序代码如下:Private Sub Form_Click()Dim CX,CY,Msg,XPos,YPos ScaleMode=3 设置 ScaleMode 为像素。DrawWidth=5 设置 DrawWidth.ForeColor=QBColor(4)设置前景为红色。FontSize=24 设置点的大小。CX=ScaleWidth/2 得到水
23、平中点。CY=ScaleHeight/2 得到垂直中点。Cls(转下页)清窗体。,(接上页)Msg=Happy New Year!CurrentX=CX-TextWidth(Msg)/2 水平位置。CurrentY=CY-TextHeight(Msg)垂直位置。Print Msg 打印消息。Do XPos=Rnd*ScaleWidth 得到水平位置。YPos=Rnd*ScaleHeight 得到垂直位置。PSet(XPos,YPos),QBColor(Rnd*15)画五彩碎纸。DoEvents 进行。Loop 其他处理。End Sub,12.5 综合应用程序设计,本章小结,本章主要介绍了VB坐标系统以及如何定义坐标系统,通过图形控件Shape、Line、MSChart以及图形方法(Pset、Line、Circle等)绘制图形,图形的层次及简单动画设计,并利用实例说明它们的功能和使用方法。,