VB程序设计 第十章图形操作.docx

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

VB程序设计 第十章图形操作.docx

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

VB程序设计 第十章图形操作.docx

VB程序设计第十章图形操作

第十章图形操作

主要内容

●图形操作基础

●绘图属性

●图形控件

●图形方法

●应用

 

图形操作基础要点

默认坐标系

坐标系-用scale方法定义

属性:

ScaleLeft、ScaleTop、ScaleHeight、ScaleWidth、Top、Left、Height、Width

绘图属性要点

窗体和图形控件(PictureBox)有:

DrawWidth–用图形方法绘线的宽度

DrawStyle–用图形方法绘线的形状(DrawWidth=1时有效)

FillColor–用图形方法绘制封闭图形中的填充色

FillStyle–用图形方法绘制封闭图形的填充线方式(0-7共8种)

ForeColor-用图形方法绘制图形的边框颜色(图形方法的颜色参数设置优先)

形状控件Shape有:

Shape–选择控件的几何形状(0-5共6种)

BorderWidth–控件的边框线宽

BorderStyle–控件的边框线形状(BorderWidth=1时有效)

BorderColor–控件的边框颜色

FillColor–控件的填充线的颜色

FillStyle–控件中的填充图案样式

BackColor–控件图像的背景色(BackStyle属性应设置为不透明(opaque)才有效)

Line控件有

DrawMode–控件

BorderWidth–控件的线宽

BorderStyle–控件的线样式

BorderColor–控件的线颜色

X1-控线的起点坐标

Y1-控件的起点坐标

X2-控件的终点坐标

Y2-控件的终点坐标

公有属性

DrawMode–图形控件或图形方法的新像素和原有像素的组合方式(1-16共16种)

图形控件要点:

PictureBox(图形框)–重要属性Autosize、Picture装入图形方法LoadPicture

Image(图像框)–重要属性Stretch、Picture装入图形方法LoadPicture

Shape(形状)–重要属性Shap图形几何形状

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属性设置一览表

属性设置

单位

0

用户定义(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

PrivateSubForm_Load()

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:

Print"Y"'标记Y轴

EndSub

说明:

可在程序中使用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)

EndSub

PrivateSubCommand2_Click()'用户定义

Cls

Form1.Scale(0,1000)-(1000,0)'定义用户坐标系

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

EndSub

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

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

PrivateSubCoordinate()

Cls

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="Y",label4.Caption="X",vbCrLf相当于chr(13)

Label2.Top=120:

Label2.Left=120

Label3.Top=3240:

Label3.Left=120

Label4.Top=120:

Label4.Left=5340

EndSub

PrivateSubCommand1_Click()'左移

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

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

Form1.ScaleTop=100+Form1.ScaleTop

Coordinate'调用子过程

EndSub

PrivateSubCommand2_Click()'右移

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

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

Form1.ScaleTop=Form1.ScaleTop-100

Coordinate'调用子过程

EndSub

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'单击哪个按钮,哪个按钮就在最前面出现

EndSub

PrivateSubForm_Load()

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

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

Case4

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

EndSelect

Nexti

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

Command1(0).ToolTipText="Command0"

EndSub

 

[例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'呈现白灯

EndSub

PrivateSubPicture2_Click()'OFF开关(白色)

Picture1.ZOrder0'呈现红开关

Image1.ZOrder0'呈现黄灯

EndSub

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)

’置色

Print"★"

Nexti

EndSub

 

6.2.2线宽与线型

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

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

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

 

DrawStyle属性设置一览表

设置值

常量

线型

图示

0

vbSolid

实线(缺省)

1

vbDash

长划线

2

vbDot

点线

3

vbDashDot

点划线

4

vbDashDotDot

点点划线

5

vbInvisible

透明线

6

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)

EndSub

[例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'定义线的宽度

ForeColor=QBColor(j)'设置颜色

Line-Step(ScaleWidth/15,0)'画线

Nextj

EndSub

 

6.2.3填充与色彩

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

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

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

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

FillStyle属性设置一览表

设置值

常数

说明

0

vbFSSolid

以FillColor绘制实心四方形

1

vbFSTransParent

透明(缺省值)

2

vbHorizontalLine

水平线

3

vbVerticalLine

垂直线

4

vbUpwardDiagonal

左上到右下斜线

5

vbDownwardDiagonal

右上到左下斜线

6

vbCross

网状格线

7

vbDiagonalCross

网状斜线

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

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

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

PrivateSubmnuClean_Click()'擦除

Cls

x0=200:

x1=800:

k=100:

y0=200:

y1=800

EndSub

PrivateSubForm_Load()‘准备初值

x0=200:

x1=800:

k=100:

y0=200:

y1=800

EndSub

PrivateSubmnufillColor_Click()‘填充色

CommonDialog1.ShowColor

Form1.FillColor=CommonDialog1.Color

EndSub

PrivateSubmnuvbCross_Click()'网状格线

FillStyle=vbCross

drawvbCross

EndSub

PrivateSubmnuvbDiagonalCross_Click()'网状斜线

FillStyle=vbDiagonalCross

drawvbDiagonalCross

EndSub

PrivateSubmnuvbDownwardDiagonal_Click()'右上到左下斜线

FillStyle=vbDownwardDiagonal

drawvbDownwardDiagonal

EndSub

PrivateSubmnuvbFSTransparent_Click()'透明(缺省值)

FillStyle=vbFSTransparent

drawvbFSTransparent

EndSub

PrivateSubmnuvbHorizontalLine_Cl

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

当前位置:首页 > 工作范文 > 演讲主持

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

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