9.1 图形操作基础

32
9.1 图图图图图图 9.2 图图图图 9.3 图图图图 图 9 图 Visual Basic 6.0 图图图图 图图

Upload: beau

Post on 16-Mar-2016

96 views

Category:

Documents


8 download

DESCRIPTION

第 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 中有两种方法用于坐标系的定义。. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 9.1    图形操作基础

9.1 图形操作基础

9.2 图形控件

9.3 图形方法

第 9 章 Visual Basic 6.0 图形处理

退出

Page 2: 9.1    图形操作基础

9.1 图形操作基础9.1.1 坐标系统

9.1.2 自定义坐标系

9.1.3 使用 Visual Basic 颜色

Page 3: 9.1    图形操作基础

9.1.1 坐标系统构成一个坐标系,需要三个要素:坐标原点、坐标度量单位、坐标轴的长度与方向。坐标度量单位由容器对象的 ScaleMode 属性决定。

• 表 6 . 1 ScaleMode 属性设置属性设置 单 位0 用户定义1 Twip (缺省值)2 磅( point ,每英寸 72 磅)3 像素( Pixed ,与显示器分辨率有关)4 字符(缺省为高 12 磅宽 20 磅的单位)5 英寸( inch , 1inch=1440 Twip )6 毫米( millimeter )7 厘米( centimeter )

Page 4: 9.1    图形操作基础

9.1.2 自定义坐标系VB 中有两种方法用于坐标系的定义。

方法一:通过对象的 ScaleTop 、 ScaleLeft 、 ScaleWidth和 ScaleHeigh 四项属性来实现。它们不仅可以用来设置标度系统,而且可以用于获取当前标度系统的信息。方法二:采用 Scale 方法来设置坐标系。该方法是建立用户坐标系最方便的方法,其语法如下:[ 对象. ]Scale[(xLeft , yTOp)-(xRight , yBotton)]

Page 5: 9.1    图形操作基础

[ 例 9-1] 本例用窗体内两个命令按钮的单击事件说明用 Scale 方法改变坐标系统后产生的影响,命令 Line ( 0 , 0 ) - ( 1500 ,1500 )表示从坐标原点到( 1500 , 1500 )画一根直线。

Private Sub Command1_Click() Cls Form1.Scale ’ 采用缺省坐标系 Line (0, 0)-(1500, 1500)End SubCommandl_Click 事件采用缺省坐标系,坐标原点在窗体的左上角,此时, Height=36

00 , Width = 4800 , ScaleHeight = 3195 , ScaleWidth = 4680 ( twip )Private Sub Command2_Click() Cls Form1.Scale (0, 1500)-(1500, 0) ’ 定义用户坐标系 Line (0, 0)-(1500, 1500)End SubCommand2_Click 事件定义用户坐标系,坐标原点在窗体的左下角, X 轴的正向向左,

Y 轴的正向向上,窗体的左上角坐标为( 0 , 1500 ),右下角坐标为( 1500 , 0 )。此时, Height=3600 , Width=4800 , ScaleHeight=-1500 , ScaleWidth = 1500 ( twip )。程序运行后,单击 Commandl ,结果如图 6 . 1 中左图所示,单击 Command2 ,结果如图 9-1 中右图所示。

Page 6: 9.1    图形操作基础

图 9-1 改变坐标系产生的影响

Page 7: 9.1    图形操作基础

9.1.3 使用 Visual Basic 颜色Visual Basic 提供了两个选择颜色函数 QBColor 和 RGB ,其中 QBColor 函数能够选择 16 种颜色:

• 表 9-2 QBColor 函数可选择的颜色函数 效果 函数 效果

QBColor(0) 黑色 QBColor(8) 灰色QBColor(1) 蓝色 QBColor(9) 亮蓝色QBColor(2) 绿色 QBColor(10) 亮绿色QBColor(3) 深青色 QBColor(11) 亮青色QBColor(4) 红色 QBColor(12) 亮红色QBColor(5) 品红色 QBColor(13) 亮品红色QBColor(6) 深黄色 QBColor(14) 亮黄色QBColor(7) 纸 QBColor(15) 亮白色

RGB 函数能够选择更多的颜色,此函数有三个参数。语法格式如下:RGB(R , G , B)

Page 8: 9.1    图形操作基础

9.2 图形控件9.2.1 Line (画线工具)

9.2.2 Shape (形状)

返回 退出

9.2.3 图像框( Image )控件

9.2.4 图片框 (Picture Box) 控件

Page 9: 9.1    图形操作基础

9.2.1 Line (画线工具)• ( 1 )单击工具箱中的 Line 图标;• ( 2 )移动鼠标到要画线的起始位置:• ( 3 )按下鼠标左键并拖曳鼠标到要画线的结束处,放开鼠标左键。• ( 4 )打开属性窗口,设置线条属性,如线条风格、线条颜色等。• ( 5 )需要对设置好的线条进行调整时,可再单击该线条,通过鼠标的拖动来改变线条的大小或位置,或通过属性窗口来改变属性值。

使用线条控件的操作步骤:

Page 10: 9.1    图形操作基础

线条控件的主要属性:1) BorderStyle 属性 : 设置线条的类型。各个属性值代表的线条类型如下:0 透明线 1 实心线2 长划线 3 点线4 点划线 5 点点相间的长划线6 内部实线如图 9-2 是 BorderStyle 属性设置为不同值时线条的形状。

图 9-2 BorderStyle属性设置为不同值时线条的形状

Page 11: 9.1    图形操作基础

2) BorderWidth 属性 : 设置线条的宽度,即线条的粗细。BorderWidth 属性受 BorderStyle 属性设置的影响,不同 BorderStyl

e 属性线条的 BorderWidth 计算方式不同,如表 9-3 所示。表 6.3 BorderStyle 属性对 BorderWidth 属性的影响

BorderStyle属性设置值 对 BorderWidth属性的影响0 BorderWidth设置被忽略1~5 边界宽度从中心开始计算6 边界宽度从外向内计算

如果 BorderWidth属性设置值大于 1,则 BorderStyle属性的有效值是 1(实心线)和 6(内部实线),因为点划线的线宽不能大于一个像素。也就是说,对于 BorderStyle属性为 2~4的线条控件,如果设置 BorderStyle属性值大于 1,则其表现形式会同实心线一样。3) BorderColor属性设置线条的颜色。

Page 12: 9.1    图形操作基础

9.2.2 Shape (形状)• 使用形状控件的操作步骤: ( 1 )单击工具箱中的 Shape 控件按钮。 ( 2 )在窗体上画出形状。 ( 3 )设置属性,定制形状的外观。 ( 4 )调整设置好形状。可单击形状使其成为可编辑状态,通过鼠标拖动改变其大小和位置,再用属性窗口设置属性,使其符合要求。

Shape 控件可以用来画矩形、正方形、椭圆、圆、圆角矩形及圆角正方形。当 Shape 控件放到窗体时显示为一个矩形,通过 Shape属性可确定所需要的几何形状。

Page 13: 9.1    图形操作基础

形状控件的主要属性:1 ) Shape 属性:设置其显示形状。如表 9-4 所示。

Shape 属性值 描述0 矩形1 正方形2 椭圆3 圆4 圆角矩形5 圆角正方形

2) FillStyle 属性:设置 FillStyle 属性可以构成不同的填充效果。FillStyle 属性可以在 0-7之间取值。如表 9-5 所示。

FillStyle 属性值 描述0 实心1 透明2 水平线3 垂直线4 左上对角线5 右下对角线6 交叉线7 对角交叉线

表 9-4 形状控件的 Shape 属性 表 9-5 形状控件的 FillStyle 属性

Page 14: 9.1    图形操作基础

[ 例 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 iEnd Sub

图 6.3 Shape属性确定的形状

Page 15: 9.1    图形操作基础

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

•Stretch 属性当 Stretch 属性设置为 True 时 , 所装入的图形能够自动缩放以适应图像框的大小。

Page 16: 9.1    图形操作基础

•Picture 属性Picture 属性与图像数据有关。为显示一幅图像,需要对 Picture属性赋值。可以用 LoadPicture 方法 ,也可用其他图像框或图片框的图像数据来赋值。下面是使用 LoadPicture 的例子:Image1.Picture=LoadPicture(“c:\windows\winupd.ico”)把图像框 2 的图像赋给图像框 1 的例子是:Image1.Picture= Image2.Picture把图片框 1 的图像赋给图像框 1 的例子是Image1.Picture= Picture1.Picture

Page 17: 9.1    图形操作基础

•用图像框控件设计动画程序动画就是一个接一个显示图片的过程。让一系列图片连续显示,利用人视角暂留特性,可以产生动画效果。下面这个程序实现蝴蝶在原地的飞舞。

图 9-4 窗体格式

Page 18: 9.1    图形操作基础

对象 属 性 设 置Form Name

CaptionForm1蝴蝶程序 1

Timer NameEnabledInterval

Timer1True250

CommandButton NameCaption

Command1 开始 (&S)

CommandButton NameCaption

Command2 停止 (&X)

Image NameVisibleStretchPictureIndex

Image1FalseTrueD:\yang\buffer1.bmp0

Image NameVisibleStretchPictureindex

Image1FalseTrueD:\yang\buffer2.bmp1

Image NameVisibleStretchPicture

Image2TrueTrue(无)

表 9-6 窗体对象属性表

Page 19: 9.1    图形操作基础

程序代码如下:Option Explicit Dim gRotateFlag As Integer , gCurrentBtf As IntegerPrivate Sub Command1_Click() If gRotateFlag = 0 Then gRotateFlag = 1 : Command1.Caption = "停止 (&X)" Else gRotateFlag = 0 : Command1.Caption = " 开始 (&S)" End IfEnd SubPrivate Sub Command2_Click() EndEnd SubPrivate Sub Form_Load() gRotateFlag = 0 : gCurrentBtf = 0End SubPrivate Sub Timer1_Timer() If gRotateFlag = 1 Then Image2.Picture = Image1(gCurrentBtf).Picture : gCurrentBtf = gCurr

entBtf + 1 If (gCurrentBtf = 2) Then gCurrentBtf = 0 End If End IfEnd Sub

Page 20: 9.1    图形操作基础

9.2.4 图片框 (Picture Box) 控件

图形框对象 .Picture= LoadPicture(“ 图形文件名” )

图片框的属性:1 ) Picture 属性 : 设置被显示的图片文件名(包括可选的路径名),在程序运行时可以使用 LoadPicture() 在图形框中装入图形。其格式为:

2 ) Autosize 属性 : 调整图像框的大小以适应图形尺寸。3 ) Width 和 Height 属性这两个属性设置图片框控件的实际大小,它们总是表示空间容器的单位。4) Left 和 Top 属性Left 和 Top 属性是图片框控件左上角的坐标,用容器的坐标系表示。5) ScaleMode 属性ScaleMode 属性设置或返回控件的当前坐标系。

Page 21: 9.1    图形操作基础

6) SCaleWidth 和 ScaleHeight 属性这两个属性是当前坐标系单位的控件内部尺寸。

7 ) ScaleLeft 和 ScaleTop 属性 ScaleLeft 和 ScaleTop 属性是用户定义坐标系中控件左上角的坐标。 ScaleLeft 是 x 坐标的最小值,其最大值为 ScaleLeft + ScaleWidth 。

Page 22: 9.1    图形操作基础

9.3.1 PSet 方法9.3.2 Line 方法

9.3 图形方法

返回 退出

9.3.3 Circle 方法9.3.4 Point 方法

9.3.5 建立绘制曲线的程序

Page 23: 9.1    图形操作基础

9.3.1 PSet 方法• PSet 方法在指定位置用指定颜色画点。其语法格式如下:

[ 对象 ] . Pset[Step](X,Y)[Color]

其中,对象是使用 PSet 方法的对象名,可以是窗体和图片框; Step 为可选参数,加入此参数表明所画的点位于相对当前点的 (X ,Y) 处; (X , Y) 为点的位置坐标; Co1or 参数可选,用于设置点的颜色。

Page 24: 9.1    图形操作基础

[例 9-3]:如下图 9-5电子贺年卡。使用 Pset方法在窗体上画 100个大小不同的随机点,点的颜色也随机变化。

图 9-5 电子贺年卡

Page 25: 9.1    图形操作基础

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 IfEnd Sub

Page 26: 9.1    图形操作基础

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 个像素。

Page 27: 9.1    图形操作基础

例 9-4 :绘制线宽大于 1 个像素的直线时, Visual Basic将线宽分布到指定坐标的两边。如果 DrawStyle 属性设置为 6( 内实线 ) ,则整个形体 ( 线、框、圆 ) 画在指定坐标内部。本程序代码利用 Line 方法在一个窗体上画坐标轴与坐标刻度:Dim x As SingleDim y As SinglePrivate Sub Form_Load() Me.ScaleMode = 6 x = Me.ScaleWidth / 2 y = Me.ScaleHeight / 2End Sub

Page 28: 9.1    图形操作基础

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 ytEnd Sub

Page 29: 9.1    图形操作基础

9.3.3 Circle 方法Circle 方法用来画圆、椭圆、弧等。它的语法格式如下:[ 对象 ].Circle[Step](x,y),radius[,[color][ , [start][,end][,aspet]]

Page 30: 9.1    图形操作基础

[例 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 iEnd Sub 图 9-6绘制艺术图案

Page 31: 9.1    图形操作基础

9.3.4 Point 方法• Point 方法用于返回指定点的 RGB 颜色,其语法格式如下:• [ 对象 .]Point(x,y)

Page 32: 9.1    图形操作基础

9.3.5 建立绘制曲线的程序Line方法和 Circle方法足以画出棒图或饼图,但如何画出图 6.6所示的数学曲线呢 ?对于这类曲线,需要用程序画出曲线上的每一点。下面一步步完成这个程序。

首先定义坐标系,为了避免作坐标运算,用 Scale方法对坐标系定义的代码如下:Picture1. Scale (-2*pi, 1)-(2*pi,-1)其中, pi为变量,存贮 л的值。定义了坐标系,接下来就是绘制工作。使用 Line万法连接相邻的两点,构成完整的曲线。这段代码如下:Private Sub Command1_Click()Dim i, pipi = 4 * Atn(1)Picture1.Scale (-2 * pi, 1)-(2 * pi, -1)Picture1.CurrentX = -2 * piPicture1.CurrentY = 0For i = -2 * pi To 2 * pi Step 0.01Picture1.Line -(i, Cos(2 * i) * Sin(3 * i))NextEnd Sub

图 9-8绘制出的曲线

图 9-7 函数 Cos(2 * i) * Sin(3 * i)