320 likes | 547 Views
第 9 章 Visual Basic 6.0 图形处理. 9.1 图形操作基础. 9.2 图形控件. 9.3 图形方法. 退出. 9.1 图形操作基础. 9.1.1 坐标系统. 9.1.2 自定义坐标系. 9.1.3 使用 Visual Basic 颜色. 9.1.1 坐标系统. 构成一个坐标系,需要三个要素:坐标原点、坐标度量单位、坐标轴的长度与方向。坐标度量单位由容器对象的 ScaleMode 属性决定。. 表 6 . 1 ScaleMode 属性设置. 9.1.2 自定义坐标系. VB 中有两种方法用于坐标系的定义。.
E N D
第9章Visual Basic 6.0图形处理 9.1 图形操作基础 9.2 图形控件 9.3 图形方法 退出
9.1 图形操作基础 9.1.1 坐标系统 9.1.2 自定义坐标系 9.1.3 使用Visual Basic颜色
9.1.1 坐标系统 构成一个坐标系,需要三个要素:坐标原点、坐标度量单位、坐标轴的长度与方向。坐标度量单位由容器对象的ScaleMode属性决定。 • 表6.1 ScaleMode属性设置
9.1.2 自定义坐标系 VB中有两种方法用于坐标系的定义。 方法一:通过对象的ScaleTop、ScaleLeft、ScaleWidth和ScaleHeigh四项属性来实现。它们不仅可以用来设置标度系统,而且可以用于获取当前标度系统的信息。 方法二:采用Scale方法来设置坐标系。该方法是建立用户坐标系最方便的方法,其语法如下: [对象.]Scale[(xLeft,yTOp)-(xRight,yBotton)]
[例9-1]本例用窗体内两个命令按钮的单击事件说明用Scale方法改变坐标系统后产生的影响,命令Line(0,0)-(1500,1500)表示从坐标原点到(1500,1500)画一根直线。[例9-1]本例用窗体内两个命令按钮的单击事件说明用Scale方法改变坐标系统后产生的影响,命令Line(0,0)-(1500,1500)表示从坐标原点到(1500,1500)画一根直线。 Private Sub Command1_Click() Cls Form1.Scale ’采用缺省坐标系 Line (0, 0)-(1500, 1500) End Sub Commandl_Click事件采用缺省坐标系,坐标原点在窗体的左上角,此时,Height=3600,Width=4800,ScaleHeight=3195,ScaleWidth=4680(twip) Private Sub Command2_Click() Cls Form1.Scale (0, 1500)-(1500, 0) ’定义用户坐标系 Line (0, 0)-(1500, 1500) End Sub Command2_Click事件定义用户坐标系,坐标原点在窗体的左下角,X轴的正向向左,Y轴的正向向上,窗体的左上角坐标为(0,1500),右下角坐标为(1500,0)。此时,Height=3600,Width=4800,ScaleHeight=-1500,ScaleWidth=1500(twip)。 程序运行后,单击Commandl,结果如图6.1中左图所示,单击Command2,结果如图9-1中右图所示。
9.1.3 使用Visual Basic颜色 Visual Basic提供了两个选择颜色函数QBColor和RGB,其中QBColor函数能够选择16种颜色: • 表9-2 QBColor函数可选择的颜色 RGB函数能够选择更多的颜色,此函数有三个参数。语法格式如下: RGB(R,G,B)
9.2 图形控件 9.2.1 Line(画线工具) 9.2.2 Shape(形状) 9.2.3 图像框(Image)控件 9.2.4 图片框(Picture Box)控件 返回 退出
9.2.1 Line(画线工具) 使用线条控件的操作步骤: • (1)单击工具箱中的Line图标; • (2)移动鼠标到要画线的起始位置: • (3)按下鼠标左键并拖曳鼠标到要画线的结束处,放开鼠标左键。 • (4)打开属性窗口,设置线条属性,如线条风格、线条颜色等。 • (5)需要对设置好的线条进行调整时,可再单击该线条,通过鼠标的拖动来改变线条的大小或位置,或通过属性窗口来改变属性值。
线条控件的主要属性: 1) BorderStyle属性:设置线条的类型。各个属性值代表的线条类型如下: 0 透明线 1 实心线 2 长划线 3 点线 4 点划线 5 点点相间的长划线 6 内部实线 如图9-2是BorderStyle属性设置为不同值时线条的形状。 图9-2 BorderStyle属性设置为不同值时线条的形状
2) BorderWidth属性:设置线条的宽度,即线条的粗细。 BorderWidth属性受BorderStyle属性设置的影响,不同BorderStyle属性线条的BorderWidth计算方式不同,如表9-3所示。 表6.3 BorderStyle属性对BorderWidth属性的影响 如果BorderWidth属性设置值大于1,则BorderStyle属性的有效值是1(实心线)和6(内部实线),因为点划线的线宽不能大于一个像素。也就是说,对于BorderStyle属性为2~4的线条控件,如果设置BorderStyle属性值大于1,则其表现形式会同实心线一样。 3)BorderColor属性设置线条的颜色。
9.2.2 Shape(形状) Shape控件可以用来画矩形、正方形、椭圆、圆、圆角矩形及圆角正方形。当Shape控件放到窗体时显示为一个矩形,通过Shape属性可确定所需要的几何形状。 • 使用形状控件的操作步骤: (1)单击工具箱中的Shape控件按钮。 (2)在窗体上画出形状。 (3)设置属性,定制形状的外观。 (4)调整设置好形状。可单击形状使其成为可编辑状态,通过鼠标拖动改变其大小和位置,再用属性窗口设置属性,使其符合要求。
形状控件的主要属性: 1)Shape属性:设置其显示形状。如表9-4所示。 2)FillStyle属性:设置FillStyle属性可以构成不同的填充效果。FillStyle属性可以在0-7之间取值。如表9-5所示。 表9-4 形状控件的Shape属性 表9-5 形状控件的FillStyle属性
[例9-2] 本例显示Shape控件的6种形状,如图6.3所示。 Private Sub Form_Activate() Dim i As Integer Print " 0 1 2 3 4 5" Shape1(0).Shape = 0: Shape1(i).FillStyle = 2 For i = 1 To 5 Load Shape1(i) Shape1(i).Left = Shape1(i - 1).Left + 750 Shape1(i).Shape = i Shape1(i).FillStyle = i + 2 Shape1(i).Visible = True Next i End Sub 图6.3 Shape属性确定的形状
9.2.3 图像框(Image)控件 图像框控件是Visual Basic提供的一种显示图像的控件,它可以从文件中装入并显示下面几种格式的图形:位图、图标、图元文件、增强型图元文件、JPEG和GIF文件。除此之外,图像框控件还响应Click事件,并可用图像框控件代替命令按钮或作为工具条的内容。此外,它还可以用来制作简单动画。图像框两个比较重要的属性是Stretch和Picture。 • Stretch属性 • 当Stretch属性设置为True时,所装入的图形能够自动缩放以适应图像框的大小。
Picture属性 • Picture属性与图像数据有关。为显示一幅图像,需要对Picture属性赋值。可以用LoadPicture方法,也可用其他图像框或图片框的图像数据来赋值。下面是使用LoadPicture的例子: • Image1.Picture=LoadPicture(“c:\windows\winupd.ico”) • 把图像框2的图像赋给图像框1的例子是: • Image1.Picture= Image2.Picture • 把图片框1的图像赋给图像框1的例子是 • Image1.Picture= Picture1.Picture
用图像框控件设计动画程序 • 动画就是一个接一个显示图片的过程。让一系列图片连续显示,利用人视角暂留特性,可以产生动画效果。 • 下面这个程序实现蝴蝶在原地的飞舞。 图9-4 窗体格式
程序代码如下: Option Explicit Dim gRotateFlag As Integer,gCurrentBtf As Integer Private Sub Command1_Click() If gRotateFlag = 0 Then gRotateFlag = 1:Command1.Caption = "停止(&X)" Else gRotateFlag = 0:Command1.Caption = "开始(&S)" End If End Sub Private Sub Command2_Click() End End Sub Private Sub Form_Load() gRotateFlag = 0:gCurrentBtf = 0 End Sub Private Sub Timer1_Timer() If gRotateFlag = 1 Then Image2.Picture = Image1(gCurrentBtf).Picture:gCurrentBtf = gCurrentBtf + 1 If (gCurrentBtf = 2) Then gCurrentBtf = 0 End If End If End Sub
9.2.4 图片框(Picture Box)控件 图片框的属性: 1)Picture属性:设置被显示的图片文件名(包括可选的路径名),在程序运行时可以使用LoadPicture()在图形框中装入图形。其格式为: 图形框对象.Picture= LoadPicture(“图形文件名”) 2)Autosize属性:调整图像框的大小以适应图形尺寸。 3)Width和Height属性 这两个属性设置图片框控件的实际大小,它们总是表示空间容器的单位。 4) Left和Top属性 Left和Top属性是图片框控件左上角的坐标,用容器的坐标系表示。 5) ScaleMode属性 ScaleMode属性设置或返回控件的当前坐标系。
6) SCaleWidth和ScaleHeight属性 这两个属性是当前坐标系单位的控件内部尺寸。 7) ScaleLeft和ScaleTop属性 ScaleLeft和ScaleTop属性是用户定义坐标系中控件左上角的坐标。ScaleLeft是x坐标的最小值,其最大值为ScaleLeft + ScaleWidth。
9.3 图形方法 9.3.1 PSet方法 9.3.2 Line方法 9.3.3 Circle方法 9.3.4 Point方法 9.3.5 建立绘制曲线的程序 返回 退出
9.3.1 PSet方法 • PSet方法在指定位置用指定颜色画点。其语法格式如下: [对象].Pset[Step](X,Y)[Color] 其中,对象是使用PSet方法的对象名,可以是窗体和图片框;Step为可选参数,加入此参数表明所画的点位于相对当前点的(X,Y)处;(X,Y)为点的位置坐标;Co1or参数可选,用于设置点的颜色。
[例9-3]:如下图9-5电子贺年卡。使用Pset方法在窗体上画100个大小不同的随机点,点的颜色也随机变化。[例9-3]:如下图9-5电子贺年卡。使用Pset方法在窗体上画100个大小不同的随机点,点的颜色也随机变化。 图9-5 电子贺年卡
Private Sub Command1_Click() Dim M As String Dim X0, Y0, I As Integer ScaleMode = 0 FontSize = 24 M = "新年快乐!" If Command1.Caption <> "退出" Then Command1.Caption = "退出" Cls CurrentX = Form1.Width / 2 - TextWidth(M) / 2 CurrentY = Form1.Height / 2 - TextHeight(M) Print M For I = 1 To 100 DrawWidth = (DrawWidth + 1) Mod 10 + 1 X0 = ScaleHeight * Rnd Y0 = ScaleWidth * Rnd PSet (X0, Y0), QBColor(Rnd * 15) Next I Else If Command1.Caption = "退出" Then End End If End Sub
9.3.2 Line方法 • Line方法用来画线,窗体和图片框可用此方法在内部画线。此外,还常用Line方法绘制各种曲线,因为任何曲线都可看作是由无数小线段构成的。Line方法的语法格式为: • [对象名].Line[[Step](Xl,Yl)]-[Step](X2,Y2)][,[Color][,B[F]] • 其中,(X1,Y1)和(X2,Y2)为一条线段的起止坐标,(X1,Y1)可以省略,若省略就表示从当前位置开始画到(X2,Y2)点,当前点坐标可用其CurrentX,CurrenttY属性得到,(CurrentX,CurrenttY)为当前点的坐标;step仍是相对意义,加入step后坐标为相对于当前点的坐标;Color用于设置画线的颜色;参数B表示以(X1,Y1)和(X2,Y2)为对角坐标画一方框;加入F表示对矩形框填充。 • 直线的端点坐标表示为控件坐标系中单位。直线的宽度取决于DrawWidth属性,样式取决于DrawStyle属性,它的设置与线条控件的Border Style属性设置相同。 如果线宽超过1个像素,则Draw Style属性的有效设置是l和6,因为点划线的线宽不能大于1个像素。
例9-4:绘制线宽大于1个像素的直线时,Visual Basic将线宽分布到指定坐标的两边。如果DrawStyle属性设置为6(内实线),则整个形体(线、框、圆)画在指定坐标内部。 本程序代码利用Line方法在一个窗体上画坐标轴与坐标刻度: Dim x As Single Dim y As Single Private Sub Form_Load() Me.ScaleMode = 6 x = Me.ScaleWidth / 2 y = Me.ScaleHeight / 2 End Sub
Private Sub Form_click() AutoRedraw = True Line (x, 0)-(x, Me.ScaleHeight), RGB(255, 0, 0) Line (0, y)-(Me.ScaleWidth, y), RGB(255, 0, 0) CurentX = x - 4 CurentY = y + 0.5 Print 0 For xt = -10 To 10 If xt <> 0 Then st = xt * 10 CurentX = x + st - 3 CurentY = y + 0.5 Print xt Line (x + st, y - 1)-(x + st, y), RGB(255, 0, 0) End If Next xt For yt = -5 To 7 If yt <> 0 Then st = yt * 10 CurentX = x - 4 CurentY = y + st - 1 Print yt Line (x, y + st)-(x + 1, y + st), RGB(255, 0, 0) End If Next yt End Sub
9.3.3 Circle方法 Circle方法用来画圆、椭圆、弧等。它的语法格式如下: [对象].Circle[Step](x,y),radius[,[color][,[start][,end][,aspet]]
[例9-5]:用Circle方法在窗体上绘制由圆环构成的艺术图案。构造图案的算法为:将一个半径为r的圆周等分为n份,以这n个等分点为圆心,以半径r1绘制n个圆。设定圆的半径为窗体高度的1/4,圆心在窗体的中心,在圆周上等分50份。如图9-6所示。[例9-5]:用Circle方法在窗体上绘制由圆环构成的艺术图案。构造图案的算法为:将一个半径为r的圆周等分为n份,以这n个等分点为圆心,以半径r1绘制n个圆。设定圆的半径为窗体高度的1/4,圆心在窗体的中心,在圆周上等分50份。如图9-6所示。 Private Sub Form_Click() Dim r, x, y, x0, y0, st As Single Cls r = Form1.ScaleHeight / 4 x0 = Form1.ScaleWidth / 2 y0 = Form1.ScaleHeight / 2 st = 3.1415926 / 25 For i = 0 To 6.283185 Step st x = r * Cos(i) + x0 y = r * Sin(i) + y0 Circle (x, y), r * 0.9 Next i End Sub 图9-6绘制艺术图案
9.3.4 Point方法 • Point方法用于返回指定点的RGB颜色,其语法格式如下: • [对象.]Point(x,y)
9.3.5 建立绘制曲线的程序 Line方法和Circle方法足以画出棒图或饼图,但如何画出图6.6所示的数学曲线呢?对于这类曲线,需要用程序画出曲线上的每一点。下面一步步完成这个程序。 首先定义坐标系,为了避免作坐标运算,用Scale方法对坐标系定义的代码如下: Picture1.Scale (-2*pi, 1)-(2*pi,-1) 其中,pi为变量,存贮л的值。 定义了坐标系,接下来就是绘制工作。使用Line万法连接相邻的两点,构成完整的曲线。这段代码如下: Private Sub Command1_Click() Dim i, pi pi = 4 * Atn(1) Picture1.Scale (-2 * pi, 1)-(2 * pi, -1) Picture1.CurrentX = -2 * pi Picture1.CurrentY = 0 For i = -2 * pi To 2 * pi Step 0.01 Picture1.Line -(i, Cos(2 * i) * Sin(3 * i)) Next End Sub 图9-7 函数Cos(2 * i) * Sin(3 * i) 图9-8绘制出的曲线