VB程序设计 第十章图形操作Word文档下载推荐.docx

上传人:b****8 文档编号:22047389 上传时间:2023-02-02 格式:DOCX 页数:59 大小:258.38KB
下载 相关 举报
VB程序设计 第十章图形操作Word文档下载推荐.docx_第1页
第1页 / 共59页
VB程序设计 第十章图形操作Word文档下载推荐.docx_第2页
第2页 / 共59页
VB程序设计 第十章图形操作Word文档下载推荐.docx_第3页
第3页 / 共59页
VB程序设计 第十章图形操作Word文档下载推荐.docx_第4页
第4页 / 共59页
VB程序设计 第十章图形操作Word文档下载推荐.docx_第5页
第5页 / 共59页
点击查看更多>>
下载资源
资源描述

VB程序设计 第十章图形操作Word文档下载推荐.docx

《VB程序设计 第十章图形操作Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《VB程序设计 第十章图形操作Word文档下载推荐.docx(59页珍藏版)》请在冰豆网上搜索。

VB程序设计 第十章图形操作Word文档下载推荐.docx

Line(画线工具)

图形方法

Pset–画点

Line–画线

Cricle–画圆

Point–取点的颜色值

应用要点:

几何图形绘制

简单动画设计

图形漫游

图形处理技术

改变窗体外观

加入后台音乐

10.1图形操作基础

VisualBasic提供的图形控件主要有PictureBox(图形框)、Image(图像框)、Line(画线控件)、Shape(形状控件)。

提供的图形方法有Line、Circle、Pset和Point等。

为了方便图形操作,VisualBasic提供了系统标准坐标系和用户自定义坐标系两种方式的坐标系。

10.1.1坐标系统

每个容器都有一个坐标系,构成一个坐标系,需要三个要素:

坐标原点、坐标度量单位、坐标轴的长度与方向。

属性ScaleTop、ScaleLeft用于控制容器对象左边和顶端的坐标,根据这两个值来确定坐标原点。

所有对象的这两个属性的默认值为0,即坐标原点在对象的左上角。

属性ScaleHeight和ScaleWidth确定对象内部水平方向和垂直方向的单元数。

属性ScaleMode决定容器对象的坐标度量单位。

坐标系单位有8种形式。

缺省单位是Twip。

每英寸1440个Twip,20个Twip为一磅。

ScaleMode属性设置一览表

属性设置

单位

用户定义(User)

1

twip(默认值)

2

磅(point,每英寸72磅)

3

像素(pixed,与显示器分辨率有关)

4

字符(默认高为12磅,宽20磅的单位)

5

英寸(inch)

6

毫米(millimeter)

7

厘米(centimeter)

度量单位转换使用ScaleX和ScaleY方法,格式如下:

对象.ScaleX(转换值,原坐标单位,转换坐标单位)

对象.ScaleY(转换值,原坐标单位,转换坐标单位)

PrivateSubForm_Load()

x=ScaleX(45,1,7)‘将45由Twip转换成厘米7.937508E-02

y=ScaleY(45,1,6)‘将45由Twip转换成毫米0.7937508

MsgBoxx&

"

&

y

EndSub

无论采用那种坐标度量单位,默认坐标原点在对象的左上角,横向向右为X轴的正向,纵向向下为Y轴的正向。

当新建一个窗体时,窗体采用默认坐标系,属性Height=3600(包括标题栏和水平边框的宽度),Width=4800(包括垂直边框的宽度)。

而属性ScaleLeft=0,ScaleTop=0,Scaleheight=3195,ScaleWidth=4680

10.1.2自行定义坐标系

方法一:

通过ScaleTop,ScaleLeft,ScaleWidth和ScaleHeight属性实现。

对象的左上角坐标为(ScaleLeft,ScaleTOP),右下角的坐标为(ScaleWidth+ScaleLeft,ScaleHeight+ScaleTop)

根据左上角和右下角坐标值的大小自动设置坐标轴的正向。

X轴与Y轴的度量单位分别是1/ScaleWidth和1/ScaleHeight。

方法二:

采用Scale方法来设置坐标系:

格式:

[对象.]Scale[(xLeft,yTop)-(xRight,yBotton)]

对象可以使窗体、图形框和打印机。

如省略对象名,则为带有焦点的窗体对象。

(xLeft,yTop)表示定义对象的左上角坐标,(xRight,yBotton)则表示定义对象的右下角坐标。

VB根据Scale方法给定的参数自动计算出对象的属性ScaleLeft、ScaleTop、ScaleHeight、ScaleWidth的值。

计算的方法如下

ScaleLeft=xLeft

ScaleTop=Ytop

ScaleHeight=yBottom-yTop

ScaleWidth=xRight-xLeft

由此式子可得出一个对象的ScaleHeight和ScaleWidth也可能是一个负值,但是对象的Width和Height属性值则不随Scale的定义而发生变化,永远保持一个正值。

[例10.1]在Form_Paint事件中定义窗体的坐标系。

[例10.1]在myvb\vb10\ex10_1\lbc10_1.vbp

Cls

Form1.AutoRedraw=True

Form1.Scale(-200,250)-(300,-150)'

在窗体中设置坐标系

Line(-200,0)-(300,0)'

画X轴

Line(0,250)-(0,-150)'

画Y轴

CurrentX=0:

CurrentY=0:

Print0'

标记坐标原点

CurrentX=280:

CurrentY=40:

Print"

X"

'

标记X轴

CurrentX=5:

CurrentY=240:

Y"

'

标记Y轴

说明:

可在程序中使用Scale方法改变坐标系统。

当Scale方法不带参数时,取消用户定义的坐标系,恢复缺省坐标系。

改变坐标系后产生的影响:

[例10.1a]观察画线Line(0,0)-(1000,1000)在不同坐标系中的效果

[例10.1a]在myvb\vb10\ex10_1a\lbc10_1a.vpb

PrivateSubCommand1_Click()'

缺省坐标

Cls

Scale'

采用缺省坐标系

'

缺省坐标系(xLeft,yTop)=(ScaleTop,ScaleLeft)=(0,0)

(xRight,yBottom)=(ScaleLeft+ScaleWidt,ScaleTop+ScaleHeight)=

(4680,3195)

Line(0,0)-(1000,1000)

PrivateSubCommand2_Click()'

用户定义

Form1.Scale(0,1000)-(1000,0)'

定义用户坐标系

[例10.1b]控件对象在坐标系内与X轴和Y轴的位置保持相对不变

[例10.1b]在myvb\vb10\ex10_1b\lbc10_1b.vpb

PrivateSubCoordinate()

Line(0,0)-(5400,0)‘画线

Line(0,0)-(0,3800)

Label1.Caption="

Form.ScaleLeft="

Form1.ScaleLeft&

vbCrLf_

Form.ScaleTop="

Form1.ScaleTop

Picture1.Top=1080:

Picture1.Left=1080

label2.Caption="

0"

label3.Caption="

label4.Caption="

vbCrLf相当于chr(13)

Label2.Top=120:

Label2.Left=120

Label3.Top=3240:

Label3.Left=120

Label4.Top=120:

Label4.Left=5340

左移

结果坐标轴线和图形框向左上角推进渐渐从窗体上消失

Form1.ScaleLeft=100+Form1.ScaleLeft‘改变坐标系统

Form1.ScaleTop=100+Form1.ScaleTop

Coordinate'

调用子过程

右移

结果坐标轴线和图形框向右下角推进渐渐从窗体上消失

Form1.ScaleLeft=Form1.ScaleLeft–100‘改变坐标系统

Form1.ScaleTop=Form1.ScaleTop-100

10.1.3图形层

VB在构造图形时,在三个不同的屏幕层次上放置图形的可视组成部分。

就视觉效果而言,最上层离用户最近,而最下层离用户最远。

图形层放置的对象一览表

层次

对象类型

最上层

工具箱中除标签、线条、形状,image外的控件对象

中间层

标签、线条、形状控件对象和image

最下层

由图形方法所绘制的图形

位于上层的对象会覆盖下层相同位置的任何对象,即使下层对象在上层对象后面绘制。

处于同一图形层的对象的叠放顺序与操作有关,后绘在前绘上面。

同一图形层内控件对象排列顺序称为Z序列。

设计时可通过格式菜单中的顺序命令调整Z序列。

运行时可通过Zorder方法将特定的对象调整到同一图层的前面或后面。

如果控件不属于同一层,则Zorder方法无效。

Zorder方法的语法格式为:

对象.Zorder[position]

position=0表示该控件被定位于Z序列的前面

position=1表示该控件被定位于Z序列的后面

[例10.2]Zorder方法的使用

[例10.2]在myvb\vb10\ex10_2\lbc10_2.vpb

PrivateSubCommand1_Click(IndexAsInteger)'

command1为命令按钮组

Command1(Index).ZOrder0'

单击哪个按钮,哪个按钮就在最前面出现

Dimi

Fori=1To4

LoadCommand1(i)'

设计命令按钮组

Command1(i).ToolTipText="

Command"

i'

给按钮加提示

Command1(i).Left=Command1(i-1).Left+250'

确定出现位置

Command1(i).Top=Command1(i-1).Top+300

Command1(i).Visible=True'

使其可见

Command1(0).Style=1'

命令按钮可以加载图标只允许在属性窗口设置

SelectCasei

Case1

Command1(i).Picture=LoadPicture(App.Path+"

\Cut.bmp"

Case2

Command1(i).Picture=LoadPicture(App.Path+"

\copy.bmp"

Case3

\paste.bmp"

Case4

\OPEN.bmp"

EndSelect

Nexti

Command1(0).Picture=LoadPicture(App.Path+"

\save.bmp"

Command1(0).ToolTipText="

Command0"

[例10.2b]设计一个开关。

先画一个picture1控件在窗体上然后将开关(ON)图标装入Picture1内,因此Picture1控件的层次关系属于最底层,再在窗体上画一个picture2控件然后将开关(OFF)图标装入Picture2内,因此,Picture2对Picture1来说,图层属于上层。

这样,无论你怎样移动这两个控件OFF始终覆盖ON(只要重叠)。

[例10.2b]在myvb\vb10\ex10_2b\lbc10_2b.vpb

PrivateSubPicture1_Click()'

ON开关(红色)

Picture2.ZOrder0'

呈现白开关

Image2.ZOrder0'

呈现白灯

PrivateSubPicture2_Click()'

OFF开关(白色)

Picture1.ZOrder0'

呈现红开关

Image1.ZOrder0'

呈现黄灯

10.2绘图属性

10.2.1当前坐标

CurrentX,CurrentY属性给出窗体或图形框或打印机在绘图时的当前坐标。

这两个属性在设计阶段不能使用。

坐标(x,y)表示所在对象的绝对坐标,而Step(x,y)则表示在对象上的相对坐标位置,即从当前坐标平移x,y个单位,其绝对坐标为(CurrentX+x,CurrentY+y)。

使用Cls方法后,CurrentX=0,CurrentY=0

[例10.3]利用CurrentX,CurrentY属性在窗体上输出100个★。

[例10.3]在myvb\vb10\ex10_3\lbc10_3.vpb

PrivateSubForm_paint()'

自动执行

DimiAsInteger

Randomize‘语句,每次运行产生不同序列的随机数

Fori=1To100CurrentX=Form1.Width*Rnd

CurrentY=Form1.Height*Rnd

Form1.ForeColor=RGB(CurrentX*Rnd,CurrentY*Rnd,Form1.Height*Rnd)

’置色

★"

6.2.2线宽与线型

窗体、图形框或打印机的DrawWidth属性给出在这些对象上所画线的宽度或点的大小。

DrawWidth属性以像素为单位来度量,最小值为1。

在窗体或图形框或打印机上用它们的的DrawStyle属性给出在这些对象上用画图方法所绘出线的形状(对线和形状控件所绘出的线、框不起作用)。

DrawStyle属性设置一览表

设置值

常量

线型

图示

vbSolid

实线(缺省)

vbDash

长划线

vbDot

点线

vbDashDot

点划线

vbDashDotDot

点点划线

vbInvisible

透明线

vbInsideSolid

内实线

以上线型仅当DrawWidth属性值为1时才能产生。

当DrawWidth的值大于1且DrawStyle的值为1-4,都只能产生实线效果,而DrawStyle=6时,所画的内实线仅当是封闭线时起作用。

使用图形控件,则是通过BorderWidth属性定义线的宽度或点的大小,通过BorderStyle属性给出所画线的形状。

使用bordercolor属性置线色

[例10.4]线状示例(DrawWidth和DrawStyle)

[例10.4]在myvb\vb10\ex10_4\lbc10_4.vpb

PrivateSubForm_load()

Dimi%,y%,a%(0To6)

a(0)=vbSolid:

a

(1)=vbDash:

a

(2)=vbDot'

赋线状常数

a(3)=vbDashDot:

a(4)=vbDashDotDot:

a(5)=vbInvisible

a(6)=vbInsideSolid

Form1.AutoRedraw=True'

使用load事件必须有,否则不可画出线

DrawWidth=1'

置线宽

Fori=0To6

DrawStyle=a(i)'

置线状(即实、点、长点等线)

y=(300*i)+200

Form1.ForeColor=QBColor(i)'

置色

Line(300,y)-(3000,y)

CurrentX=3020

Printi;

a(i);

Choose(i+1,"

vbSolid"

"

vbDash"

_

vbDot"

vbDashDot"

vbDashDotDot"

vbInvisible"

vbInsideSolid"

Nexti'

从输出结果看,a(i)内是0-6的整数值

Line(100,2500)-(4000,2500)

DrawWidth=10'

Form1.ForeColor=RGB(0,192,0)

Line(400,2500)-(3000,2500)

[例10.4a]改变DrawStyle属性值在窗体上画出不同形状的线形,通过改变DrawWidth属性值画一系列宽度递增的直线。

[例10.4a]在myvb\vb10\ex10_4a\lbc10_4a.vpb

PrivateSubForm_Click()

DimjAsInteger

CurrentX=0'

设置开始位置

CurrentY=ScaleHeight/2

DrawWidth='

定义线的宽度为1

Forj=0To6

DrawStyle=j'

定义线的形状

ForeColor=QBColor(j)'

设置颜色

Line-Step(ScaleWidth/15,0)'

画线,Y坐标不动,X坐标相对移动ScaleWidth/15

Nextj

Forj=1To6

DrawWidth=j*3'

定义线的宽度

Line-Step(ScaleWidth/15,0)'

画线

Nextj

6.2.3填充与色彩

用图形方法绘制的封闭图形的填充方式由FillStyle、FillColor这两个属性决定。

(对形状控件绘出的封闭图形也适用)

FillColor指定填充图案的颜色,默认的颜色同ForeColor。

FillStyle指定填充的图案,共有8中内部图案。

FillStyle属性设置一览表

常数

说明

vbFSSolid

以FillColor绘制实心四方形

vbFSTransParent

透明(缺省值)

vbHorizontalLine

水平线

vbVerticalLine

垂直线

vbUpwardDiagonal

左上到右下斜线

vbDownwardDiagonal

右上到左下斜线

vbCross

网状格线

vbDiagonalCross

网状斜线

[例10.5]八种填充图案示例(用Line方法作图)

[例10.5]在myvb\vb10\ex10_5\lbc10_5.vpb

Dimx0%,x1%,y0%,k%,y1%

PrivateSubmnuClean_Click()'

擦除

x0=200:

x1=800:

k=100:

y0=200:

y1=800

PrivateSubForm_Load()‘准备初值

PrivateSubmnufillColor_Click()‘填充色

CommonDialog1.ShowColor

Form1.FillColor=CommonDialog1.Color

PrivateSubmnuvbCross_Click()'

FillStyle=vbCross

drawvbCross

PrivateSubmnuvbDiagonalCross_Click()'

FillStyle=vbDiagonalCross

drawvbDiagonalCross

PrivateSubmnuvbDownwardDiagonal_Click()'

FillStyle=vbDownwardDiagonal

drawvbDownwardDiagonal

PrivateSubmnuvbFSTransparent_Click()'

透明(缺省值)

FillStyle=vbFSTransparent

drawvbFSTransparent

PrivateSubmnuvbHorizontalLine_Cl

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 公务员考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1