第12章图形操作

Download Report

Transcript 第12章图形操作

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