版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章处理图形VisualBasic程序设计教程第10章处理图形VisualBasic程序设计教程本章主要介绍绘图属性绘图方法图片框影像框2VisualBasic程序设计教程本章主要介绍2VisualBasic程序设计教程10.1概述图形一般指图绘形象,描画出物体的轮廓、形状等。由图元组成,图元可以是点、线、圆、字符、填充区等。每个图元有它的数据定义和外貌特征。如线段端点、粗细等。VB提供了一些控件和方法,绘制图元,最终构成图形容器是绘制图形或控件的场所容器中的对象只能在容器内变动。窗体、框架、图片框是容器移动容器时,内部对象与容器的相对位置保持不变。3VisualBasic程序设计教程10.1概述图形一般指图绘形象,描画出物体的轮廓、形状等。VB容器的图层从前到后为:前层——非绘图控件所在层,如命令按钮、复选框等;中间层——绘图控件和标签所在层;底层——绘图方法显示结果的地方。图层显示特性依靠:AutoRedraw和ClipControls属性的设置及绘图方法是否在Paint事件过程内。图像一般是指绘制、摄制或印制的形象。可将它们装载到图片框、影像框可窗体上4VisualBasic程序设计教程VB容器的图层从前到后为:4VisualBasic程序设计10.2模拟单摆【例10-1】设计一个模拟单摆·控件:图片框控件Picture1:作单摆容器直线控件Line1:作绳索形状控件Shape1:作球(设计界面中为矩形)定时器控件Timer1:控制摆动。5VisualBasic程序设计教程10.2模拟单摆【例10-1】设计一个模拟单摆5Visu·2个模块级变量A和D,表示摆动角度和方向。·2个事件过程:Form_Load,初始化界面和控件属性Timer1_Timer,控制单摆的运动。6VisualBasic程序设计教程·2个模块级变量A和D,表示摆动角度和方向。6VisualOptionExplicit
DimAAsInteger,DAsInteger'模块级变量,A表示角度,D表示方向
ConstPI=3.1415926
PrivateSubForm_Load()
Form1.Width=1.3*Form1.Height'设置窗体的宽度和高度比例
Picture1.Width=1.5*Picture1.Height'设置图片框的宽度和高度比例
Picture1.Scale(-150,-5)-(150,195)'更改坐标系统
Shape1.FillStyle=0'使形状控件的填充模式为"实心"
Shape1.FillColor=vbRed'使形状控件填充红色
Shape1.BorderColor=vbRed'使形状控件的边界颜色为红色
Shape1.Width=15'按坐标系,更改形状控件大小
Shape1.Shape=3'使形状控件的形状为圆形
Line1.BorderColor=vbRed'使绳索颜色为红色
Line1.X1=0:Line1.Y1=0'使绳索上端在原点(0,0)上
Picture1.AutoRedraw=True'使图片框的重绘属性为True
Picture1.Line(-10,0)-(10,0)'顶端画一条固定绳索的横线
Timer1.Interval=100
A=-20:D=-1'设置初始角度和方向
EndSub7VisualBasic程序设计教程OptionExplicit
DimAAsPrivateSubTimer1_Timer()
DimXAsSingle,YAsSingle
IfD=-1ThenA=A+2ElseA=A-2
X=170*Sin(A*PI/180)'确定圆心和直线下端的位置
Y=170*Cos(A*PI/180)
Line1.X2=X:Line1.Y2=Y'更改直线下端位置
Shape1.Left=X-Shape1.Width/2'使圆心位置在直线的下端
Shape1.Top=Y-Shape1.Height/2
IfD=-1AndA=20OrD=1AndA=-20ThenD=-D'±20°改方向
EndSub·Scale方法使图片框左上角和右下角坐标分别为(-150,-5)和(150,195)。·而170表示着绳索的长度,可以取其它值,但应使整个单摆可见。8VisualBasic程序设计教程PrivateSubTimer1_Timer(10.3什么是VB坐标系·坐标系是用于确定数与基本几何对象之间对应关系的参考系,是形和数结合的基础。·VB坐标系是确定对象和图形位置的参考系。·VB中每一个容器采用(x,y)的二维坐标系统·每个对象、图形操作,都要使用坐标系。·VB坐标系统使用有以下规则:移动或调整控件大小时,使用容器的坐标系统。绘图方法和Print方法,使用容器的坐标系统。9VisualBasic程序设计教程10.3什么是VB坐标系·坐标系是用于确定数与基本几何对10.3.1VB默认坐标系·VB坐标系每个点用(x,y)表示x是水平方向沿x轴的位置,默认最左端是0y是垂直方向沿y轴的位置,默认最上端是0·坐标单位又称为坐标刻度,默认缇(twips)。还可以使用磅、像素和毫米等。·屏幕的左上角的坐标总是(0,0)10VisualBasic程序设计教程10.3.1VB默认坐标系10VisualBasic程·其它容器在缺省状态下,左上角是(0,0)。窗体(0,0)点指窗体标题栏下边沿的左上角。·使用对象的刻度属性和Scale方法,可重新设置容器的坐标系统。11VisualBasic程序设计教程·其它容器在缺省状态下,左上角是(0,0)。11Visual10.3.2Scale方法·使用Scale方法可以创建自定义刻度。·Scale方法的使用格式为:
[容器名.]Scale[(x1,y1)-(x2,y2)]1.容器名指窗体名或图片框控件名。缺省指当前窗体2.(x1,y1)和(x2,y2)为新坐标系统左上角和右下角坐标3.省略(x1,y1)-(x2,y2),恢复缺省刻度。12VisualBasic程序设计教程10.3.2Scale方法12VisualBasic程·例10-1中Picture1.Scale(-150,-5)-(150,195)更改图片框坐标系如上图。这样求运动点(x,y)的位置比较方便设绳索长为170,则当绳索与y轴的夹角为a时,则x=170sina,y=170cosa。13VisualBasic程序设计教程·例10-1中Picture1.Scale(-150,10.3.3坐标属性·使用坐标属性可以更改容器的坐标刻度,也可以自定义坐标系。ScaleMode:设置坐标刻度,缺省值为1(缇)ScaleLeft:表示或设置对象左边界水平坐标ScaleTop:表示或设置对象上边界垂直坐标ScaleWidth:表示或设置对象内水平度量单位数ScaleHeight:表示或设置对象内垂直度量单位数CurrentX:当前输出的水平坐标。程序中使用。CurrentY:当前输出的垂直坐标。程序中使用。14VisualBasic程序设计教程10.3.3坐标属性14VisualBasic程序设计·属性说明:ScaleWidth、ScaleHeight不同于Width、HeightScaleMode属性可以取值0~7,表示刻度分别为自定义、缇、磅、像素、字符、英寸、毫米和厘米。更改ScaleWidth、ScaleHeight、ScaleLeft、ScaleTop之一时,VB自动将ScaleMode的值设为0。如Scale(-150,-5)-(150,195),也可以表示成:ScaleWidth=300:ScalHeight=200:ScaleLeft=-150:ScaleTop=-5若要改坐标轴方向,可将ScaleWidth或ScaleHeight设置成负值15VisualBasic程序设计教程·属性说明:15VisualBasic程序设计教程ScaleMode属性取值为1~7时的刻度,称为标准刻度在设置了ScaleMode属性的值后,VB会重定义ScaleWidth和ScaleHeight,使它们与新刻度保持一致。左上角坐标总是:(ScaleLeft,ScaleTop)右下角坐标总是:
(ScaleLeft+ScaleWidth,ScaleTop+ScaleHeight)。16VisualBasic程序设计教程ScaleMode属性取值为1~7时的刻度,称为标准刻度1610.4使用绘图方法10.4.1画点—PSet方法·绘图方法可画点、画线、画矩形、画椭圆等。·格式:[对象名.]PSet(x,y)[,颜色]1.(x,y)为所画点的坐标位置2.颜色指点的颜色。缺省时由容器的ForeColor属性决定。例如:PSet(1000,1000),RGB(255,0,0)在(1000,1000)处画红点,大小由容器的DrawWidth属性决定。3.擦除一个点,可采用以背景色重画点。4.Cls方法可擦除绘图方法及Print方法的输出内容。17VisualBasic程序设计教程10.4使用绘图方法10.4.1画点—PSet方法1【例10-2】绘制一条y=x2的抛物线。
PrivateSubForm_Click()
DimxAsSingle
Scale(-10,105)-(10,-2)
Forx=-9To9Step0.01
PSet(x,x*x)
Nextx
EndSub18VisualBasic程序设计教程【例10-2】绘制一条y=x2的抛物线。
PrivateS10.4.2画直线和矩形——Line的方法·使用Line方法可以画出直线或矩形。1.画线格式:[对象名.]Line[(x1,y1)]-(x2,y2)[,颜色](x1,y1)和(x2,y2)分别为起点和终点坐标如:Line(100,150)-(1400,1300),vbRed
·缺省起点(x1,y1),表示将当前输出位置作为起点。19VisualBasic程序设计教程10.4.2画直线和矩形——Line的方法19Visua坐标点的另一种表示形式为:Step(x,y)是相对位置的表示法,表示当前输出位置水平方向加上x,
垂直方向加上y后得到的坐标点。对象的当前位置由CurrentX和CurrentY决定Line(100,200)-(150,250)等价:Line(100,200)-Step(50,50)VB画直线时,包括了起点,未包括终点。画终点可用:PSetStep(0,0)[,color]连续使用缺省起点的Line方法,可以绘制多点折线。20VisualBasic程序设计教程坐标点的另一种表示形式为:Step(x,y)20Visual【例10-3】在窗体上中间画出一个等腰三角形。可根据窗体ScaleWidth和ScaleHeight属性确定三点位置由于一条线的终点等价于另一条线的起点,因此除了第一条线以外,其它两条线均可用缺省起点的Line方法。21VisualBasic程序设计教程【例10-3】在窗体上中间画出一个等腰三角形。21Visua PrivateSubCommand1_Click()
Dimx1AsInteger,x2AsInteger,x3AsInteger
Dimy1AsInteger,y2AsInteger,y3AsInteger
x1=ScaleWidth/2:y1=ScaleHeight/5
x2=ScaleWidth/5:y2=ScaleHeight/5*4
x3=ScaleWidth/5*4:y3=ScaleHeight/5*4
Line(x1,y1)-(x2,y2)
Line-(x3,y3)
Line-(x1,y1)
EndSub22VisualBasic程序设计教程 PrivateSubCommand1_Click()
2.画矩形采用格式:
[对象名.]Line[(x1,y1)]-(x2,y2),[颜色],B[F](x1,y1)和(x2,y2)为矩形的两个对角顶点坐标缺省(x1,y1),表示当前输出位置作(x2,y2)的对角顶点参数B表示绘制矩形参数F表示矩形填充,即为实心的矩形如:Line(500,200)-Step(200,200),vbRed,B如:Line(500,200)-Step(200,200),vbRed,BF若颜色缺省,逗号也不能省23VisualBasic程序设计教程2.画矩形采用格式:
[对象名.]Line[(x1,【例10-4】编制简易黑板。功能是:用鼠标左键在窗体上拖动时,画出线条;用鼠标右键在窗体上拖动时,擦去线条。击“清除”擦去所有痕迹。·事件:窗体MouseDown:画出按下鼠标的第一点窗体MouseMove:画出线条或删除线条用背景色,画小矩形擦“清除”的Click:擦去所有痕迹
24VisualBasic程序设计教程【例10-4】编制简易黑板。功能是:用鼠标左键在窗体上拖动时PrivateSubCommand1_Click()'擦“黑板”ClsEndSubPrivateSubForm_Load()'初始化Form1.Caption="简易黑板"Form1.BackColor=RGB(0,0,0)Form1.ForeColor=RGB(255,255,255)Command1.Caption="擦除"EndSub25VisualBasic程序设计教程PrivateSubCommand1_Click()PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)IfButton=1Then'Button=1表示按下左键,画第一点Form1.PSet(X,Y)EndIfEndSubPrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)IfButton=1Then'左键拖动画线Form1.Line-(X,Y)ElseIfButton=2Then'右键拖动以黑色画实心方块,起擦除作用Form1.Line(X-200,Y-200)-(X+200,Y+200),RGB(0,0,0),BFEndIfEndSub26VisualBasic程序设计教程PrivateSubForm_MouseDown(But10.4.3画圆、弧和椭圆——Circle方法·Circle方法可画出圆、圆弧、扇形或椭圆。1.画圆格式:
[对象名.]Circle[Step](x,y),半径[,颜色][Step](x,y)表示圆心的坐标。半径的度量单位与容器坐标系的单位相同,不能为负。画圆时,半径通常由水平单位指定。27VisualBasic程序设计教程10.4.3画圆、弧和椭圆——Circle方法27Vis如下列代码绘制如图。
Scale(-50,20)-(50,-20)
Line(-15,15)-(15,-15),,B
Circle(0,0),15又如以窗体中心为圆心,以窗体ScaleWidth的1/4为半径画圆:Circle(ScaleWidth/2+ScaleLeft,ScaleHeight/2+ScaleTop),_ScaleWidth/428VisualBasic程序设计教程如下列代码绘制如图。
Scale(-50,20)-(50【例10-5】编程,在窗体中间画1000个同心多彩圆。·编写通用过程PaintCircle:绘制彩色圆
SubPaintCircle()
DimRAsInteger,XAsInteger,YAsInteger
X=ScaleWidth/2'将x坐标设置在窗体内横向中间
Y=ScaleHeight/2'将y坐标设置在窗体内纵向中间
IfX<YThenR=X*0.9ElseR=Y*0.9
Circle(X,Y),R*Rnd,RGB(Rnd*255,Rnd*255,Rnd*255)'画圆
EndSub
29VisualBasic程序设计教程【例10-5】编程,在窗体中间画1000个同心多彩圆。29VPrivateSubCommand1_Click()
DimiAsInteger
Fori=1To1000
PaintCircle
Next
EndSub其中乘0.9是为了最大圆不会紧贴窗体边缘。30VisualBasic程序设计教程PrivateSubCommand1_Click()2.画弧格式为:
[对象名.]Circle[Step](x,y),半径,[颜色],Start,End[,Aspect]圆弧以弧度为单位,按逆时针方向画弧。Start和End表示弧线起始角和终止角的弧度数据平行于X轴的正向为0弧度如果Start参数或End参数是负数,则VB将画一条连接圆心到负端点的直线。使用不为1的Aspect参数,表示为椭圆弧线的一段。如:
Circle(800,800),500,,-3.14/2,-3.14/3
Circle(1800,800),500,,0,3*3.14/431VisualBasic程序设计教程2.画弧格式为:
[对象名.]Circle[Step](x3.画椭圆格式:[对象名.]Circle[Step](x,y),半径[,颜色,Start,End,Aspect]画圆还是画椭圆由圆的方位比Aspect决定。它指定了垂直长度和水平长度的比例VB在Circle方法中的半径参数对应椭圆的长轴。[,颜色,Start,End,Aspect]四项中任一项都是可选的,当前面的项缺省时,逗号仍不能省去。省略Start,End中的任一项,表示该项为0,画弧。两项都省去,表示画圆或椭圆。如以下代码,使用半径均为500,但使用不同的方位比,其效果如图。
Circle(800,800),500,,,,3
Circle(800,800),500
Circle(2000,800),500,,,,1/332VisualBasic程序设计教程3.画椭圆格式:32VisualBasic程序设计教程10.5使用绘图属性10.5.1更改线条形式1.DrawWidth属性DrawWidth属性可以设置线条的粗细、点的大小DrawWidth属性值以像素为单位,取值范围为1~32767当数据取得很大时,可能一个点就能占满整个容器。33VisualBasic程序设计教程10.5使用绘图属性10.5.1更改线条形式33Vi下面代码根据DrawWidth取值,效果如图。
PrivateSubForm_Click()
DimiAsInteger,tAsInteger
t=ScaleWidth/20
Fori=1To20Step2
Form1.DrawWidth=i
PSet(t*i,ScaleHeight/4)
Line(t*i,ScaleHeight/2)-(t*i,ScaleHeight)
Nexti
EndSub34VisualBasic程序设计教程下面代码根据DrawWidth取值,效果如图。
Privat2.DrawStyle属性DrawStyle属性用于指定绘制的图形线条形式。DrawStyle属性取值为0~6,形式如表。6:内收实线,框线较粗时,
才可见效果,如图
35VisualBasic程序设计教程2.DrawStyle属性35VisualBasic程序设10.5.2填充图案
1.FillStyle属性设置封闭图形的填充图案样式,取值0至7缺省值为1,无论何种色彩,均表现为空心。如希望窗体上显示各填充效果,可用代码:
t=ScaleWidth/9
ForI=0To7FillStyle=ILine(I*t+100,500)-((I+0.8)*t+100,500+1000),,BNextI
36VisualBasic程序设计教程10.5.2填充图案36VisualBasic程序2.FillColor属性FillColor属性表示填充颜色只要FillStyle属性不为1,就可FillColor填色VB填充矩形、圆、扇形等封闭图形FillColor属性的设置方式和ForeColor相同37VisualBasic程序设计教程2.FillColor属性37VisualBasic程序设注意FillColor和ForeColor的差别:前者用于填充颜色后者为默认的边线颜色,或输出文字颜色。若Line语句中使用了参数F,则所有的填充形式和填充颜色都无效。38VisualBasic程序设计教程注意FillColor和ForeColor的差别:38Vis【例10-6】根据绘图属性,画扇形、画椭圆、画环。·对于圆环,没有单独语句,可用图形组合。
PrivateSubCommand1_Click()'画扇形。
FillStyle=7
FillColor=RGB(255,0,0)
Circle(800,1000),800,,-0.0001,-3.14*2/3
EndSub
39VisualBasic程序设计教程【例10-6】根据绘图属性,画扇形、画椭圆、画环。·对于圆环PrivateSubCommand2_Click()‘画两个椭圆
FillStyle=1’画一个红色点线的空心椭圆
DrawStyle=2:Circle(2300,500),400,vbRed,,,2
DrawStyle=0‘恢复默认的线条样式
FillStyle=0’画线宽3个像素,线条红色的一个实心黄椭圆
DrawWidth=3:FillColor=vbYellow
Circle(2300,1200),400,vbRed,,,0.5
DrawWidth=1'恢复默认线宽
EndSub
PrivateSubCommand3_Click()'绘制圆环
FillStyle=4'画一个有填充的大圆
FillColor=vbBlue:Circle(3500,1000),600,vbRed
FillStyle=0'画一个实心的以背景色填充的同心小圆
FillColor=BackColor:Circle(3500,1000),300,vbRed
EndSub为了在0弧度上能画上横线,使用了-0.000140VisualBasic程序设计教程为了在0弧度上能画上横线,使用了-0.000140Visua10.6使用绘图控件10.6.1直线控件(Line)·直线控件可以在容器对象中绘制直线·该直线不能被Cls方法清除,·程序中修改端点可以移动直线。1.创建直线控件:工具箱内选取直线工具41VisualBasic程序设计教程10.6使用绘图控件10.6.1直线控件(Line)2.直线控件的主要属性(名称)Name。直线控件名称。缺省值为Line1BorderColor:设置线条颜色BorderStyle:线条样式,取值为0~6,分别表示透明、实线、破折线、点线、点划线、双点划线和内收实线。BorderWidth:设置线条粗细X1和Y1:分别为起点的x坐标和y坐标X2和Y2:分别为终点的x坐标和y坐标·直线控件没有事件42VisualBasic程序设计教程2.直线控件的主要属性42VisualBasic程序设计教10.6.2形状控件(Shape)·形状控件可以直接在容器对象中绘制图形·这些图形可是圆、椭圆、也可以是矩形等1.创建形状控件:在工具箱内选取工具2.形状控件的属性同直线控件的BorderColor、BorderStyle、BorderWidth常规属性Height、Width、Left、Top、Visible等Name(名称),形状控件名称。缺省值为Shape143VisualBasic程序设计教程10.6.2形状控件(Shape)43VisualBaFillColor:设置填充颜色FillStyle:填充样式,取值0~7,默认为1,即透明。Shape:设置图形的形状,取值0~5,分别表示矩形、正方形、椭圆、圆、圆角矩形、圆角正方形。默认为0。·控件为圆时,半径为Height/2和Width/2的最小值;·控件为正方形时,边长为Height和Width的最小值。·Shape控件没有事件。44VisualBasic程序设计教程FillColor:设置填充颜色44VisualBasic【例10-7】用直线控件和形状控件制作钟。·控件:7条直线控件Line1~Line4作为3、6、9、12点的位置Line5~Line7分别作为时、分、秒的指针。1个形状控件:作为钟的圆盘·用Time、Hour、Minute、Second函数获得时、分、秒·为了计算方便,原点(0,0)改在窗体中心,并且轴方向与数学上的一致,但没有更改刻度。·时和分采用实数型·本题所有的属性设置在Form_Load中完成。
45VisualBasic程序设计教程【例10-7】用直线控件和形状控件制作钟。·控件:45Vis DimH1AsInteger,M1AsInteger,S1AsInteger'指针长度
ConstPI=3.1415926
PrivateSubForm_Load()'初始化
DimRAsInteger'钟的半径
Scale(-ScaleWidth/2,ScaleHeight/2)-(ScaleWidth/2,-ScaleHeight/2)
Shape1.FillStyle=0:Shape1.Shape=3:Shape1.FillColor=vbYellowShape1.Left=-Shape1.Width/2:Shape1.Top=Shape1.Height/2
IfShape1.Width<Shape1.HeightThenR=Shape1.Width/2
ElseR=Shape1.Height/2'确定半径
Line5.X1=0:Line6.X1=0:Line7.X1=0'时分秒针一端置于原点
Line5.Y1=0:Line6.Y1=0:Line7.Y1=0
H1=R*0.6:M1=R*0.7:S1=R*0.8确定时分秒指针长度
Line1.X1=0:Line1.X2=0:Line1.Y1=R*0.85:Line1.Y2=R*0.9'4点位置
Line2.X1=R*0.85:Line2.X2=R*0.9:Line2.Y1=0:Line2.Y2=0
Line3.X1=0:Line3.X2=0:Line3.Y1=-R*0.85:Line3.Y2=-R*0.9
Line4.X1=-R*0.85:Line4.X2=-R*0.9:Line4.Y1=0:Line4.Y2=0
Line7.BorderColor=vbRed'将秒指针设为红色
Timer1.Interval=1000
Timer1_Timer'调用Timer1_Timer事件过程
EndSub46VisualBasic程序设计教程 DimH1AsInteger,M1AsInte PrivateSubTimer1_Timer()
DimHAsSingle,MAsSingle,SAsSingle
'计算出时分秒
S=Second(Time):M=Minute(Time)+S/60:H=Hour(Time)Mod12+M/60
'确定时分秒指针的另一端
Line5.X2=H1*Cos(PI/2-H*2*PI/12):Line5.Y2=H1*Sin(PI/2-H*2*PI/12)
Line6.X2=M1*Cos(PI/2-M*2*PI/60):Line6.Y2=M1*Sin(PI/2-M*2*PI/60)
Line7.X2=S1*Cos(PI/2-S*2*PI/60):Line7.Y2=S1*Sin(PI/2-S*2*PI/60)
EndSub·通过S*2*PI/60等计算出指针与x轴的夹角弧度·指针是在90度开始逆向运动,所以用:PI/2-S*2*PI/60。·对于时针,转一圈为12小时,故除以12。47VisualBasic程序设计教程 PrivateSubTimer1_Timer()
Di10.7VB图像和色彩10.7.1图片框(PictureBox)·图片框控件属于容器控件可以放置其它控件可以显示图形、显示Print方法输出的文本可以载入图片或图像。1.创建图片框在工具箱内选取图片框工具48VisualBasic程序设计教程10.7VB图像和色彩10.7.1图片框(Pictu2.图片框的主要属性坐标系:ScaleHeight、ScaleLeft、ScaleMode、ScaleWidth、ScaleTop绘图:AutoRedraw、DrawStyle、DrawWidth、FillColor、FillStyle(名称)Name。图片框控件名称。缺省Picture1AutoSize:控件是否会自动改变大小适合加载的图片。值为True时,自动调整大小与显示的图片相匹配。Picture:设置控件内显示的图片文件49VisualBasic程序设计教程2.图片框的主要属性49VisualBasic程序设计教程3.图片框的事件Click、DblClick、MouseDown、MouseMove、MouseUp、Paint、Resize等4.图片框的方法Move方法:移动或调整图片框大小Circle、Line和Pset方法:画图Print方法:输出文本或数据Cls方法:清除输出的内容,但不能清除控件及图片。还有PaintPicture和Point等方法(后面介绍)50VisualBasic程序设计教程3.图片框的事件50VisualBasic程序设计教程5.加载图片VB支持.bmp、.ico、.wmf、.jpg和.gif等文件。加载方法:·属性窗口中设置Picture属性
·程序中利用函数LoadPicture设置Picture属性,格式为:
对象名.Picture=LoadPicture("文件说明")
清除图片,格式为:对象名.Picture=
LoadPicture("")51VisualBasic程序设计教程51VisualBasic程序设计教程【例10-8】编程:模拟显示某系统正在读取数据。·控件:图片框:内部显示一系列矩形标签:提示“系统正在读取数据,请稍等…”命令按钮:使定时器工作定时器控件:在图片框内定时画矩形。52VisualBasic程序设计教程【例10-8】编程:模拟显示某系统正在读取数据。52Visu PrivateSubCommand1_Click()'“开始”按钮
Timer1.Enabled=True:Command1.Enabled=False:Picture1.Cls
Label1.Caption="系统正在读取数据,请稍等..."
EndSub
PrivateSubForm_Load()
Form1.Caption="图片框示例":Picture1.AutoRedraw=True
Label1.Caption="":Label1.AutoSize=True
Timer1.Enabled=False:Timer1.Interval=1000
EndSub
53VisualBasic程序设计教程 PrivateSubCommand1_Click()PrivateSubTimer1_Timer()
StaticnAsInteger
Picture1.Line(160*n,0)-(160*n+100,Picture1.ScaleHeight),,BF
If160*n+100>=Picture1.ScaleWidthThen
Label1.Caption="数据读取完成!共用了"&(n+1)&"秒"
MsgBox"数据读取完成!",,"消息"
Command1.Enabled=True:Command1.SetFocus
n=0:Timer1.Enabled=False
Else
n=n+1
EndIf
EndSub54VisualBasic程序设计教程PrivateSubTimer1_Timer()
Sta10.7.2影像框(Image)·影像框控件与图片框控件相似·影像框控件只用于显示图片,不能作为容器。1.创建影像框:在工具箱内选取影像框工具2.影像框的属性影像框控件使用布局属性和可见、可用属性。没有字体属性、颜色属性、坐标属性和绘图属性。55VisualBasic程序设计教程10.7.2影像框(Image)55VisualBas其它主要属性:(名称)Name。影像框控件名称,缺省值为Image1。Stretch:设置加载的图片是否能自动扩展或缩小以适应控件的尺寸,还是影像框去适合图片的大小。缺省值为False。Stretch为True时,影像框大小不会自动改变,可由影像框的大小来调整图片的大小Stretch为为False时,影像框的大小根据图片大小来自动调整。Picture:设置控件内显示的图片文件。56VisualBasic程序设计教程其它主要属性:56VisualBasic程序设计教程3.影像框的事件Click、DblClick、MouseDown、MouseMove、MouseUp但没有Paint和Resize事件。可用Image控件创建按钮(因识别Click)。4.影像框的方法可用Move方法移动或调整它的大小没有绘图方法。57VisualBasic程序设计教程3.影像框的事件57VisualBasic程序设计教程5.加载图片使用Picture属性可以在属性窗口中设置可以利用函数LoadPicture来设置Picture属性。·Image使用较少系统资源,且加载比PictureBox快。·当只要求显示图片时,可以选用Image控件。58VisualBasic程序设计教程5.加载图片58VisualBasic程序设计教程【例10-9】利用定时器控件编程,使得4幅图片在影像框Image1中轮流显示,当单击Image1时,将放大的图片显示在Image2中。·控件:2个影像框控件:Stretch属性设置为True1个定时器控件·使用静态变量控制图片显示。59VisualBasic程序设计教程【例10-9】利用定时器控件编程,使得4幅图片在影像框Ima
10.7.2影像框--图片轮流显示
PrivateSubForm_Load()'初始化属性
Timer1.Interval=1000
Image1.Stretch=True:Image2.Stretch=True
Image1.ToolTipText="请单击"'当鼠标移动到Image1上,显示文字
EndSub
PrivateSubImage1_Click()'复制
Image2.Picture=Image1.Picture
EndSub
PrivateSubTimer1_Timer()
StaticNAsInteger
Image1.Picture=LoadPicture("D:\Wen\"&N&".jpg")
N=(N+1)Mod4
EndSub文件名使用了0.jpg~3.jpg,故可使用字符串表达式:
"D:\Wen\"&N&".jpg"60VisualBasic程序设计教程 10.7.2影像框--图片轮流显示60VisualBas10.7.3图形复制PaintPicture方法,可以实现移动图片、复制图片。格式:Object.PaintPicturepicture,x1,y1,width1,height1[,x2,y2,width2,height2]对picture图片中以(x2,y2)为左上角,width2,height2为宽度和高度的图形区域,复制到Object以(x1,y1)为左上角,宽度和高度为width1,height1的区域中picture为必需项,表示图形对象源由Form或PictureBox的Picture属性所决定。61VisualBasic程序设计教程10.7.3图形复制61VisualBasic程序设计·缺省x2,y2,width2,height2则表示将整个picture参数指定的图片,复制到Object中。·例如:(Pic1和Pic12为两个图片框)
Pic1.PaintPicturePic2.Picture,0,0,w1,h1,x2,y2,w2,h2
其中(0,0)和(x2,y2)分别使用Pic1和Pic2的坐标系统。62VisualBasic程序设计教程·缺省x2,y2,width2,height2则表示将整个【例10-10】图形复制。有两张图片放入影像框中,单击任何一个,复制到图片框中央。控件:建立有2个元素的Image控件数组Img1(0)和Img1(1)建立1个图片框控件PicShow设置各对象(名称)属性。设置2个Image控件数组元素的Stretch属性为True。63VisualBasic程序设计教程【例10-10】图形复制。有两张图片放入影像框中,单击任何一 PrivateSubForm_Load()
Img1(0).Picture=LoadPicture("e:\feng\temp\APPWIZ.ICO")
Img1(1).Picture=LoadPicture("e:\feng\temp\face.ico")
PicShow.FontSize=15
EndSub
PrivateSubImg1_Click(IndexAsInteger)
DimtAsString
t="左右"
PicShow.Cls
PicShow.Print"你点中"&Mid(t,Index+1,1)&"边的图片:"
PicShow.PaintPictureImg1(Index).Picture,_
PicShow.Width/2-Img1(Index).Width/2,_
PicShow.Height/2-Img1(Index).Height/2,_
Img1(Index).Width,Img1(Index).Height'复制到中央
EndSub64VisualBasic程序设计教程 PrivateSubForm_Load()
Img10.7.4色彩·使用BackColor、ForeColor、BorderColor、FillColor属性可设置颜色·颜色的设置可以使用颜色常量,也以使用QBColor函数或RGB函数。65VisualBasic程序设计教程10.7.4色彩65VisualBasic程序设计教程·与颜色有关的其它方法:Point方法可以获得某点颜色值,基本格式为:
[对象名.]Point(x,y)该方法将返回一个长整型的RGB颜色值。例如:PointColor=Point(500,500)·如果要对某个长整型颜色值A,区分其红、绿和蓝3种颜色成分,可以使用以下表达式:Red=AMod256:Green=A\256Mod256Blue=A\256\25666VisualBasic程序设计教程·与颜色有关的其它方法:66VisualBasic程序设计10.8程序举例10.8.1房子和太阳【例10-11】使用绘线、绘圆、绘点的方法,画出如图所示的图形(不含数字)。·因为太阳周围要画出多条直线作为光,可将坐标系原点移到太阳的中心点上,循环完成光芒绘制。·其它直线在确定坐标点后,一条一条地画67VisualBasic程序设计教程10.8程序举例10.8.1房子和太阳67Visua PrivateSubCommand1_Click()
ConstPI=3.1415926
DimiAsSingle
Cls:Scale(-110,30)-(30,-80)'更改坐标系
FillStyle=0:FillColor=vbRed'画太阳
Circle(0,0),10,vbRed
Fori=0To2*PIStepPI/10'画光芒
Line(15*Cos(i),15*Sin(i))-(25*Cos(i),25*Sin(i))
Nexti
FillStyle=1'开始画房子(连续画8条直线)
Line(-80,-20)-(-30,-20)'先画房顶最上面一水平线
Line-(-20,-30):Line-(-70,-30):Line-(-80,-20)'前次终点作本次起点
Line-(-90,-30):Line-(-88,-30)'至此,房顶画完
Line-(-88,-65):Line-(-70,-70)'画侧面的墙
Line(-70,-30)-(-22,-70),,B'用矩形画正面的墙
Line(-60,-45)-(-50,-60),,B:Line(-55,-45)-(-55,-60)'画窗
Line(-40,-45)-(-30,-70),,B'画门
DrawWidth=3:PSet(-38,-55)'画门把手
DrawWidth=1'恢复缺省值
EndSub
PrivateSubForm_Load()
AutoRedraw=True
EndSub68VisualBasic程序设计教程 PrivateSubCommand1_Click()
10.8.2制作拼图【例10-12】某单位职工,20~29、30~39、40~49、50~59各年龄段人数分别为5人、7人、10人、8人,退休职工15人。制作表示各年龄段人员分布情况的饼图。·因各段加起来为100%,即为1个圆,角度即为2π69VisualBasic程序设计教程10.8.2制作拼图69VisualBasic程序设计·各段人数所占比例*2π就是扇形的弧度·根据弧度即可制作各实心扇形构成饼图。·同时把相应的颜色用画矩形的方法显示在图片框中,并在边上标出人数。
70VisualBasic程序设计教程·各段人数所占比例*2π就是扇形的弧度70VisualBa PrivateSubCommand1_Click()
ConstPI=3.1415926
DimMan,Alpha()AsSingle,SumAsInteger,iAsInteger
DimAAsSingle,BAsSingle,NAsInteger'a起始角,b扇形终止角
Man=Array(5,7,10,8,15)'包含各段人数的数组元素初始化
Sum=0:N=UBound(Man)+1'n为元素个数
Fori=0ToN–1:Sum=Sum+Man(i):Nexti'求总人数
ReDimAlpha(N-1)'存放各人数段对应扇形的弧度
A=0.00001'因负0不能被表示,所以用0的近似值
FillStyle=0:Picture1.FillStyle=0'窗体和图片框都绘制实心图形
Fori=0ToN-1'绘制扇形、图片框中图例及输出人数
Alpha(i)=2*PI*Man(i)/Sum'计算扇形对应的弧度
FillColor=QBColor(2*i):Picture1.FillColor=QBColor(2*i)
B=A+Alpha(i)'计算终止角的弧度
IfB>2*PIThenB=B-2*PI'弧度不能大于2π
Circle(ScaleWidth/2,ScaleHeight/2),ScaleWidth/4,,-A,-B'绘扇形
Picture1.Line(0,i*Picture1.ScaleHeight/N)-_
(Picture1.ScaleWidth/2,(i+1)*Picture1.ScaleHeight/N),,B'绘矩形
Picture1.CurrentY=i*Picture1.ScaleHeight/N'确定Print位置
Picture1.PrintMan(i)'输出人数
A=B'将已输出的终止角作下一次的起始角
Nexti
EndSub71VisualBasic程序设计教程 PrivateSubCommand1_Click()
PrivateSubForm_Load()‘属性初始化
Form1.AutoRedraw=True:Picture1.AutoRedraw=True
Label1.Caption=“各年龄段人员分布图”
Label1.AutoSize=True
Label1.Left=(Form1.ScaleWidth-Label1.Width)/2
EndSub
其中Picture1.ScaleHeight/n,表示将图片框的高度分成n等分,每一份显示一个图例。
72VisualBasic程序设计教程PrivateSubForm_Load()10.8.3滚动显示大图片【例10-13】编程:在图片框中滚动显示一张大的图片或照片。运行界面如图。·分析:由于图片框本身没有滚动条,因此
要以图片框为容器,添加滚动条。为了能看清整个照片的大致图像,可以使用一个Stretch为True的影像框控件。73VisualBasic程序设计教程10.8.3滚动显示大图片73VisualBasic程不能将查看照片的图片框的AutoSize设为True,但又希望获得照片上的某一区域图案,解决的方法是再增加一个图片框Picture2,让它的AutoSize设为True,同时又让它的Visible属性设为False,只把它作为源图片。当滚动条滚动时,根据滚动条的值,把Picture2中与Picture1相同大小的一块区域,通过PaintPicture方法复制到Picture1中。74VisualBasic程序设计教程不能将查看照片的图片框的AutoSize设为True,但又希 PrivateSubMovePic()'按滚动条的值复制图片
Picture1.PaintPicturePicture2.Picture,1,1,Picture1.Width,_
Picture1.Height,HScroll1.Value,VScroll1.Value,_
Picture1.Width,Picture1.Height
EndSub
75VisualBasic程序设计教程 PrivateSubMovePic()'PrivateSubCommand1_Click()‘显示按钮
DimsAsString
OnErrorGoToA1'为防止输入的文件标识有错,设置出错处理
Picture1.Visible=False'万一文件标识有错,先设它们不可见
s=InputBox("请输入要显示的文件的标识(d:\path\filename.ext)")
IfLen(Trim(s))=0ThenGoToA1'不允许出现空格文件名
Picture2.Picture=LoadPicture(s)'加载源图片
HScroll1.Max=Picture2.Width-Picture1.Width'设置滚动条最大值
VScroll1.Max=Picture2.Height-Picture1.Height
CallMovepic:Picture1.Visible=True'设置Picture1初始图像,并可见
Image1.Picture=Picture2.Picture'设置Image1的显示图像
ExitSub
A1:MsgBox"文件名或路径错误!",vbCritical,"出错"'出错处理
EndSub76VisualBasic程序设计教程PrivateSubCommand1_Click()PrivateSubCommand2_Click()'退出按钮
End
EndSub
PrivateSubForm_Load()'初始化图片框和影像框属性
Picture2.AutoSize=True:Picture2.Visible=False
Picture1.AutoRedraw=True:Picture1.Visible=False
Image1.Stretch=True
EndSub
PrivateSubVScroll1_Change()'垂直滚动条改值时调用MovePic
MovePic
EndSub
77VisualBasic程序设计教程PrivateSubCommand2_Click(PrivateSubHScroll1_Change()'水平滚动条改值时调用MovePic
MovePic
EndSub
·程序运行时,只要输入合法文件标识,并确实是图片文件,就会正常显示,否则给出出错信息。
78VisualBasic程序设计教程PrivateSubHScroll1_Change第10章处理图形VisualBasic程序设计教程第10章处理图形VisualBasic程序设计教程本章主要介绍绘图属性绘图方法图片框影像框80VisualBasic程序设计教程本章主要介绍2VisualBasic程序设计教程10.1概述图形一般指图绘形象,描画出物体的轮廓、形状等。由图元组成,图元可以是点、线、圆、字符、填充区等。每个图元有它的数据定义和外貌特征。如线段端点、粗细等。VB提供了一些控件和方法,绘制图元,最终构成图形容器是绘制图形或控件的场所容器中的对象只能在容器内变动。窗体、框架、图片框是容器移动容器时,内部对象与容器的相对位置保持不变。81VisualBasic程序设计教程10.1概述图形一般指图绘形象,描画出物体的轮廓、形状等。VB容器的图层从前到后为:前层——非绘图控件所在层,如命令按钮、复选框等;中间层——绘图控件和标签所在层;底层——绘图方法显示结果的地方。图层显示特性依靠:AutoRedraw和ClipControls属性的设置及绘图方法是否在Paint事件过程内。图像一般是指绘制、摄制或印制的形象。可将它们装载到图片框、影像框可窗体上82VisualBasic程序设计教程VB容器的图层从前到后为:4VisualBasic程序设计10.2模拟单摆【例10-1】设计一个模拟单摆·控件:图片框控件Picture1:作单摆容器直线控件Line1:作绳索形状控件Shape1:作球(设计界面中为矩形)定时器控件Timer1:控制摆动。83VisualBasic程序设计教程10.2模拟单摆【例10-1】设计一个模拟单摆5Visu·2个模块级变量A和D,表示摆动角度和方向。·2个事件过程:Form_Load,初始化界面和控件属性Timer1_Timer,控制单摆的运动。84VisualBasic程序设计教程·2个模块级变量A和D,表示摆动角度和方向。6VisualOptionExplicit
DimAAsInteger,DAsInteger'模块级变量,A表示角度,D表示方向
ConstPI=3.1415926
PrivateSubForm_Load()
Form1.Width=1.3*Form1.Height'设置窗体的宽度和高度比例
Picture1.Width=1.5*Picture1.Height'设置图片框的宽度和高度比例
Picture1.Scale(-150,-5)-(150,195)'更改坐标系统
Shape1.FillStyle=0'使形状控件的填充模式为"实心"
Shape1.FillColor=vbRed'使形状控件填充红色
Shape1.BorderColor=vbRed'使形状控件的边界颜色为红色
Shape1.Width=15'按坐标系,更改形状控件大小
Shape1.Shape=3'使形状控件的形状为圆形
Line1.BorderColor=vbRed'使绳索颜色为红色
Line1.X1=0:Line1.Y1=0'使绳索上端在原点(0,0)上
Picture1.AutoRedraw=True'使图片框的重绘属性为True
Picture1.Line(-10,0)-(10,0)'顶端画一条固定绳索的横线
Timer1.Interval=100
A=-20:D=-1'设置初始角度和方向
EndSub85VisualBasic程序设计教程OptionExplicit
DimAAsPrivateSubTimer1_Timer()
DimXAsSingle,YAsSingle
IfD=-1ThenA=A+2ElseA=A-2
X=170*Sin(A*PI/180)'确定圆心和直线下端的位置
Y=170*Cos(A*PI/180)
Line1.X2=X:Line1.Y2=Y'更改直线下端位置
Shape1.Left=X-Shape1.Width/2'使圆心位置在直线的下端
Shape1.Top=Y-Shape1.Height/2
IfD=-1AndA=20OrD=1AndA=-20ThenD=-D'±20°改方向
EndSub·Scale方法使图片框左上角和右下角坐标分别为(-150,-5)和(150,195)。·而170表示着绳索的长度,可以取其它值,但应使整个单摆可见。86VisualBasic程序设计教程PrivateSubTimer1_Timer(10.3什么是VB坐标系·坐标系是用于确定数与基本几何对象之间对应关系的参考系,是形和数结合的基础。·VB坐标系是确定对象和图形位置的参考系。·VB中每一个容器采用(x,y)的二维坐标系统·每个对象、图形操作,都要使用坐标系。·VB坐标系统使用有以下规则:移动或调整控件大小时,使用容器的坐标系统。绘图方法和Print方法,使用容器的坐标系统。87VisualBasic程序设计教程10.3什么是VB坐标系·坐标系是用于确定数与基本几何对10.3.1VB默认坐标系·VB坐标系每个点用(x,y)表示x是水平方向沿x轴的位置,默认最左端是0y是垂直方向沿y轴的位置,默认最上端是0·坐标单位又称为坐标刻度,默认缇(twips)。还可以使用磅、像素和毫米等。·屏幕的左上角的坐标总是(0,0)88VisualBasic程序设计教程10.3.1VB默认坐标系10VisualBasic程·其它容器在缺省状态下,左上角是(0,0)。窗体(0,0)点指窗体标题栏下边沿的左上角。·使用对象的刻度属性和Scale方法,可重新设置容器的坐标系统。89VisualBasic程序设计教程·其它容器在缺省状态下,左上角是(0,0)。11Visual10.3.2Scale方法·使用Scale方法可以创建自定义刻度。·Scale方法的使用格式为:
[容器名.]Scale[(x1,y1)-(x2,y2)]1.容器
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 足球比赛单人奖惩制度
- 维稳信息员职责奖惩制度
- 前台行为规范及奖惩制度
- 部门级安全生产奖惩制度
- 客户关系管理奖惩制度
- 公路工程管理奖惩制度
- 车辆动态管理奖惩制度
- 政务中心控烟奖惩制度
- 康复科考核方案及奖惩制度
- 法律明白人考核奖惩制度
- 装修现场监理管理制度
- 京教版小学四年级下册心理健康教育教案
- 会计事务代理课件 项目一 会计事务代理概述
- 14消渴小便不利淋病脉证并治第十三12
- 工厂区机械化清扫保洁措施
- 立案报告书范文
- 生地会考动员班会
- 中国共产主义青年团团员教育管理工作条例(试行)团课学习课件
- 《装配式建筑施工技术》课件-第二章
- JBT 11808-2014 热处理用真空清洗机技术要求
- 耕地承包合同范本
评论
0/150
提交评论