图形操作.docx
《图形操作.docx》由会员分享,可在线阅读,更多相关《图形操作.docx(21页珍藏版)》请在冰豆网上搜索。
图形操作
第12章图形操作
本章要点
●图形操作基础:
VB中的坐标系统;使用颜色。
●使用图形控件绘图:
Line控件和Shape控件。
●使用绘图方法画图:
Line、PSet和Circle方法。
使用图形可以美化应用程序界面,实现特殊的动态图像效果。
在计算机应用中,图形操作是令人感兴趣的部分,同时也是较复杂、较难掌握的内容。
VB提供了丰富的图形操作工具以及功能强大的绘图方法,利用它们可以设计出美观实用的图形应用程序。
12.1图形操作基础
在VB中,图形操作主要是在窗体和图片框(PictureBox)对象上进行。
在讨论具体的图形操作之前,首先需要了解一些与绘图有关的基础知识,包括对象的坐标系统、颜色的使用以及相关的常用属性和方法。
12.1.1坐标系统
VB中的各种可视对象都定位于存放它的容器内。
例如,在窗体内绘制控件或图形,窗体就是控件或图形的容器。
窗体处于屏幕(Screen对象)内,屏幕则是窗体的容器。
如果在图片框内放置控件或绘制图形,该图片框就是控件或图形的容器。
对象在容器内的位置由该对象的Left和Top属性确定。
移动容器时,容器内的对象也随着一起移动,而且与容器的相对位置保持不变。
对象可以在容器内移动,如果将对象的一部分(或全部)移出了容器的边界,则移出部分(或全部)不予显示。
对象定位使用的是容器的坐标系,每个容器都有一个坐标系。
坐标系由三要素构成:
坐标原点,坐标度量单位(刻度),坐标轴的长度与方向。
1.坐标原点与坐标轴方向
在默认的VB坐标系统中,原点(0,0)位于容器内部的左上角,X轴的正向水平向右,Y轴的正向垂直向下。
对于窗体和图片框来说,这里所说的“容器内部”是指可以容纳其他控件并且可用于绘图的区域,该区域称为绘图区或工作区。
绘图区不包括边框,窗体的绘图区还要将标题栏和菜单栏(若有)除外。
因此,窗体中控件的Left属性是指控件左上角到窗体绘图区左边的距离,Top属性是控件左上角到窗体绘图区顶边的距离。
2.坐标刻度
坐标刻度即容器内坐标的度量单位。
VB中默认的刻度为缇(1厘米约为567缇,1英寸约为1440缇)。
刻度由窗体、图片框等容器对象的ScaleMode属性决定,该属性的设置值如195页表12.1所示,其中大于0的设置值称为标准刻度。
改变容器对象的ScaleMode属性值,不会改变容器的大小和它在屏幕上的位置,也不影响坐标原点。
设置该属性后,只是改变容器对象的刻度。
容器的刻度改变后,位于该容器内部的控件也不会改变大小和位置,但是控件大小和位置的计量单位会随容器刻度改变。
例如,在默认情况下,窗体的刻度为缇(ScaleMode=1),在窗体上放置一个命令按钮,设其Height=720,Width=1440,即该按钮的高度为720缇(0.5英寸),宽度为1440缇(1英寸)。
此时若将窗体的刻度改为英寸(ScaleMode=5),VB会自动将命令按钮的Height和Width属性值分别设为0.5和1,而按钮的实际大小并未改变。
改变ScaleMode属性后,VB将重新定义容器对象的坐标度量属性ScaleHeight和ScaleWidth,以便使它们与新刻度保持一致。
这两个属性分别为容器绘图区的高度和宽度。
使用ScaleX和ScaleY方法可以进行不同刻度的换算,语法格式如下:
容器对象.ScaleX(宽度,源刻度,目标刻度)
容器对象.ScaleY(高度,源刻度,目标刻度)
例如,以下代码将100毫米的宽度换算为以缇为单位的宽度数输出:
PrintForm1.ScaleX(100,vbMillimeters,vbTwips)
输出结果为:
5669.286。
如果“源刻度”或“目标刻度”为vbCharacters(字符单位),则ScaleX和ScaleY方法的返回值不同;其他刻度之间的换算,两种方法的返回值相同。
例如:
PrintForm1.ScaleX(1,vbCharacters,vbTwips)'一个字符单位的宽度为120缇
输出结果为:
120。
PrintForm1.ScaleY(1,vbCharacters,vbTwips)'一个字符单位的高度为240缇
输出结果为:
240。
3.自定义坐标系
在实际应用中,有时可能需要改变坐标系的原点、坐标轴的方向或刻度,这时就要建立自己的坐标系。
创建自定义坐标系可以使用容器对象的属性,亦可使用它的方法。
(1)使用Scale属性组
除ScaleMode属性外,VB还为容器对象提供了四个以Scale为前缀的属性,即ScaleLeft、ScaleTop、ScaleWidth和ScaleHeight属性,合称为Scale属性组。
用这些属性可以创建自定义坐标系。
ScaleLeft和ScaleTop属性用于控制绘图区左上角的坐标,默认值均为0,此时坐标原点(0,0)位于绘图区左上角。
如果要移动原点的位置,比如像数学中的笛卡尔(直角)坐标系那样,将原点设在窗体或图片框的中心,就需要改变ScaleLeft和ScaleTop属性值。
ScaleWidth和ScaleHeight属性可用于创建一个自定义的坐标比例尺。
例如,执行语句ScaleHeight=100将改变窗体绘图区高度的度量单位,取代当前的标准刻度(如缇、像素、厘米等),即高度将变为100个自定义单位。
当窗体改变大小时,自定义单位的总数不会改变,仍为100个单位(即始终用0~100的刻度来定义坐标位置),但每个单位所代表的实际距离会发生变化。
比如,无论窗体尺寸怎样变化,50个单位的实际距离始终是绘图区高度的一半。
此外,如果将这两个属性的值设置为负数,则改变坐标轴的方向。
使用上述四个属性,可以建立一个完整的带有正负坐标的坐标系统。
例如,以下程序段可以将窗体绘图区定义为数学中的笛卡尔坐标系(见196页图12.1),即原点(0,0)位于绘图区中心,X轴的正向水平向右,Y轴的正向垂直向上:
ScaleWidth=100'定义宽、高各为100单位
ScaleHeight=-100'负值改变坐标轴方向
ScaleLeft=-50'将原点定位于绘图区中心
ScaleTop=50
上述语句只是改变了坐标系统,要实现图12.1所示的界面效果,需要使用后面介绍的绘图方法。
改变上述四个属性后,VB自动将ScaleMode属性设为vbUser(0)。
也可以为该属性显式赋值:
ScaleMode=vbUser
(2)使用Scale方法
建立自定义坐标系更简单的做法是调用容器对象的Scale方法,语法格式为:
[容器对象.]Scale(x1,y1)-(x2,y2)
说明:
容器对象是指窗体或图片框,省略时默认为当前窗体。
(x1,y1)为左上角的坐标,(x2,y2)为右下角的坐标。
注意两对括号之间的“-”不代表相减。
调用Scale方法后,ScaleLeft和ScaleTop属性分别被设为x1和y1的值。
ScaleWidth属性被设为x2与x1之差,ScaleHeight属性被设为y2与y1之差。
若省略(x1,y1)-(x2,y2),则恢复默认坐标系统,即以容器对象的左上角为坐标原点。
例如,以下语句可在窗体上建立如图12.1所示的笛卡尔坐标系:
Me.Scale(-50,50)-(50,-50)
若将容器对象改为图片框,则可在图片框中建立同样的坐标系。
建立自定义坐标系后,容器内部控件对象的Left、Top属性决定了该控件左上角在容器内的坐标位置,控件的Width和Height属性决定了该控件的大小,这些属性的计量单位总是与容器的刻度单位相同。
12.1.2使用颜色
颜色的使用是绘图操作中的重要环节。
在程序运行时,有四种方式可以指定颜色值:
使用QBColor函数;使用RGB函数;使用内部常数;直接输入颜色值。
1.使用QBColor函数
QBColor函数能够选择早期版本的Basic所规定的16种颜色之一。
语法格式为:
QBColor(颜色值)
颜色值的取值范围为0~15,如197页表12.2所示。
例如:
Picture1.BackColor=QBColor(14)'将图片框的背景色设为黄色
2.使用RGB函数
使用RGB函数能指定任何颜色。
语法格式为:
RGB(红,绿,蓝)
使用该函数时要对三原色(红、绿、蓝)分别赋予从0到255之间的数值,0表示亮度最低,255表示亮度最高。
每一种可见的颜色都是由三原色组合产生。
例如:
Me.ForeColor=RGB(0,0,255)'设窗体前景色为蓝色
Me.BackColor=RGB(0,128,0)'设窗体背景色为绿色,中等亮度
3.使用颜色常数
VB提供了8种颜色常数,已在第2章中介绍过。
例如:
BackColor=vbYellow,这里的vbYellow即为内部常数黄色。
4.使用颜色值
RGB颜色的有效范围为0到16,777,215(&HFFFFFF&)。
每种颜色的设置值(属性或参数)都是一个四字节的整数。
对于这个范围内的数,其高字节都是0,而低三个字节,即从最低字节向左到第三个字节,分别定义了红、绿、蓝三种颜色的值。
红、绿、蓝三种成分都是用0到255(&HFF)之间的数表示。
因此,可以用十六进制数按照下述语法来指定颜色:
&HBBGGRR&
BB指定蓝色值,GG指定绿色值,RR指定红色值。
每个数段都是两位十六进制数,即从00到FF。
中间值是&H80。
因此,下面的数值是这三种颜色的中间值,即灰色:
&H808080&
实际上,使用QBColor函数、RGB函数和内部常数所返回的都是RGB颜色值。
例如,QBColor(9)、RGB(0,0,255)和vbBlue的值均为&HFF0000&,即蓝色。
12.2用图形控件绘图
除图片框和图像框外,VB还提供了两种图形控件:
Line(直线)控件
和Shape(形状)控件
。
它们可用来在窗体、图片框等容器对象表面绘制简单图形。
这两种控件不支持任何事件,只用于表面装饰。
12.2.1用Line控件画线
Line控件可以用来画线。
Line控件主要属性是BorderWidth、BorderStyle和BorderColor属性,以及x1、y1和x2、y2属性。
BorderWidth确定线的宽度,BorderStyle确定线的形状,BorderColor确定线的颜色。
x1、y1和x2、y2属性控制线的两个端点的位置。
198页图12.2展示了BorderWidth和BorderStyle属性不同设置值的效果,以及用Line控件画出的坐标轴。
图中所有控件均在设计时添加并完成属性设置。
也可用控件数组在运行时添加控件。
12.2.2用Shape控件画几何图形
Shape控件可以用来画矩形、正方形、椭圆、圆、圆角矩形及圆角正方形。
将Shape控件添加到窗体时默认为矩形,通过Shape属性可确定所需要的几何形状。
FillStyle属性为形状控件指定填充的图案,FillColor属性用于为形状控件着色。
Shape控件也具有BorderWidth、BorderStyle和BorderColor属性,分别为边线的宽度、样式和颜色。
【例12.1】用Shape控件数组通过Shape属性显示该控件的6种形状,并通过FillStyle属性为其填充不同的图案,如199页图12.3和图12.4所示。
在图12.4中,上面的数字为Shape属性设置值,下面的数字为FillStyle属性的设置值。
按199页图12.3所示在窗体上添加一个Shape控件,设其Index属性为0。
设窗体的背景色为白色。
为窗体的Activate事件过程编写以下代码:
PrivateSubForm_Activate()
DimiAsInteger,jAsIn