您的当前位置:首页正文

VB绘图教程

来源:我们爱旅游
第6章绘图图形是计算机应用中令人感兴趣的内容。VB对图形信息有很强的处理能力,包括使用控件自身的属性方法以各种形式显示图形;提供绘制一般的几何图形的内部控件;还有一批支持直接绘图、动态显示,以及设置颜色的对象属性、函数和方法等。6.1Visual Basic 的坐标系统6.2对象的动态调整6.3图形控件6.4 用代码画图6.5颜色6.1 Visual Basic 的坐标系统坐标系统是绘图的基础.在VB中,屏幕坐标用于窗体的定位,每个窗体都有自己的坐标系统。也就是说,VB的坐标是针对窗体或窗体上的控件而设计的,因此称为对象坐标系统。VB的坐标系统分为默认规格(Default Scale);标准规格(Standard Scale)和自定义(Custom Scale)3类。1.默认规格坐标系2.标准规格坐标系3.自定义规格坐标1.默认规格坐标系

在默认规格坐标中,对象的左上角坐标为(0,0),当沿着水平向右移动和沿垂直轴向下移动时,坐标值增加。对象和Top和Left属性指定了该对象左上角的距原点在垂直方向和水平方向的偏移量。

(0,0)此点确定控件位置每个对象都有自己的尺寸,水平方向的宽度用属性Width来表示,垂直方向的高度用Height来表示。

单位:Twip(默认)、点(Point)、厘米和英寸1厘米约等于567Twip1 英寸约等于1440Twip72点等于1英寸。2.标准规格坐标系

值0文字常数vbUser描述除了用Twip作为坐标系1vbTwips的量度单位外,用户还可以默认值,以Twip为单位使用标准规格选择其他的量2vbPoint以点(Point)为单位度单位。标准规格通过对象的3vbPixels像素“ScaleMode”属性定义。4vbCharacters字符在程序设计阶段,从属性窗口找到5ScaleModevbInches属性并且以英寸为单位单击向下箭头,如图下拉列6vbMillimeters以毫米为单位表中,从中选择所需要的量度规格。7vbCentimeters以厘米为单位注:vbUser和vbPixels不能用于打印机。

自定义ScaleMode属性可在设计阶段设置,也可通过程序代码设置,例如:

Form1.ScaleMode=2Picture1.ScaleMode=7

一般情况下,VB的绘图方法使用以Twip为单位的坐标系统,该系统可由程序员人为地缩放。在传统的程序设计语言中,图形坐标系统通常以像素为单位。像素是组成屏幕上的图形或字符的一个小点,一个像素是一个小亮点的填充区。像素大小与显示器的分辨率有关。分辨越高,像素点越小;反之越大。与象素不同,Twip是逻辑意义上两条坐标线的交点。

像素(3,3)Twip(3,3)3.自定义规格坐标

默认规格和标准规格坐标系都以对象左上角(0,0)为原点,坐标值沿水平方向向右增加,沿垂直方向向下增加并且量度单位都是规范的。VB允许用户定义自己的坐标系统,包括原点位置、轴线方向和轴线“刻度”。

自定义规格坐标系统通过以下4个属性设定:[.]ScaleLeft=x[.]ScaleTop=y

[.]ScaleWidth=[.]ScaleHeight=

默认对象名表示当前窗体。ScaleTop属性值定义对象左上角的坐标值。例如:

Form1.ScaleLeft=100Form1.ScaleTop=50

属性ScaleWidth和ScaleHeight分别设置对象的宽度和高度。例如:

Form1.ScaleWidth=600Form1.ScaleHeight=400

上边四行代码确定了新的坐标系统,坐标原点(0,0)不出现在对象中。

(100,50)

(700,50)

(100,450)

(700,450)

6.2对象的动态调整用程序代码进行对对象的调整称为动态调整。

1.位置和大小调整

对象的位置和大小由Left,Top,Width和Height4个属性决定。

程序中改变这些属性值可以动态地调整对象。实现的方法有两种:

①用赋值语句直接改变属性值;②用Move方法重置属性。

1.位置和大小调整

Move方法调用格式:

[.]Move[,[,[,]]]——对象名,默认为当前窗体名;

——必需,单精度数值表达式,指示对象左边的水平坐标(x轴);

——可选,单精度数值表达式,指示对象顶边的垂直坐标(y轴);

——可选,单精度数值表达式,指示对象的宽度;

——可选,单精度数值表达式,指示对象的高度

例6-1改变窗体的位置和大小。

Private Sub Form_Load()

Dim Inch, Msg

Msg = \"对属性赋值,调整窗体\"MsgBox(Msg)Inch = 1440

Width = 4 * InchHeight = 2 * InchLeft = 0Top = 0

Msg = \"用Move方法调整窗体\"MsgBox(Msg)

Move(Screen.Width / 2, Screen.Height / 2, 2 * Inch, Inch)End Sub

2.闪烁

在应用中往往希望图形呈现闪烁效果,可以通过操作控件的Visible属性实现。例如,以某个时间交替地执行以下两个语句:

Picture1.Visible=0Picture1.Visible=-1上述语句可以简化为一个语句

Picture1.Visible=Not Picture1.Visible

例6-2用计时器控制图片框的闪烁。

Private Sub Form_Load()

Timer1.Interval = 1000End Sub

Private Sub Timer1_Timer()

Picture1.Visible = Not Picture1.VisibleEnd Sub

3.动画

播放动画是指在屏幕上不断地切换一系列相关联的图形,这些图形文件都是预先制作好的。显示图形要用控件作为载体,如果要为每个图形文件设置一个图形控件,显然是十分麻烦的事情。使用Picture对象数组,把一系列图形保存在内存中,对制作动画或要求图像快速变换的应用程序是非常有用的。

例6-3下面看一个使用Picture对象数

组设计动画的例子。VB目录下有一些有用的图形文件,把一组月亮图案拷贝到工作目录下,模拟月相的变化。

首先创建一个新的工程,在窗体模块中定义一个Picture对象数组:

Option Explicit

Dim picmoon(8) As PicturePrivate Sub Form_Load()Dim path As String'注意路径

path = App.path + \"\\\"

'将位图加载到图片对象数组

Set picmoon(0) = LoadPicture(path & \"Moon01.ico\")Set picmoon(1) = LoadPicture(path & \"Moon02.ico\")Set picmoon(2) = LoadPicture(path & \"Moon03.ico\")Set picmoon(3) = LoadPicture(path & \"Moon04.ico\")Set picmoon(4) = LoadPicture(path & \"Moon05.ico\")Set picmoon(5) = LoadPicture(path & \"Moon06.ico\")Set picmoon(6) = LoadPicture(path & \"Moon07.ico\")Set picmoon(7) = LoadPicture(path & \"Moon08.ico\")End Sub

Private Sub Timer1_Timer()Static count As Integercount = (count + 1) Mod 8Me.Picture = picmoon(count)End Sub

程序中使用了Picture对象数组。Picture是VB提供的类,它并不像控件那样出现在工具箱中,但它具有以将位图、图标、元文件、增强元文件,Picture属性,程序运行时可以显示出来。可JPEG在程序中使用等各类图像赋给GIF和面设计时为窗体添加图形控件。当然,也可以用Picture对象操纵图形,而不需要在界Picture对象的Picture属性,语句把控件或窗体的Picture属性赋给Picture对象。

Set运行这个程序时,Me是VB的关键字,它像是隐含声明的变量。Me是一个Picture类的对象名。这个关键字适用于类模块中的每个过程。当类有多个实例(对象)时,供引用具体实例的方法。

Me在代码正在执行的地方提6.3图形控件图片框和图像框用于显示已经存在的图形文件。直线(Line)控件和形状(Shape)控件是用于绘制一般几何图形的控件,使用这两个控件的优点是:所需的系统资源比其他VB控件少,从而能够提高应用程序的性能;另一个优点是:创建图形要用的代码比用图形方法绘图所用的代码少。

1.BorderColor

用于设置直线和形状边界线的颜色。2.BorderStyle

确定直线和形状边界线的线型。值0123456文字常数vbTransparentvbBSSolidvbBSdashvbBSDotvbBSDashDotvbBSDashDotDotvbBSInsideSolid描述透明默认值,实线虚线点线点划线双点划线内收实线1. BorderColor

用于设置直线和形状边界线的颜色。2. BorderStyle

确定直线和形状边界线的线型。3. BorderWidth

指定直线和形状边界线的线条宽度。4. BackStyle

指定控件背景色是否为透明。5. FillColor定义填充颜色。6. FillStyle

定义填充图案模式。7.Shape

确定形状控件所画的几何特征。

例6-4试验Shape控件的6种可能形状及采用不同的线型和填充图案。此例在窗体上建立一个形状控件Shape1;设置一个单选按钮Option1,将Index属性设置为0,创建一个只有一个元素的控件数组。运行下列程序后,每次单击单选按钮能看到一个不同的形状。

Option Explicit

Private Sub Form_Load()Dim i

Option1(0).Caption = \"Shape #0\"For i = 1 To 5

Load Option1(i)

Option1(i).Top = Option1(i -1).Top + Option1(0).Height + 400Option1(i).Caption = \"Shape #\" & iOption1(i).Visible = TrueNext iEnd Sub

Private Sub Option1_Click(Index As Integer)Shape1.Shape = Index

Shape1.BorderStyle = IndexShape1.FillStyle = IndexEnd Sub

使用图形控件绘制简单的几何图形,方法简单,应用程序的运行开销小。但是,图形控件的使用受到了一定的限制:

1.不能出现在其他控件之上,除非它们是在一个容器控件(如图片框)里;2.不能在运行时接收接收焦点;3.不能作为其他控件的容器;4.不具有hWnd属性。

6.4 用代码画图使用窗体或图片框的画图方法比用图形控件要灵活。图形方法可以实现一些图形控件无法达到的视觉效果。

才能看到图形方法的效果。

用图形方法创建图形必须运行应用程序时VB主要画图方法:

方法ClsPsetPointLineCircle

PaintPicture作用

清除所有图形和Print输出画点,设置各个像素的颜色返回指定点的颜色值画线、矩形或填充框画圆、椭圆或圆弧在任意位置画图形文件

Print方法也可以认为是一种图形方法,因为它的输出也是写在对象上,像Pset, Line和Circle方法一样,也要以内存图像的方式进行保存(AutoRedraw设为Ture)。每种图形方法都输出到窗体、图片框或者是打印机

(Printer对象)上,如果省略了图形方法的作用对象,VB就认为画在当前窗体上。

例如,下列语句在不同对象上画一个点:MyForm.Pset(500,500)‘名为MyForm的窗体上

picPicture1.Pset(500,500)‘名为picPicture1的图片框内PSet(500,500)‘当前窗体上

6.4.1 点和线

(1)Cls 方法

格式:[.]Cls

Cls方法用于清除画图区。(2)PSet 方法

格式:[.]PSet(,)[,]例如:

PSet(50,50)

Me.PSet(230,1000)

PSet(50,75),RGB(0,0,255)

6.4.1 点和线

(3)Point方法

返回指定位置处的颜色值。如:PointColor=Point(500,500)(4)Line 方法格式:

[.]Line[()]-(,)[,]

第一对坐标(x1,y1)是可选的。如果省略这对坐标,将把该对象的x,y当前位置作为端点。

6.4.1 点和线

例:画一条

Line (500, 500)-(2000, 2000), RGB(0, 0, 0)CurrentX = 1000CurrentY = 500

Line -(2000, 2000), RGB(0, 0, 255)Line -(1000, 2000)

6.4.1 点和线

(5)Step 关键字

Step 关键字加在坐标点(x,y)之前,表示该坐标值是上一个画图点的相对坐标。例如:

Line(100,200)-(150,250)等价于:

Line(100,200)-Step(50,50)

6.4.2 矩形

可以使用Line方法绘制并且填充矩形。例如:

Line(500,500) –Step(1000,0)Line –Step(0,1000)Line –Step(-1000,0)Line –Step(0,-1000)

6.4.2 矩形B与F选项

VB提供了一个更简单的画矩形的方法。在Line方法中使用B选项时,把指定两个点作为矩形的对角点,可画出一个矩形。所以,可用下列一个语句,代替上述的4个语句:

Line(500,500)-Step(1000,1000),,B

注意:在B之前有两个逗号,以表不颜色参数被省略了。

只要不改变FillStyle 属性的设置值,所画的矩形将是空的。

6.4.2 矩形

填充上述矩形有两种方法:

1、将FillStyle设置为0,然后用FillColor属性的颜色设置,将方框填充为实心。

2、在B之后指定F。当使用F选项时,Line方法将忽略

FillColor和FillStyle属性。使用F选项时,矩形总是被填充为实心。

执行以下语句:

Line(500,500)-Step(1000,1000),,BF

Line(500,500)-Step(1000,1000),RGB(0,0,255),BF

6.4.3 圆和弧

Circle方法可画出圆形和椭圆形,还可画出圆弧。使用变化的Circle方法,可以画出多种曲线。

1.画圆

格式:

[.]Circle[Step](,),[,]其中(,)是圆心的坐标

例如,画一个以(1200,100)为圆心、750为半径的圆:Circle(1200,100),750

这个语句产生的效果,还要依赖于窗体的大小和窗体的坐标系。如果不知道窗体的大小和坐标系,就不能确定这个圆是否可见。以下语句使用绘图对象的标尺属性,将圆心置于窗体的中心处:

Circle((ScaleWidth+ScaleLeft)/2,(ScaleHeight+_ScaleTop)/2),ScaleWidth/4

2.圆弧

为了用Circle方法画出圆弧,应以弧度为单位,给出定义弧线起始角和终止角的角度参数。画圆弧的语法是:

[.]Circle[Step](,),,_[],[],[]

起始角和终止角都时对0弧度的偏移量。画圆弧时,从起始角开始,按逆时针方向到终止角作弧。

例如:起始角为0,终止角为180度,则用Circle(700,700),800,,0,3.14159/2可以画出四分之一的圆弧。

例6-5下面的过程将用消除切片方式画出一个饼。Const Pi = 3.14159265

Circle (1000, 1000), 600, , -Pi / 2, -Pi / 3Private Sub Form_Load()End Sub

3.椭圆

画椭圆需要一个纵横比的参数。方法:

[.]Circle[Step](,),_

[,],[][,]

是正浮点数,决定了所画椭圆的形状。圆的纵横比为1(默认值);

>1时,所画椭圆高而且窄; <1时,椭圆呈扁平状。例如:Circle(1000,1000),500,,,,2

例6-6下列过程演示Circle方法如何使用不同的纵横比参数画椭圆。

Private Sub Form_Load()'画一个实心椭圆FillStyle = 0

Circle (600, 1000), 800, , , , 3'画一个空心椭圆FillStyle = 1

Circle (1800, 1000), 800, , , , 1 / 3End Sub

6.4.4 线宽和线型

1.DrawWidth属性

用来指定图形方法输出时线条的宽度,而BorderWidth属性用来指定直线和形状控件轮廓线的粗细。

2.DrawStyle属性

用于指定图形方法创建的线,是实线还是虚线。

例6-7下列过程将画出几条不同宽度的线。

Private Sub Form_Load()DrawWidth = 1

Line (500, 500)-(3500, 500)DrawWidth = 5

Line (500, 1000)-(3500, 1000)DrawWidth = 8

Line (500, 1500)-(3500, 1500)End Sub

例6-8下列过程序演示DrawStyle属性所支持的各种设置值。该程序建立一个循环,控制变量i从0变化到6,用于改变DrawStyle属性值。

Private Sub Form_Load()

Dim i As Integer, Y As LongFor i = 0 To 6DrawStyle = i

Y = (200 * i) + 500

Line (200, Y)-(3000, Y)Next iEnd Sub

6.4.5 绘制图形文件

PaintPicture方法可以实现在

Form,PictureBox或Printer上绘制裁剪图形文件(.bmp,.wmf,.emf,.cur,.ico或.dib)的内容。格式:

[].PaintPicture,,,[],[],[],[],[],[],[]

该方法把由指定的图形绘制到由指定的窗体、图片框或打印机上。

其中是必需的,表示被绘制的图形源。

6.4.5 绘制图形文件

例如:

Form1.picturePicture2.picture

若图形放在PictureBox上,可以省略属性名称,仅写对象名。

,--必需,均为单精度值。指定在目标对象绘制图形的坐标,度量单位由对象的ScaleMode属性决定。

6.4.5 绘制图形文件

--分别可选,单精度值。指示绘制图形宽度。如果不等于源宽度或源高度,将适当地拉伸或压缩图形。默认时使用源图形的宽度或高度。

当参数为负值时,可以实现图形的水平或垂直翻转。

--可选,单精度值。指示对源图形裁剪的起点坐标,默认为0,0。

--分别可选,单精度值。指示对源图形从开始的宽度和高度。省略时使用整个源图形宽度或高度。

6.4.5 绘制图形文件

--可选,长型值。该参数适用于对位图(.bmp)操作,用来定义把源图形绘制到目标图形的不同方式,即对象素实现不同的位操作,图形绘制效果不一定能预想到,要做观察调度。文字常数值vbDstInvertvbSrcCopy值&H00550009反转目标位图描述将反转的源位图复制到目标vbNotSrcCopy&H00330008&H00CC0020将源位图复制到目标位图vbSrcInvertvbSrcPaint&H00660046用Xor运算合并目标位图和源位图&H00EE0086用Or运算合并目标位图和源位图例6-9窗体上的图片框Picture1放置一个600X600的图形文件,以下程序分别对其做变形、裁剪和翻转处理。

Option Explicit

'把源图形的宽度拉伸成1200,绘制在图片框Picture2中:

Private Sub Command1_Click()

Picture2.PaintPicture Picture1, 0, 0, 1200, 600End Sub

'裁剪源图形上半部分,然后变形绘制在图片框Picture3中Private Sub Command2_Click()

Picture3.PaintPicture Picture1.Picture, 0, 0, 1000, 500, 0, 0, 600, 300End Sub

'对源图形翻转扩大,绘制在窗体上Private Sub Command3_Click()

PaintPicture Picture1.Picture, 4000, 1200, -1000, 1000

PaintPicture Picture1.Picture, 4000, 1200, 1000, -1000PaintPicture Picture1.Picture, 4000, 1200, -1000, -1000End Sub

6.4.6 绘图模式

绘图模式由DrawMode属性设置,决定两种不同颜色的图形混合在一起能够产生什么显示效果。

DrawMode属性把所画的像素与屏幕上的背景像素进行比较,然后执行按位逻辑运算。例如,DrawMode属性设置值为7,则把所画的像素颜色值进行逻辑异或(Xor)运算,产生一个新的显示颜色值在屏幕上显示出来。

可将DrawMode设置为从1到16的值。

例6-10下列代码的作用是:每单击鼠标就移动一个圆,无论圆底下有什么,它都能被还原。

Private Sub Form_Click()

ForeColor = RGB(0, 255, 0)DrawMode = 7

Circle (CurrentX, CurrentY), 1000CurrentX = CurrentX + 220CurrentY = CurrentY + 220

Circle (CurrentX, CurrentY), 1000End Sub

6.5 颜色界面上的彩色图形能够产生更强的视觉效果,因而越来越受到用户的重视。在VB中,窗体、控件、图形以及文字信息都可以用不同的颜色显示。对于所有的颜色属性和图形方法,每种颜色都由一个Long整数表示。基于具有处理256色或256色以上的视频适配器和显示驱动程序的系统,VB可以支持256种颜色。对于多媒体应用程序,或对于那些需要显示接近相片质量图像的应用程序来说,具有同时显示256色的功能是特别有价值的。

6.5.1 调色板

在VB应用程序的界面设计阶段,使用调色板能够可视化地设置当前对象的颜色。打开调色板的方法为:

另一种方法是从VB集成环境的“视图”菜单中选取“调色板”。

Here6.5.2 颜色参数

如果想在程序运行期间设置对象的颜色,就必须使用颜色参数。

在运行时指定颜色参数值的方式有如下4种:1、使用RGB函数;2、使用QBColor函数;3、使用VB的颜色常数;4、直接输入颜色值。

1.RGB函数

RGB是Red 、Green 、Blue的缩写,RGB函数通过三原色的值设置一种混合颜色。

格式:RGB(,,)RGB函数由三个参数经数学组合而产生的一个Long整数值,表示一个特定的颜色值,其范围在0~16777215。也就是说,理论上RGB函数最多可以表示16777216颜色,但实际上受到系统硬件的限制。

和实际画图时一样,用红、绿、蓝三原色可以“配出”各种颜色。例如,红、绿混合可以得到黄色。

例6-11本例程首先设置窗体的背景色为蓝色,然后

在左边画一个前景色为红色的方框,中间画一个前景色为白色的方框。最后使用Point方法来返回3部分的指定点的颜色.

Option Explicit

Private Sub Form_Click()

Dim LeftColor, MidColor, Msg, RightColor ' 声明变量AutoRedraw = -1 ' 打开AutoRedrawHeight = 3 * 1440 ' 窗体高度3英寸Width = 5 * 1440 ' 窗体宽度5英寸

BackColor = QBColor(1) '将背景设置为蓝色。ForeColor = QBColor(4) ' 将前景设置为红色Line (0, 0)-(Width / 3, Height), , BF ' 画左边的红框ForeColor = QBColor(15) ' 将前景设置

Line (Width / 3, 0)-((Width / 3) * 2, Height), , BF ' 画中间的白框

LeftColor = Point(0, 0) ' 查找左框颜色

MidColor = Point(Width / 2, Height / 2) ' 查找中框颜色RightColor = Point(Width, Height) ' 查找右框颜色Msg = \"The color number for the red box on the left side of \"

Msg = Msg & \"the form is \" & LeftColor & \". The \"Msg = Msg & \"color of the white box in the center is \"Msg = Msg & MidColor & \". The color of the blue \"Msg = Msg & \"box on the right is \" & RightColor & \".\"MsgBox Msg ' 显示信息End Sub

2.QBColor函数

VB保留了Quick Basic的QBColor函数。该函数用一个整数值对应RGB的常用颜色值。

格式:QBColor<颜色值>

其中,“颜色值”的取值范围是0~15,共表示16种颜色。

例6-12本例使用QBColor函数将MyForm窗体的BackColor属性,改成ColorCode参数指定的色彩。

Sub ChageBackColor(ColorCode As Integer, MyForm As Form)

MyForm.BackColor = QBColor(ColorCode)End Sub

Private Sub Form_Load()ChageBackColor 0, Form1End Sub

3.颜色常数

VB定义了一些颜色符号常数,包括8种常用的颜色和Windows控制面板使用的系统颜色。使用系统常量,可使应用程序的风格与Windows控制面板类似,因而更具专业性。

4.直接使用颜色设置值

通常用十六进制数表示颜色值。正常的RGB颜色的有效范围是从0~16777215(&HFFFFFF&)。表达方式:&HBBGGRR&

BB-指定蓝颜色的值GG-指定绿颜色的值RR-指定红颜色的值

每个数段都是两位十六进制数,即从00到FF,中间值是80。因此,&H808080&是这三种颜色的中间值,指定灰色。

例6-13本例介绍了颜色参数的4使用方式,程序员可以根据自己的需要选定。

Private Sub Form_Load()

Dim offsetx As Integer, offsety As Integeroffsetx = 150offsety = 150

Line (100, 100)-Step(offsetx, offsety), QBColor(1), BF

Line -Step(offsetx * 2, offsety * 2), RGB(0, 255, 0), BFLine -Step(offsetx * 3, offsety * 3), vbRed, BFLine -Step(offsetx * 4, offsety * 4), &HFFFF&, BFEnd Sub

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 版权所有