Visual Basic 语 言 程 序 设 计第 9章 图形操作
VB提供图形控件主要有,PictureBox,Image、
Line,Shape。 VB提供的图形方法有 PSet、
Line,Circle等。
Visual Basic 语 言 程 序 设 计
9.1 图形操作基础
9.1.1 标准坐标系统
1.ScaleMode属性
每个容器都有一个坐标系,构成一个坐标系需要有三个要素:坐标原点、坐标度量单位、坐标轴的长度方向。坐标度量单位由容器对象的 ScaleMode属性决定,
ScaleMode属性设置如表 9.1所示。
Visual Basic 语 言 程 序 设 计表 9.1 ScaleMode属性设置
属性值 单 位 说 明
0 用户定义 User
1 缇 Twip缺省值
2 磅 Point
3 像素 Pixed
4 字符 Charecter缺省为高 12磅,宽 20磅
5 英寸 Inch
6 毫米 Millimeter
7 厘米 Centimeter
Visual Basic 语 言 程 序 设 计
2.ScaleMode属性值的换算
(1)标准坐标系使用的长度单位:在标准坐标系统中使用的长度单位可以是缇、磅、像素、字符、英寸、
毫米和厘米。
ScaleMode属性缺省时是以缇 (Twip)为单位的标准坐标系统,原点在左上角,X轴向右,Y轴向下。
(2)这些长度单位之间的换算关系:
1英寸 =75磅 =1440缇 ≈ 25.4毫米; 20个缇 (Twip)为 1磅
Point。一个字符的宽度是 120缇、高度是 240缇。这一度量单位规定的是对象打印时的大小,屏幕上的物理距离可因监视器的尺寸而异。
Visual Basic 语 言 程 序 设 计
2.ScaleMode属性值的换算
(3)像素单位与输出设备有关。使用像素为长度单位时,对象的实际大小将与输出设备的分辨率有关。例如,同是 100
个像素的长度,在低分辨率时的实际长度要比高分辨率时的实际长度要长一些。但其他长度单位却与设备无关,因此像素与其他长度单位之间不存在固定的换算关系。
(4)ScaleMode属性可以设置或查询窗体使用的坐标系统。
当 ScaleMode属性的值为 0时是自定义坐标系统,坐标轴的方向和长度单位由 ScaleLeft,ScaleTop,ScaleWidth,ScaleHeight属性决定,若设置了 4个属性之一,系统将自动把 ScaleMode属性设置为 0。
Visual Basic 语 言 程 序 设 计
9.1.2 自行定义坐标系
在 VB的窗体对象中也可以使用自定义的坐标系统。在自定义坐标系统中,可以任意规定坐标轴的方向,使用任意的长度单位。
对于窗体来说,Left,Top,Width和 Height
属性的单位永远是缇。其中 Left,Top分别是窗体的外边框到屏幕左边、上边的距离;
Width和 Height分别是包括窗体的边框和标题栏在内的宽度和高度。
Visual Basic 语 言 程 序 设 计
9.1.2 自行定义坐标系
方法 1:通过对象的 ScaleLeft,ScaleTop,ScaleWidth、
ScaleHeight属性来实现。
标准坐标系统中,ScaleLeft和 ScaleTop属性总是 0; ScaleWidth和
ScaleHeight属性则是根据坐标系统的长度单位计算的内部区域的实际宽度和高度。
ScaleLeft和 ScaleTop属性的值用于控制对象左上角坐标,所有对象的 ScaleLeft和 ScaleTop属性的缺省值为 0,坐标原点在对象的左上角。当改变 ScaleTop或 ScaleLeft的值后,坐标系的 X轴或 Y轴按此值平移形成新的坐标原点。右下角坐标值为
(ScaleLeft+ScaleWidth,ScaleTop+ScaleHeight)。根据左上角和右下角坐标值的大小自动设置坐标轴的正向。 X轴与 Y轴的度量单位为分别为 1/ ScaleWidth和 1/ ScaleHeight。
Visual Basic 语 言 程 序 设 计
9.1.2 自行定义坐标系
【 例 9.1】 在窗体的单击事件中,用属性定义窗体的坐标系。
【 例 9.2】 在窗体中单击命令按钮,用 Scale
方法定义窗体的坐标系。
Visual Basic 语 言 程 序 设 计
9.2 绘图属性
本节主要介绍当前坐标、画线宽度属性、线型样式属性、图形填充属性、颜色函数等。
9.2.1 当前坐标 CurrentX和 CurrentY属性:给出对象在绘图时的当前坐标。
说明:对象是指窗体、图形框或打印机。
当重新设置窗体的坐标系统时,CurrentX和 CurrentY的值也将自动改变,但这两个数为坐标的点的实际位置并不改变。
【 例 9.3】 使用 CurrentX和 CurrentY属性,在窗体上输出如图 9.3
所示的立体字效果。
Visual Basic 语 言 程 序 设 计
9.2.2 线宽
(1)DrawWidth属性
该属性用于设置使用窗体或图片框对象的作图方法画线时以像素为单位的线宽,其取值范围在
1~32 767之间。当 DrawWidth属性的值较大时,
画出的线就有一定的宽度。
(2)BorderWidth属性
该属性用于使用控件时定义线的宽度。
【 例 9.4】 在窗体上画一系列宽度递增的直线。
如图 9.4所示。
Visual Basic 语 言 程 序 设 计
9.2.3 线型样式
(1)DrawStyle属性
该属性决定作图方法画线时的线型样式。
0——实线 (缺省 )
1——虚线
2——点线
3——点划线
4——双点划线
5——透明线 (无线 )
6——内实线
说明:当 DrawWidth属性值大于 1并且 DrawStyle属性值为
1~ 4时,都能产生实线效果。
Visual Basic 语 言 程 序 设 计
9.2.3 线型样式
(2)BorderStyle属性
该属性用于使用控件时给出画线的样式。
0——透明线
1——实线 (缺省 )
2——长划线
3——点线
4——点划线
5——点点划线
6——内实线
Visual Basic 语 言 程 序 设 计
9.2.4 填充
封闭图形的填充方式是由 FillColor属性与 FillStyle属性决定的。
(1)FillColor属性
该属性指定填充图案的颜色,缺省颜色与 ForeColor相同。
(2)FillStyle属性
该属性决定填充封闭图形的图案样式。
0——实心
1——透明
2——水平线
3——垂直线
4——向上对角线
5——向下对角线
6——交叉线
7——对角交叉线
Visual Basic 语 言 程 序 设 计
9.2.4 填充
【 例 9.5】 用 FillStyle属性指定填充的图案,
共有 8种图案。如图 9.5所示。
Visual Basic 语 言 程 序 设 计
9.2.5 颜色函数
1.RGB颜色函数
RGB是一个颜色函数,“R”代表 Red(红 ),“G”代表
Green(绿 ),“B”代表 Blue(蓝 ),通过红、绿、蓝三种基本色混合产生某种颜色。
格式,RGB(红,绿,蓝 )说明:
(1)红、绿、蓝三种基本色使用 0~ 255之间的整数。
(2)从理论上来说,三种基本色混合可产生
256× 256× 256种颜色,但是实际使用时受到显示硬件的限制,普通显示卡只能显示 16种颜色。
Visual Basic 语 言 程 序 设 计例如:
RGB(0,0,0)返回黑色。
RGB(255,0,0)返回红色。
RGB(255,0,255)的含义是无绿色的成分,红和蓝成分相等,效果为紫红色。
这 3个参数的不同值组合,可以产生许许多多种颜色,表 9.2列出了一些颜色的组合。
Visual Basic 语 言 程 序 设 计表 9.2 RGB颜色函数
RGB函数 颜 色
RGB(0,0,0) 黑色
RGB(255,0,0) 红色
RGB(0,255,0) 绿色
RGB(0,0,255) 蓝色
RGB(0,255,255) 青蓝色
RGB(255,0,255) 紫红色
RGB(255,255,0) 黄色
RGB(255,255,255) 白色
Visual Basic 语 言 程 序 设 计
2.QBColor函数
QBColor函数采用 QuickBasic所使用的 16种颜色。
格式,QBColor(颜色码 )
说明:
(1)颜色码使用 0~ 15之间的整数,每个颜色码代表一种颜色。
(2)RGB函数与 QBColor函数实际上都返回一个 6位的 16
进制的长整数,这个数从左到右,每两位一组代表一种基色,他们的顺序是蓝绿红。因此,也可以直接用 6
位的 16进制颜色代码表示。在色彩的属性框中,可以看这些代码。表 9.3列出了 QBColor颜色函数。
QBColor(2)代表绿色,QBColor(4)代表红色。
Visual Basic 语 言 程 序 设 计表 9.3 QBColor颜色函数
颜色值 颜色 颜色值 颜色
0 黑色 8 灰色
1 蓝色 9 亮蓝色
2 绿色 10 亮绿色
3 青色 11 亮青色
4 红色 12 亮红色
5 粉红色 13 亮粉红色
6 黄色 14 亮黄色
7 白色 15 亮白色
Visual Basic 语 言 程 序 设 计
9.3 图形控件
图形控件有直线控件和形状控件两种,本节分别介绍其程序设计方法。
9.3.1 直线控件
直线控件 (Line)用来在窗体和其他容器控件中创建简单的线段,它没有自己的特殊方法,也不产生任何事件。设计和运行时可以通过它的属性来改变它的位置、粗细和颜色等。
Visual Basic 语 言 程 序 设 计
1.直线控件的常用属性
BorderColor,BorderWidth,BorderStyle等。
(1)BorderColor属性设置直线的颜色。
(2)BorderWidth属性设置直线的粗细。
(3)BorderStyle属性设置直线样式。 0~ 6种类型,1—实线,6—内实线。
Visual Basic 语 言 程 序 设 计
2.直线控件的特有属性
x1,x2,y1,y2属性指定起点和终点的 x坐标及 y坐标。
可以通过改变 x1,x2,y1,y2的值,来改变线的位置和长度。
说明:
直线控件没有 Left,Top,Width和 Height属性,运行时也不能用 Move方法决定直线的位置和长短。
【 例 9.6】 在窗体上使用直线控件画 7条线 (其中第 1
条线 BorderStyle=0中透明,显示不出来 ),编写一个命令按钮的单击事件过程,改变它们的颜色及类型。
如图 9.6所示。
Visual Basic 语 言 程 序 设 计
9.3.2 形状控件
使用形状控件 (Shape)可在窗体或其他控件容器中画出矩形、正方形、圆、椭圆、圆角矩形或圆角正方形。形状控件的 Shape属性决定了它的图形样式,这个属性的所有可能取值都有对应的形状样式。
Visual Basic 语 言 程 序 设 计
1.形状控件的常用属性
Left,Top,Width,Height,BorderWidth,BorderColor、
BackColor,FillColor,BorderStyle。
(1)Left,Top,Width和 Height属性决定形状控件的位置和大小,也可以用 Move方法改变它的大小和位置。
(2)BorderWidth属性设置图形边界宽度。它的值是以像素为单位的边线宽度。
(3)BorderColor属性设置图形边界颜色。
(4)BorderStyle属性设置边界线的类型。
(5)FillColor属性设置图形的前景颜色。
如果要为图形填充颜色 (背景 )时,首先应该将属性 FillStyle(填充方式 )设置成 1(透明 ),否则 FillColor(前景色 )的颜色会遮盖了背景色,达不到预期的目的。
例如,将图形的 FillStyle属性的值设为 0(实心,不透明 ),FillColor(填充颜色 )为蓝色,此时,不论 BackColor为何种颜色,都被蓝色所遮盖,如果将
FillStyle改为 1(透明 ),则图形内显示背景色。
Visual Basic 语 言 程 序 设 计
2.形状控件的特有属性
(1)Shape属性
该属性用来设置图形的形状。
0——Rectangle 矩形
1——Square 正方形
2——Oval 椭圆形
3——Circle 圆形
4——Rounded Rectangle 圆角矩形
5——Rounded Square 圆角正方形
Shape属性的缺省值为 0(矩形 )。若选择 3,则用 Shape控件画出的矩形中画出一个圆 (圆的直径是矩形的短边 )。
Visual Basic 语 言 程 序 设 计
2.形状控件的特有属性
(2)BackStyle属性
该属性用来设置图形背景的风格
0——Transparent(透明 )
1——Opaque(不透明 )
缺省值为 0。如果着色,显然要将 BackStyle属性设置为,不透明,。
(3)FillStyle属性
该属性用来设置图形填充的线形 (风格或样式 )。
【 例 9.7】 用 Shape属性显示形状控件的 6种形状。如图 9.7所示。
【 例 9.8】 将形状控件显示不同的形状、设置不同的颜色,填充不同的图案。
Visual Basic 语 言 程 序 设 计
9.4 图形方法
图形方法有 Pset,Line,Circle,本节通过使用作图方法,进行画点、画直线、画矩形、
画圆、画椭圆、画圆弧等。
Visual Basic 语 言 程 序 设 计
9.4.1 PSet方法
格式 (1):[对象名,] PSet[ Step] (x,y)[,颜色]
格式 (2):[对象名,] PRset[ Step] (x,y)[,颜色]
功能,在窗体或图片框上画出一个点。对象缺省时,为窗体。
说明,
(1)Step:可选项,选择该坐标 (x,y)是相对坐标,否则是绝对坐标。
(2)颜色,是指要画点的颜色。缺省时,PSet用,前景色,画点,而 PRset用
,背景色,画点,,这是二者惟一区别。因此用 PSet画点后可以用 PRset擦除。
例如,
Picture1.PSet(1500,1000),RGB(255,0,255)
在图片框 Picture1中 (1500,1000)处画一个紫红色的点。
Visual Basic 语 言 程 序 设 计
9.4.2 Line方法
格式,[对象,] Line[ Step] (x1,y1)-[ Step] (x2,y2)
[,颜色][,B[ F]]
功能,在窗体或图片框上画出一条直线或一个矩形。对象缺省时,为窗体。
说明,
(1)Step:可选项,第一个 Step表示它后面的一对坐标是相对于当前坐标的偏移量,第二个 Step表示它后面的一对坐标是相对于第一对坐标的偏移量。
(2)如果没有参数 B,则是画一条直线。 (x1,y1)与 (x2,y2)是所画直线的左上角和右下角的坐标。
(3)如果有参数 B,画一个矩形,指定参数 F,表示要画的是一个实心的矩形。 (x1,y1)与 (x2,y2)是所画矩形的左上角和右下角的坐标。
Visual Basic 语 言 程 序 设 计例如,
Line(500,300)-
(3000,2500),QBColor(12)
在 (500,300)与 (3000,2500)之间绘制一条红色直线。
Visual Basic 语 言 程 序 设 计例如,
Line(500,300)-(3000,2500),QBColor(4),BF
此时画出一个内部填充红色的实心矩形。
Visual Basic 语 言 程 序 设 计
9.4.3 Circle方法
1.用 Circle方法画圆
格式,[对象名,] Circle[ Step] (x,y),半径[,颜色]
功能,在窗体或图片框上画圆。
说明,Step后面的数字表示相对于当前坐标的位移量。
例如,
Circle(2000,1000),500
Picture1.Circle(1000,400),500,QBColor(12)
Circle Setp(200,300),800
第三行相对坐标的位移量,如果当前的坐标为 (100,100),
则圆心的坐标为 (100+200,100+300),即 (300,400)。以此为圆心,以 800为半径,画一个圆。
Visual Basic 语 言 程 序 设 计
2.用 Circle方法画椭圆
格式,[对象名,] Circle[ Step] (x,y),半径,[颜色],,,纵横比
功能,在窗体或图片框上画椭圆。
说明,纵横比是椭圆两个轴长之比。
例如,
Circle(2000,1000),500,,,,2
Picture1.Circle(1000,400),500,QBColor(12),
,,0.5
Visual Basic 语 言 程 序 设 计
3.用 Circle方法画圆弧及扇形
格式,[对象名,] Circle[ Step] (x,y),半径[,颜色][,起始角][,终止角]
功能,在窗体或图片框上画圆弧及扇形。
说明,
(1)起始角与终止角,为所画圆或椭圆的起始角度与终止角度,单位为弧度,取值为 -2π ~ 2π,缺省时,起始角为 0,
终止角为 2π 。弧度增大方向是逆时针方向。
(2)起始角、终止角均为正时,则只画圆弧 ;如果两者之一为负值时,不仅画圆弧,而且还会从圆心到负值的点画一条直线。
Visual Basic 语 言 程 序 设 计例如,
CONST PI=3.14159
Circle(800,500),500,PI/3,5*PI/4 ’画一段圆弧
Circle(800,500),500,-PI/3,-5*PI/4 ’画一个扇形
Visual Basic 语 言 程 序 设 计
9.5 画图应用
【 例 9.9】 在图片框中用 PSet方法随机地产生若干个彩色的点。窗体上有三个命令按钮,“画点,,,清除,和,退出,。
【 例 9.10】 在窗体中随机地产生若干个彩色的点,并随机画出若干圆。
【 例 9.11】 用 FillStyle属性为矩形填充不同的图案。
【 例 9.12】 用 Circle方法随机画出 16个不同大小和颜色的椭圆。
【 例 9.13】 用 Circle方法画圆弧和椭圆弧。
【 例 9.14】 用 Circle方法画太极图和画圆。
【 例 9.15】 用 Line方法画随机射线。
Visual Basic 语 言 程 序 设 计
9.5 画图应用
利用随机函数 Rnd产生的值在 (0,0.5)与 (0.5,1)之间的分布是相等的。根据坐标系由随机函数产生 X坐标与 Y坐标分布在第一象限,为了得到其他 3个象限的坐标点,可根据 Rnd<0.5取相反值。然后用
Line(0,0)-(X,Y)画线。
【 例 9.16】 用 PSet方法画阿基米德螺线。
【 例 9.17】 用 Circle方法画由圆环构成的艺术图案。
构造图案的算法为:将一个半径为 r的圆周等分为 n份,以这 n个等分点为圆心,以半径 r1画 n个圆。圆的半径 r为窗体高度的四分之一,
圆心在窗体的中心,在圆周上等份 40份。第二个圆半径 r1为第一个圆的半径 r的 80%,结果如图 9.17所示。
当 r1=r*0.7,DrawWidth=2时,等分圆周 20分,如图 9.18所示,当
r1=r*0.6,DrawWidth=3时,等分圆周 10分,如图 9.19所示。