图形操作基础
一、坐标系统
为了定位不同对象所处的位置,Visual Basic引入了坐标系统。每个容器控件都具有自己的坐标系统,并且坐标的作用范围只限定在该容器的工作区内。对于窗体而言,它的工作区是除去标题栏和边框的剩余区域。对于图片框,它的工作区是除去边框的剩余区域。
与坐标系有关的属性主要有:
ScaleWidth属性和ScaleHeight属性,设置容器工作区在坐标系中的宽度和高度。
ScaleLeft属性和ScaleTop属性,设置容器工作区左上角在坐标系中的横纵坐标值。
坐标系缺省情况下为系统坐标系,系统坐标系规定容器工作区的左上角为坐标原点,横向向右为X轴正向,纵向向下为Y轴正向。在系统坐标系中可以选择8种坐标刻度单位,但无论选择哪种单位,都不会改变工作区的实际大小,只是改变工作区在坐标系中的宽度(ScaleWidth)和高度(ScaleHeight)。窗体的系统坐标系如图1所示。
二、颜色的表示
在控件中设置前景色(ForeColor属性)、背景色(BackColor属性)、绘制图形或显示文本的时候,均需要使用Visual Basic的颜色值。在Visual Basic中表示不同颜色值的方法四种:
1. 十六进制
颜色值可以用一个六位的十六进制数表示,这个数从左到右,每两位一组代表一种元色,它们的顺序是蓝绿红,例如,&H000000表示黑色、&H0000FF表示红色、&H00FF00表示绿色。其中,&H是16进制数的前导符,表示后面是一组16进制数。
例如,语句Form1.BackColor=&H0000FF 是将窗体的背景色设置为红色。
2.RGB函数
RGB函数返回一个长整型(Long)整数,用来表示一个颜色值。RGB函数通过指定红、绿、蓝三元色的相对亮度,生成一个用于显示的特定颜色。其语法如下:
RGB(red,green,blue)
说明:
red 必选参数,0 到 255 间的整数,代表颜色中的红色成分。
green 必选参数,0 到 255 间的整数,代表颜色中的绿色成分。
blue 必选参数,0 到 255 间的整数,代表颜色中的蓝色成分。
3.QBColor函数
QBColor函数返回一个长整型(Long)数,用来表示对应颜色的RGB颜色码,其语法如下:
QBColor(color)
说明:Color是必选参数,是介于0~15之间的整数,代表16种基本颜色。
例如,QBcolor(0)返回黑色,QBcolor(9)返回蓝色,QBColor(12)返回红色。例如,语句Form1.BackColor = QBColor(12) 是将窗体的背景色设置为红色。
4.颜色常量
在程序代码中还可以使用颜色常量来表示几种常用的颜色值,如vbBlack代表黑色,vbRed代表红色等。例如,Form1.BackColor=vbGreen是将窗体的背景色设置为绿色。
三、线和形状
如果要在容器控件中显示基本图形,如直线或矩形等,可以通过线(Line)控件或形状(Shape)控件来实现。在容器控件中添加线(Line)或形状(Shape)后,设置它们的相应属性值就可以使其显示为不同的直线或形状。需要注意的是,这里的容器控件可以是窗体、框架和图片框。
1. 线控件(Line)可以用来显示直线,其常用属性如下:
(1) BorderStyle:线型样式,它有7种取值,分别对应7种线型。
(2) BorderWidth:线段宽度,默认以像素为单位。
(3) BorderColor:线段颜色。
(4) X1,X2,Y1,Y2属性用来设置或返回线段两端点的坐标。其中,(X1,Y1)表示线段的第1端点坐标,(X2,Y2)表示线段的第2端点坐标。
2. 形状控件(Shape)可以用来显示矩形、正方形、椭圆、圆、圆角矩形及圆角正方形。当把Shape控件添加到容器控件上时,缺省情况下显示矩形,通过改变Shape属性可显示其它几何形状。形状控件的常用属性如下:
(1) Shape:用来设置控件所显示的几何形状。其取值如图5所示,分别对应6种形状。

(2) BorderStyle:线型样式同Line控件。
(3) BorderWidth:边框线宽度,默认时以像素为单位。
(4) BorderColor:边框颜色。
(5) FillStyle:用来设置形状内部的填充图案样式,它有8种取值,如图6所示。当FillStyle值为0时,用FillColor的颜色填充形状。

图6 FillStyle属性决定的内部图案
(6) FillColor:用来设置填充的图案的颜色。默认时FillColor为黑色。
(7) BackColor:用来设置形状内部的背景颜色。
(8) BackStyle:用来设置背景样式,形状是否被指定的颜色填充。其取值见表4。
表4 Shape控件的BackStyle属性
| Backstyle属性值 | 含义 |
| 0-Transparent | 表示形状边界内的区域是透明的。 |
| 1-Opaque | 表示形状边界内由BackColor属性所指定的颜色来填充(默认时BackColor的颜色值为白色)。 |
====================================================================================
实验
设计小球运动的程序
实例1:小球在两条线之间运动
项目分析:通过判断小球的Top属性与两条线的坐标Y1属性的关系,来决定小球的运动方向
项目设计:
(1) 创建界面。新建一个标准EXE工程。在窗体中添加1个形状控件和2条线。
(2) 设置属性。
Shape1的Shape属性设置为1,使其变为圆形, fillcolor属性设置为红色,fillstyle属性设置为0,表示实心的填充,这样才能显示出来红色
Timer1 的 Interval属性设置为 10
(3) 编写代码:
‘这个程序的关键是timer事件的编写,在timer事件中移动小球,top值+s,判断top与两条线的y1的关系,如果超出范围则将s值取反,就可以改变小球的运动方向了
Dim s As Integer, h As Long
Private Sub Form_Load()
Timer1.Enabled = True
s = -80
End Sub
Private Sub Timer1_Timer()
Shape1.Move Shape1.Left, Shape1.Top + s
IfShape1.Top <= Line1.Y1 Then
s = -s
End If
IfShape1.Top + Shape1.Height >= Line2.Y1 Then
s = -s
End If
End Sub
实例2:小球在方框内运动
项目分析:这个程序通过判断小球的left、top属性与方框边框位置的关系,来决定小球的运动方向
项目设计:
(1)创建界面。新建一个标准EXE工程。在窗体中添加2个形状,其中小球为shape1,方框为shape2
(2)设置属性。
Shape1的Shape属性设置为1,fillcolor属性设置为红色,fillstyle属性设置为0,
Timer1 Interval 10
(3)编写代码:
‘与上一个程序不同,这个小球运动时left和top值都需要改变,这样才能达到斜着走的效果。需要判断4个边界,第一条If语句判断小球是否超出方框的左侧或右侧,如果超出范围则将x值取反,即水平方向开始反向,并且改变填充颜色。
下一个IF语句判断小球垂直方向是否超出外框的上方或下方,如果超出则y值取反,即垂直方向开始取反,同时利用QBcolor函数改变小球的颜色,程序运行时就可以产生小球遇到边界就反弹并且变色的效果了。
Dim x As Integer, y As Integer, k As Integer
Private Sub Form_Load()
x = 30
y = 30
End Sub
Private Sub Timer1_Timer()
Shape1.Left = Shape1.Left + x
Shape1.Top = Shape1.Top + y
If Shape1.Left <= Shape2.Left Or Shape1.Left>= Shape2.Width + Shape2.Left - Shape1.Width Then
x = -x
k = (k + 1)Mod 15
Shape1.FillColor = QBColor(k)
End If
If Shape1.Top <= Shape2.Top Or Shape1.Top >=Shape2.Height + Shape2.Top - Shape1.Height Then
y = -y
k = (k + 1)Mod 15
Shape1.FillColor = QBColor(k)
End If
End Sub
-------------------------------------------------------------------------------------------------

