第八章 绘图
本章要求:
1.理解 VB中坐标系的概念;
2.掌握用 Line控件, Shape控件画直线, 矩形, 圆
( 弧 ), 椭圆的方法;
3.掌握图片框, 图象框的常用属性, 常用方法, 图
片的载入及应用;
4.掌握用 Pset方法, Line方法, Circle方法画点,
矩形, 圆 ( 弧 ), 椭圆的方法;
本章重点:
本章难点,
VB中坐标系,绘图方法的使用
容器控件的坐标,及用户自定义坐标系
8.1 坐标系统
8.1.1 标准系统
每个容器都有一个坐标系,构成一个坐标系,需要
三个要素,坐标原点、坐标度量单位、坐标轴的长度与方向 。
坐标度量单位由容器对象的 ScaleMode属性决定。缺省时为
Twip。每英寸 1440个 Twip,20个 Twip为一磅。
8.1 坐标系统
8.1.2 用户自定义坐标系统
1、设置坐标系统的刻度单位
列用户可用 ScaleMode属性设置坐标系统的刻度单位 。
ScaleMode属性的取值及含义见 Pg173表 8.1所示 。
在 Visual Basic中可以通过设置 ScaleMode属性来建立新的
坐标系统。建立的新的坐标系统称为自定义系统。
ScaleMode的值 含 义
0-User 用户自己定义
1-Twip 缺省值以 Twip为单位
2-Point 以打印机点为单位, 1P=20Twit
3-Pixel 以相素点为单位
4-Character 对应系统字符的大小
5-Inck 以英寸为单位
6-Millimeter 以毫米为单位
7-Centimeter 以厘米为单位
8.1 坐标系统
8.1 坐标系统
说明:
( 1) 当设置容器对象 ( 例如, 窗体或图片框 ) 的
ScaleMode 属性值 >0, 将 使 容 器 对 象 的 ScaleLeft 和
ScaleTop 自动设置为 0,ScaleHeight 和 ScaleWidth 的度
量单位也将发生改变 。
( 2) 用 ScaleMode属性只能改变刻度单位, 不能改变坐
标原点及坐标轴的方向 。
8.1 坐标系统
定义新的坐标系统格式如下:
[对象,] ScaleLeft= X
[对象,] ScaleTop= Y
建立起的坐标系统,水平方向, 垂直方向的刻度属性分别由
ScaleWidth,ScaleHeight 属性来设置, 其格式如下:
[对象,] ScaleWidth=宽度
[对象,] ScaleHeight=高度
8.1 坐标系统
例如:在窗体中建立两个文本框,把它们分别移到窗体的左上角
和右下角并显示其宽度和高度(相对于窗体),如图所示。
S ub Form_Click()
ScaleLeft=100
ScaleTop=100
ScaleWidth=300
ScaleHeight=300
Text1.Move 100,100
Text1.text=Str$(Text1.Width)
Text2.Move 400 – Text1.Width,400 – Text1.Height
Text2.Text=Str$(Text2.Height)
End Sub
程序如下,
8.1 坐标系统
8.1 坐标系统
例 8.1 将窗体的坐标系统的原点定义在其中心,X轴的
正向向右,Y轴的正向向上,窗体高与宽分别为 200和 300单
位长度。
通过 ScaleTop,ScaleLeft,ScaleWidth和 ScaleHeight
属性实现。
Form1.ScaleLeft = -150
Form1.ScaleTop = 100
Form1.ScaleWidth = 300
Form1.ScaleHeight = -200
8.2 形状控件和直线控件
8.2.1 形状控件 Shape
使用 Shape控件可在窗体、框架或图片框中创建矩形、
正方形、椭圆形、圆形、圆角矩形或圆角正方形等图形。
Shape控件预定义形状是由 Shape属性 的取值决定的 。
Shape属性取不同值对应的形状
8.2 形状控件和直线控件
1.填充方式 ——FillStyle属性
下图是形状控件的 FillStyle属性设置为 0~8时的填充效果
说明:
( 1) FillStyle为 0是实填充, 1为透明方式 。 填充图案的颜
色由 FillColor属性来决定 。
( 2) 对于窗体和图片框对象, Fillstyle属性设置后, 并不
能看到其填充效果, 而只能在使用 Circle 和 Line 图形方法
生成的圆和方框时, 在圆和方框中显示其填充效果 。
8.2 形状控件和直线控件
例 8.2 编写一个程序显示 Shape控件的 6种形状,并设置不同的填充
样式。
Private Sub Form_Click()
Shape1(0).Shape = 0
Shape1(0).FillStyle = 2
Print 0;
Shape1(i).Shape = i
Shape1(i).FillStyle = i + 2
CurrentX = CurrentX + 850
Print i;
Next
End Sub
For i = 1 To 5
Shape1(i).Left = Shape1(i - 1).Left + 1000
8.2 形状控件和直线控件
8.2 形状控件和直线控件
8.2.2 线控件 Line
对于线控件来说, 程序运行时最重要的属性是, X1‖、
,Y1‖,,X2‖,,Y2‖属性, 这些属性决定着线显示时的位
置坐标,, X1‖属性设置 ( 或返回 ) 了线的最左端水平位置
坐标,, Y1‖属性设置 ( 或返回 ) 了最左端垂直坐标,
,X2‖,,Y2‖则表示右端的坐标 。
利用线与形状控件, 用户可以迅速地显示简单的线与
形状或将之打印输出, 与其他大部分控件不同的是, 这
两种控件不会 响应任何事件, 它们只用来显示或打印 。
8.2 形状控件和直线控件
1.BoderStyie属性
该属性用来确定直线的线型,属性值为 0—6,分别表示为以下线型

属性值 说 明
0 透明
1 实线
2 虚线
3 点线
4 点划线
5 双点划线
6 内实线
8.3.1 清屏与画点
1,清屏
[对象,] Cls
作用:清除控件中所有的图形。若省略, 对象,,则表示清除
窗体。
2,画点
[对象,] Pset [Step] (x,y) [,颜色 ]
作用:在指定的位置上用指定的颜色画一个点 。 例如,
Pset (30,40) ?将在当前的窗体上( 30,40)处画一个点
8.3绘图方法
说明:
① x和 y是单精度值 。 缺省时以 Twip为单位 。
② 颜色取值为 1~16777215。 缺省时则将当前使用的 ForeColor
( 前景颜色 ) 值作为属性 。
③ 每次画点后, 画笔停留的这个位置通常称为当前作图位置 。
此位置的 x坐标会自动存在 Currentx的属性中, y坐标会自动
放在 Currenty的属性中 。 例如,
Pset (100,100)
Print Currentx,Currenty
将在 ( 100,100) 处画一点, 并输出 100,100。
④ 一般情况下,x,y为相对于原点( 0,0)的偏移量。如果
选择了 Step项,则 x,y是相对于当前作图位置的偏移量。
8.3绘图方法
程序举例,
Sub Form_Click()
Randomize
For i=1 To 100
X=Rnd ? Form1.Width
Y=Rnd ? Form1.Height
Pset(x,y)
Next I
Print Currentx,Currenty
End Sub
8.3绘图方法
运行上述程序后, 每单击一次窗体, 将在窗体上随机画出
100个点, 并输出最后一点的位置 。 不过此点因点太小, 几
乎看不见 。 由于每次有 100个点出现, 而且位置是随机的,
看上去就像星星闪烁, 如图所示 。
8.3绘图方法
8.3.2画直线
1,Line方法
画直线或矩形:
[对象,] Line [ [Step] (x1,y1)]- (x2,y2)[,颜色 ][,B[F]]
其中:对象可以 是窗体或图形框。
(x1,y1), (x2,y2)为线段的起终点坐标或矩形的左上角右
下坐标。 颜色 为可选参数,指定画线的颜色,缺省取对象的前
景颜色,即 ForeColor
8.3绘图方法
B表示画矩形,F表示用画矩形的颜色来填充矩形。
关键字 Step表示采用当前作图位置的相对值,即从当前
坐标移动相应的步长后所得的点为画线起点。
Sub Form_Click( )
Line– (600,600)
Line (600,600)– (200,800)
Line– (1700,400)
Current x=3900
Current y=200
Line– (4800,2000)
End Sub
一般情况下使用于 twip坐标系统。例:
8.3绘图方法
8.3绘图方法
用 Line方法画网格。
Sub Form_Paint( )
Dim iAs Integer
Cls
Scale(0,0)–(8,8)
For I=1 To 7
Line(0,I)–(8,I)
Line(I,0)–(I,8)
Next I
End Sub
2,设置线型 ——DrawStyle 属性
窗体或图形框或打印机的 DrawStyle属性给出这些对象
上所画线的形状。
8.3绘图方法
设置值 线 型
0 实线 ( 缺省 )
1 长划线
2 点线
3 点划线
4 点点划线
5 透明线
6 内实线
例如, 程序
Sub Form_Click( )
Dim I As Integer
Scaleheight=8
For I=0 To 6
DrawStyle=I
Line( 0,I+1) –( Scalewidth,I+1)
Next I
End Sub
将在窗体上画出 7种不同的线型,如图所示,
其中第 6条线为透明线。
8.3绘图方法
8.3绘图方法
3,线宽
直线的宽度是通过 DrawWidth属性来设置的, 其格式如下:
[对象,] DrawWidth[=线宽 ]
下面的程序可显示出线条宽度的变化 。
Private Sub Form_click()
Dim I As Integer
Pset(scalewidth/2,0)
For I=1 to 100 Step 10
DrawWidth=I
Line–Step(0,ScaleHeight)
Next i
End Sub
运行程序后, 窗体上将画出一条逐渐变粗的线, 如图所示 。
8.3绘图方法
8.2.3 矩形
画直线与画矩形的语句差不多,只是将画直线的选择项, B‖变
成了必选项,而且只能为必选项,否则,画出矩形图形成为直线。
用图形填充的格式如下:
[对象,]FillStyle=图案
图案是一整型数, 其取值范围为 0~7,共有 8种图案,
分别表示如表 8.3所示 。
8.3绘图方法
设置值 图 案
0
1
2
3
4
5
6
7
以 Fillcolor属性设置的颜色填充
透明 ( 缺省 )
水平线
垂直线
对角线 ( 左上到右下 )
对角线 ( 左下到右上 )
交叉线 ( 水平与垂直线交叉 )
交叉线 ( 对角线交叉 )
8.3绘图方法
8.3绘图方法
8.2.4 画圆
在 Visual Basic中可用 Circle方法绘制圆, 椭圆, 弧线 。
画圆的格式如下:
[对象,]Circle[step]( x,y), 半径 [,颜色 ]
功能:以 x,y为圆心, 用指定的半径, 颜色画一个圆 。
8.2.5 画椭圆
画椭圆的格式如下:
[对象,]Circle[Step]( x,y), 半径 [,颜色 ],,,[纵横比 ]
―纵横比, 指的是纵轴 ( y) 与横轴 ( x) 的点数之比, 它的
值为一单精度数 。 当纵横比小于 1.0时, 其格式中的半径为 x,
指的是 x轴, 画出的圆是扁平状;当纵横比大于 1.0时, 指的是
y轴, 画出的圆是高而窄状 。
说明:
8.3绘图方法
8.3绘图方法
举例,讨论下面一段代码的运行结果。
Sub Form_Click()
FillStyle=0
FillColor=RGB(255,0,0)
Aspect=5
x=900:y=500
Circle(x?2,y),450,,,,Aspect
Circle(x?3,y),450,,,,Aspect
Circle(x?4,y),450,,,,Aspect/2
Circle(x,y),450,,,,Aspect/6
Circle(x?2,y),450,,,,Aspect/9
Circle(x?3,y),450,,,,Aspect/15
End Sub
8.3.6 画弧
画弧格式:
[对象,]Circle[Step]( x,y), 半径, [,颜色 ][起始角
终止角 ][,纵横比 ]
下面代码运行后,得到图所示的结果。例:
8.3绘图方法
Private Sub Form_Click()
Scale(–100,100) – (100,–100)
Circle(–78,0),20 ?画圆
Circle(–50,0),20,,,,4 ?画立着的椭圆
Circle(–23,0),20,,,,.4 ?画躺着的椭圆
Circle(0,0),10,,.1,1.8 ?画弧
Circle(20,0),20,,.2,–1.8 ?画一端加径向线的弧
Circle(50,0),20,,–.2,–1.8 ?画扇形
End Sub
8.3绘图方法
8.3.7 颜色
在 Visual Basic系统中,所有的颜色属性都由一个
Long整数表示:
在代码中可使用 4种方式给颜色赋值,
?使用 RGB函数 。
?使用 QBColor函数, 选择 16种 Qbasic颜色中的一种 。
?使用系统提供的颜色常数 。
?直接使用 Long型颜色值 。
8.3绘图方法
一, 使用 RGB函数
RGB函数可返回一个 Long整数, 用来表示一个 RGB颜
色值 。 其使用格式如下:
RGB(red,green,blue)
说明,red,green,blue(红, 绿, 蓝 )3种颜色, 从
0~ 255之间的一个亮度值 (0表示亮度最低, 而 255表示
亮度最高 )。
例如:
Form1.BackColor = RGB(255,0,0) '设定背景
为红色
8.3绘图方法
表部分常见的 RGB值及颜色
RGB函数 RGB返回值 生成颜色
RGB(255,0,0) &HFF 红色
RGB(0,255,0) &HFF00 绿色
RGB(0,0,255) &HFF0000 蓝色
RGB(0,255,255) &HFFFF00 浅蓝色
RGB(255,0,255) &HFF00FF 紫红色
RGB(255,255,0) &HFFFF 黄色
RGB(255,255,255) &HFFFFFF 白色
8.3绘图方法
QBColor函数可返回一个 Long值,用来表示所对应颜色
值的 RGB颜色码。其使用格式如下:
QBColor(color)
说明,color参数是一个界于 0~ 15的整型数,分别
代表 16种颜色,见书上表所示。
二、使用 QBColor函数
8.3绘图方法
三、使用系统定义的颜色常数
在 VB系统中已经预先定义了常用颜色的颜色
常数,如常数 vbRed就代表红色,vbGreen代表
绿色等等。可, 对象浏览器, 中查询常数列表。
8.3绘图方法
四, 直接使用颜色设置值
用十六进制数指定颜色的格式为,&HBBGGRR
其中, BB指定蓝颜色的值, GG指定绿颜色的值, RR指
定红颜色的值 。 每个数段都是两位十六进制数, 即从
00~ FF。
例如, Form1.BackColor = &HFF0000
它相当于,Form1.BackColor = RGB(0,0,255)
例如, 要将窗体的背景色设为红色 。 则可使用如
下语句:
Form1.BackColor = vbRed
8.3绘图方法
例 8.3 编写程序,在窗体上画一个红圆柱,
设计思想,利用循环从上到下画一系列的椭圆,椭圆的边框设定
为红色,最上面的椭圆画成实心的即可,
Private Sub Form _paint()
for i=1 to 100
Circle(1900,1700-i),1000,vbRed,,,3/5
Next I
Me.Fillstyle=0
Me.FillColor=RGB(255,255,255)
Circle(1900,700),1000,,,,3/5
End Sub
8.3绘图方法
8.3绘图方法