第九章vb60图形程序设计.docx
《第九章vb60图形程序设计.docx》由会员分享,可在线阅读,更多相关《第九章vb60图形程序设计.docx(24页珍藏版)》请在冰豆网上搜索。
第九章vb60图形程序设计
第九章 图形程序设计9.1图形控件
图形控件包括图片框控件、图像框控件、直线控件和形状控件4种,其中图片框和图像框是用来放置图片的,在第5章中已经介绍过,本节介绍另外两种图形控件。
9.1.1直线控件
直线控件用来创建直线。
它的使用方法与其他控件相同,在工具箱中单击直线控件图标,将鼠标移动到窗体上,在所需位置开始拖动鼠标,拖动到合适处后释放鼠标,则在鼠标的拖动起点与终点之间就出现了一段直线,如图9.1所示。
单击直线可选中它,并且在直线的两端出现两个小方块。
将鼠标指针移动到某个方块上,则指针变成一个十字形,此时拖动鼠标,可以更改该直线的长度与方向,如图9.2所示。
也一可以拖动鼠标来改变直线的位置。
直线控件的属性较其他控件要少得多,主要用来设置直线的宽度、颜色以及线型等。
只有直线的宽度为1(BorderWidth=1)时,BorderStyle属性的7个取值才都有效,否则BorderStyle属性的取值只有0和6有效。
例如,直线的宽度为2时,不能将其设置为虚线。
如图9.3所示的是各种线型的比较,从上到下,各直线控件的BorderStyle属性的值依次为1~6。
与其他控件不同的是,直线控件没有任何事件。
因此,在程序运行时,它不能响应用户的任何操作。
9.1.2形状控件使用形状控件可以方便地在窗体上绘制出矩形、正方形、圆、椭圆、圆角矩形和圆角正方形等5种基本几何图形。
使用形状控件的方法与其他控件相同,这里不再赘述。
形状控件的Shape属性是它很主要的一个属性,该属性决定了形状控件所绘制图形的类型。
表9.3中列出了Shape属性的值及含义。
形状控件也有BorderColor、BorderStyle和BorderWidth属性,且含义与直线控件相同。
在默认情况下,使用图形控件绘制出的图形的背景是透明的,这是因为在默认情况下BackStyle属性的值为0〔透明).将该属性的值设置为l.即可在BaekColor属性中指定图形的背景颜色。
形状控件的另一个重要属性是Fi1lStyle属性,该属性用来决定图形的填充样式,表9.4中列出了它的取值及含义。
如果图形的填充样式不是透明的,即Fi1lStyle属性的值不为l.则可以通过Fi1lColor属性设置图形的填充颜色。
图形的各种填充效果,从左到右各图形的Fil1StyIe属性的值依次为0~7。
运行该程序,窗体如图9.7所示。
单击【形状】设置区中的某单选按钮,则右边的图形就会变成所选的形状,单击【填充】设置区巾的某单选按钮,则图形就会以所选的样式填充。
如图9.8所示的是选中【椭圆】与【对角交叉线】单选按钮后的效果。
9.2坐标系统在VB中,控件放置在窗体或图片框等对象中,而窗体又放置在屏幕对象中,这些能够放置其他对象的对象称为容器,如窗体、图片框与屏幕都是容器。
每个容器都有一个坐标系统,以便为对象的定位提供参考。
容器坐标系统的默认设置是:
容器的左上角为坐标的原点。
横向向右为K轴的正方向,纵向向下为Y轴的正方向。
如图9.9所示的是窗体对象的默认坐标系统。
坐标的度量单位由容器对象的ScaleMode属性决定,ScaleMode属性的值与对应的度量单位如表9.6所示。
对象的Left和Top属性决定了该对象左上角在容器内的坐标,Width和Height属性决定了对象的大小,它们的单位总是与容器的度量单位相同。
如果改变了容器的度量单位,则这4个属性的值都会发生相应的变化,以适应新的坐标系统,对象的实际大小与位置并不会改变。
使用默认的坐标系统有时很不方便,用户可以根据具体的需要重新定义容器的坐标系统。
属性ScaleWidth和ScaleHeight的值分别用来设置容器坐标系x轴与Y轴的正方向及最大坐标值。
X轴的度量单位为容器当前宽度的1/ScaleWidth、Y轴的度量单位为对象当前宽度的1/ScaleHeight。
如果ScaleWidth的值小于0,则x轴的正向向上;如果ScaleHeight的值小于0,则Y轴的正向向上。
属性ScaleTop与ScaleLeft的值用来设置容器左上角的坐标。
例如,将窗体的坐标属性设置为如表9.7所示,则对应的窗体坐标系统如图9.10所示,坐标原点定位在窗体的中点。
如果将窗体的坐标属性设置为如表9.8所示,则对应的窗体坐标系统如图9.11所示,坐标原点定位在窗体的左下角,同时Y轴的正方向向上,这是符合人们习惯的一种坐标系统。
自定义坐标系统最简单的方法是使用Sacle方法,其语法如下:
[对象].Scale[(xl,y1),(x2,y2)]
其中对象可以是窗体或图片框,参数(x1,y1)用来定义对象左上角的坐标值,参数(x2,y2)用来定义对象右下角的坐标值。
例如,如图9.50所示的坐标系统可以使用如下语句来定义:
Scale(-50,-50),(50,50)
图9.11所示的坐标系统可以使用如下语句来定义:
Scale(0,100),(100,0)
9.3绘图属性在对象(窗体或图片框)上绘制图形时,还需要设置对象的绘图属性以确定所绘制图形的特征,例如所画线的宽度以及图形的填充样式等。
1.与CurrentX与CurrentY。
属性使用Print方法在窗体或图片框中显示文本时,文本总是出现在当前坐标处。
例如,在默认情况下,第一次使用Print方法输出的文本显示在窗体的左上角。
通过CurrentX与CurxentY属性可以指定当前坐标,这两个属性在设计时不可用。
例如:
PrivateSubForm_Click()
Scale(0,100)-(100,0)"自定义坐标系统
Fori=10To80Step10
Currenty=i"指定当前坐标
Currenty=i
Print“清华大学”
Next
EndSub
运行该程序,文本在窗体上的显示效果如图9.12所示,如果在代码中不使用CurrentX与CurrentY属性指定当前坐标,则窗体上文本的显示效果如图9.13所示。
2.AutoRedraw属性。
如果AutoRedraw属性的值为True,则所绘制的图形是持久的。
即当窗体被隐藏到其他窗口之后或调整了大小,使用Print方法显示的文本或使用图形方法绘制的图形都将重新显示。
如果AutoRedraw属性的值为False,则所绘制的图形是临时的。
当窗体被隐藏到其他窗口之后或调整了大小,窗体上的文本或图形将被掩盖掉。
例如,图9.14中(a)图所示的是在窗体上正常显示的图形和文本,(b)图所示的是将另外一个窗体移动到该窗体上,然后再移走后的效果,可见,被另一窗体掩盖部分的图形和文本消失了。
AutoRedraw属性的默认值为False,在使用Print方法或图形方法时,最好将该属性的值设置为Ture。
3.其他绘图属性。
表9.9中列出了窗体与图片框控件的其他绘图属性。
9.4定义颜色在VB中,颜色是以十六进制数表示的。
例如,在【属性】窗口中设置BackColor与ForeColor等颜色属性时,出现的值总是一个十六进制数。
以十六进制数来设置颜色既不方便也不直观,一般用户很难看出颜色与十六进制数的对应关系。
为此,VB提供了一些颜色常数和颜色函数,使用它们可以方便直观地设置出想要的颜色。
1.颜色常量。
如果程序中只需要使用8种基本颜色,则使用VB提供的颜色常量即可达到目的。
这些常量所代表的颜色可以从它们的名字上看出。
表9.11所示的是8种基本颜色与颜色常量的对应关系。
例如,要将窗体(名称为Form1)的背景色设置为红色,可以使用如下语句:
Form1.BackColor=&HFF.
也可以使用颜色常数来设置,语句如下:
Form.BackColor=VblRed
2.QBColor函数
使用QBColor函数可以设置16种颜色,语法如下:
QBColor(Color)
参数Color是一个0~15的整数,每个整数代表一种颜色,表9.12中列出了该参数的取值与对应的颜色。
例如,下列语句的含义也是将窗体的背景色设置为红色。
Forml.BackColor=QBColor(4)
3.RGB函数。
使用颜色常量和QBColor函数只能指定一些基本的颜色,而使用RGB函数则可以指定几乎所有的颜色。
RGB函数是通过指定红(Red)、绿(Green)、蓝(Blue)三原色的值来定义颜色的,其语法为:
RGB(红、绿、蓝)。
红、绿、蓝三原色的值均为0~255之间的整数,颜色值的不同组合将产生不同的颜色,从理论上讲,三原色混合可以产生256×256×256种颜色。
表9.13中列出了基本颜色与对应的RGB函数。
例如,使用RGB函数设置窗体背景色为红色的语句为:
Forml.BackColor=RGB(255,0,0)
实际上,对于颜色的十六进制数,每两位一组代表一种原色的颜色值,最低两位为红色的值,其次是绿色和蓝色的值。
例如,十六进制数&HOOFFOOFF对应RGB(255,0,255),因此,它表示的颜色为洋红色。
9.5图形方法图形方法是指窗体或图片框控件用于绘图的方法,其中包括Line方法、Circle方法、Pset方法以及PaintPicture方法等。
使用这些方法可以绘制出直线、矩形、圆、椭圆、弧线、扇形、点以及各种曲线。
Line方法用于绘制直线或矩形,其语法格式如下:
[对象].Line[[Step](xl,y1)1-[Step](x2,y2)[,颜色][,B[F].
对象可以是窗体或图片框控件,其中各参数的含义如下:
Step:
该参数是可选的,如果使用该参数,则表示起点坐标(x1,y1)或终点坐标(x2,y2)是相对当前点(CurrentX,CurrentY)的,而不是相对坐标原点的。
(x1,y1):
用于指定直线的起点,也是可选的,如果省略则起点为当前点(CurrentX,CuxrerttY)。
(x2,y2)用于指定直线的终点。
颜色:
可选的。
用于指定所绘制的图形的颜色,可以使用RGB函数或QBColor参数指定颜色。
如果省略,则使用对象(窗体或图片框)当前的ForeColor属性指定的颜色。
B:
可选的。
如果使用该参数,则绘制出的是矩形。
其中(x1,y1)是指矩形左。
上项点的坐标,(x2,y2)是指矩形右下顶点的坐标。
F:
可选的。
只有使用了参数B后才能使用该参数。
如果使用该参数则矩形以指定的颜色填充;省略F时,矩形以对象当前的FiilColor与Fi1lStyle属性的设置填充。
实例9.3使用Line方法。
使用Line方法绘制一个柱状图表,每个柱的填充颜色与样式都不同,并且在柱的正上方标有柱的长度,如图9.15所示。
程序代码如下:
PrivateSubForm_Resize()
Constx0=15
Consty0=20
Cls
Scale(0,100)-(100,0)自定义坐标系统
Line(x0,y0)-(x0,90)绘制Y轴
Line(x0,y0)-(90,yo)绘制x轴
Fori=10To70Step10
FillStyle=i/10设置填充样式
FillStyle=QBColor(i/10-1)设置填充颜色
Line(x0+i,y0+i)-(x0+i+6,yo),,B绘制矩形
CurrentX=x0+i-1
CueeentY=y0+i+8
Print
Next
EndSub
在该段代码中,常量x0和y0是柱状图表的坐标原点,定义这两个常量的好处在于;只要改变这两个常量的值,即可确定图表在窗体中的位置。
例如,将x0与y0的值分别设置为15和20,则图表在窗体中的位置如图9.16所示。
改变窗体的大小后,图表会随着窗体的大小自动缩放,如图9.17所示。
实例9.3产生渐变背景。
许多Windows应用程序的安装界面,是以一个颜色由蓝至黑的渐变窗体为背景的。
使用VB产生窗体背景色的渐变效果很简单,基本思想是:
在窗体中从上至下依次绘制多个矩形,只要有足够多的矩形,同时使它们的填充色从蓝变化到黑,就能很好地模拟出渐变效果了。
代码如下:
PrinvateSubGradient(TheObjectAsObject,Redval,Greenval,Blueval)
DimStep,i,T,L,R,B
Step=(TheObject.Height/60)
T=0
L=0
R=TheObject.width
B=T+Step
Fori=1To60
TheObject.Line(L,T)-(R,B),RGB(Redval,Greenval,Blueval),BF
Redval=Readval-4
Greenval=Greenval-4
Blueval=Blueval-4
IfReadval<=0ThenReadval=0
IfGreenval<=0ThenGreenval=0
IfBlueval<=0ThenBlueval=0
T=B
B=B+Step
Next
EndSub
PrivateSubForm_Resize()
GradientForml,0,0,255
EndSub
首先定义了一个名为Gradient的子过程,在该子过程中,使用了For循环语句来实现在窗体中从上至下依次绘制60个矩形,其中的Line方法是用来绘制矩形的,变量L与T为矩形左上顶点的坐标,R与B为矩形右下顶点的坐标,变量Redval,Greenval,Blueval分别表示红、绿、蓝三原色的值。
在窗体的Resize事件中,以参数Fvrrnl(窗体名)和颜色值(0,0,255)调用子过程Gradient,运行程序后,即可看到窗体具有由蓝至黑的渐变背景。
若以其他颜色值调用该函数,则可得到其他颜色的渐变背景。
改变窗体的大小,渐变色会随着充满整个窗体(要将窗体的AutoRedraw属性设置为True)。
9.5图形方法图形方法是指窗体或图片框控件用于绘图的方法,其中包括Line方法、Circle方法、Pset方法以及PaintPicture方法等。
使用这些方法可以绘制出直线、矩形、圆、椭圆、弧线、扇形、点以及各种曲线。
Line方法用于绘制直线或矩形,其语法格式如下:
[对象].Line[[Step](xl,y1)1-[Step](x2,y2)[,颜色][,B[F].
对象可以是窗体或图片框控件,其中各参数的含义如下:
Step:
该参数是可选的,如果使用该参数,则表示起点坐标(x1,y1)或终点坐标(x2,y2)是相对当前点(CurrentX,CurrentY)的,而不是相对坐标原点的。
(x1,y1):
用于指定直线的起点,也是可选的,如果省略则起点为当前点(CurrentX,CuxrerttY)。
(x2,y2)用于指定直线的终点。
颜色:
可选的。
用于指定所绘制的图形的颜色,可以使用RGB函数或QBColor参数指定颜色。
如果省略,则使用对象(窗体或图片框)当前的ForeColor属性指定的颜色。
B:
可选的。
如果使用该参数,则绘制出的是矩形。
其中(x1,y1)是指矩形左。
上项点的坐标,(x2,y2)是指矩形右下顶点的坐标。
F:
可选的。
只有使用了参数B后才能使用该参数。
如果使用该参数则矩形以指定的颜色填充;省略F时,矩形以对象当前的FiilColor与Fi1lStyle属性的设置填充。
实例9.3使用Line方法。
使用Line方法绘制一个柱状图表,每个柱的填充颜色与样式都不同,并且在柱的正上方标有柱的长度,如图9.15所示。
程序代码如下:
PrivateSubForm_Resize()
Constx0=15
Consty0=20
Cls
Scale(0,100)-(100,0)自定义坐标系统
Line(x0,y0)-(x0,90)绘制Y轴
Line(x0,y0)-(90,yo)绘制x轴
Fori=10To70Step10
FillStyle=i/10设置填充样式
FillStyle=QBColor(i/10-1)设置填充颜色
Line(x0+i,y0+i)-(x0+i+6,yo),,B绘制矩形
CurrentX=x0+i-1
CueeentY=y0+i+8
Print
Next
EndSub
在该段代码中,常量x0和y0是柱状图表的坐标原点,定义这两个常量的好处在于;只要改变这两个常量的值,即可确定图表在窗体中的位置。
例如,将x0与y0的值分别设置为15和20,则图表在窗体中的位置如图9.16所示。
改变窗体的大小后,图表会随着窗体的大小自动缩放,如图9.17所示。
实例9.3产生渐变背景。
许多Windows应用程序的安装界面,是以一个颜色由蓝至黑的渐变窗体为背景的。
使用VB产生窗体背景色的渐变效果很简单,基本思想是:
在窗体中从上至下依次绘制多个矩形,只要有足够多的矩形,同时使它们的填充色从蓝变化到黑,就能很好地模拟出渐变效果了。
代码如下:
PrinvateSubGradient(TheObjectAsObject,Redval,Greenval,Blueval)
DimStep,i,T,L,R,B
Step=(TheObject.Height/60)
T=0
L=0
R=TheObject.width
B=T+Step
Fori=1To60
TheObject.Line(L,T)-(R,B),RGB(Redval,Greenval,Blueval),BF
Redval=Readval-4
Greenval=Greenval-4
Blueval=Blueval-4
IfReadval<=0ThenReadval=0
IfGreenval<=0ThenGreenval=0
IfBlueval<=0ThenBlueval=0
T=B
B=B+Step
Next
EndSub
PrivateSubForm_Resize()
GradientForml,0,0,255
EndSub
首先定义了一个名为Gradient的子过程,在该子过程中,使用了For循环语句来实现在窗体中从上至下依次绘制60个矩形,其中的Line方法是用来绘制矩形的,变量L与T为矩形左上顶点的坐标,R与B为矩形右下顶点的坐标,变量Redval,Greenval,Blueval分别表示红、绿、蓝三原色的值。
在窗体的Resize事件中,以参数Fvrrnl(窗体名)和颜色值(0,0,255)调用子过程Gradient,运行程序后,即可看到窗体具有由蓝至黑的渐变背景。
若以其他颜色值调用该函数,则可得到其他颜色的渐变背景。
改变窗体的大小,渐变色会随着充满整个窗体(要将窗体的AutoRedraw属性设置为True)。
9.5.2Circle方法Circle方法用于绘制圆、椭圆、扇形或弧,其语法格式如下:
[对象。
]Circle[[Step](x,y)],半径[,颜色][,起始角][,终止角了[长短轴比率].
对象可以是窗体或图片框控件,其中各参数的含义如下:
Step:
该参数是可选的,如果使用该参数,则表示圆心坐标(x,y)是相对当前点(CurrentX,CurrentY)的,而不是相对坐标原点的。
(x,y):
用于指定圆的圆心,也是可选的,如果省略则圆心为当前点(CurrentX,GurrentY)。
半径:
用于指定圆的半径,对于椭圆来讲,该值是椭圆的长轴长度。
颜色:
指定所绘制图形的颜色。
起始角、终止角:
用来指定圆弧或扇形的起始角度与终止角度,单位为弧度。
取值范围为0~2π时,绘制的是圆弧:
给起始角与终止角取值前添加一个负号,则所绘制的是扇形,负号表示绘制圆心到圆弧的径向线。
省略这两个参数,则所绘制的是圆或椭圆。
VB规定,从起始角按逆时针方向绘制圆弧只到终止角处,水平向右方向为0度,且与坐标系统无关,如图9.18所示。
长短轴比率:
当需要绘制椭圆时,可使用该参数指定椭圆长短轴的比率。
若值大于1,则所绘制的是竖立的椭圆;若值小于1,则所绘制的是扁平的椭圆。
该值的缺省值为1,即省略时绘制的是圆。
例如,使用下列语句绘制出的各种图形如图9.19所示。
Constpi=3.1415926
PrivateSubForm_Click()
Scale(-100,100)-(100,-100)
Circle(-50,50),30
Circle(50,50),30,vbRed,,,2
Circle(50,50),30,vbRed,,,0.5
Circle(-50,-50),30,vbBlue,pi/6,1.5*pi
Circle(50,-50),30,vbYellow,-pi/6,-5/6*pi
EndSub
实例9.4绘制太极图
使用Circle方法绘制出如图9.20所示的太极图。
代码如下:
Constpi=3.1415926
SubTjt(x,y,r)
FillStyle=1
Circle(x,y),r绘制大圆
Circle(x,y-r/2),r/2,,pi/2,1.5*pi绘制弧线
Circle(x,y+r/2),r/2,,1.5/pi,pi*2
FillColor=vbBlack
FillStyle=0
Cricle(x,y+r/2),r/5绘制小圆
Circle(x,y-r/2),r/5
EndSub
PrivateSubForm_Click()
Tjt3000,1500,1000
Tjt1000,2500,500
Tij1000,1000,400
EndSub
首先定义了一个名为Tjt的子过程,形参x和Y为太极图的圆心,r为半径。
在窗体的Click事件过程中以不同的参数调用Tjt子过程,运行程序,单击窗体后就会在窗体的不同位置绘制出大小不同的太极图。
9.5.3Pset与Pint方法Pset方法用于画点,其语法格式如下:
[对象].Pset[Step](x,y)[,颜色]
参数(x,y)为所画点的坐标,