Presentation is loading. Please wait.

Presentation is loading. Please wait.

第10章 处理图形 Visual Basic 程序设计教程.

Similar presentations


Presentation on theme: "第10章 处理图形 Visual Basic 程序设计教程."— Presentation transcript:

1 第10章 处理图形 Visual Basic 程序设计教程

2 本章主要介绍 绘图属性 绘图方法 图片框 影像框 Visual Basic程序设计教程

3 10.1 概述 图形一般指图绘形象,描画出物体的轮廓、形状等。 容器是绘制图形或控件的场所 Visual Basic程序设计教程
由图元组成,图元可以是点、线、圆、字符、填充区等。 每个图元有它的数据定义和外貌特征。如线段端点、粗细等。 VB提供了一些控件和方法,绘制图元,最终构成图形 容器是绘制图形或控件的场所 容器中的对象只能在容器内变动。 窗体、框架、图片框是容器 移动容器时,内部对象与容器的相对位置保持不变。 Visual Basic程序设计教程

4 VB容器的图层从前到后为: 图像一般是指绘制、摄制或印制的形象。 Visual Basic程序设计教程
前层——非绘图控件所在层,如命令按钮、复选框等; 中间层——绘图控件和标签所在层; 底层——绘图方法显示结果的地方。 图层显示特性依靠:AutoRedraw和ClipControls属性的设置及绘图方法是否在Paint事件过程内。 图像一般是指绘制、摄制或印制的形象。 可将它们装载到图片框、影像框可窗体上 Visual Basic程序设计教程

5 10.2 模拟单摆 【例10-1】设计一个模拟单摆 ·控件: 图片框控件Picture1:作单摆容器 直线控件Line1:作绳索
10.2 模拟单摆 【例10-1】设计一个模拟单摆 ·控件: 图片框控件Picture1:作单摆容器 直线控件Line1:作绳索 形状控件Shape1:作球(设计界面中为矩形) 定时器控件Timer1:控制摆动。 Visual Basic程序设计教程

6 ·2个模块级变量A和D,表示摆动角度和方向。 ·2个事件过程: Form_Load,初始化界面和控件属性
Timer1_Timer,控制单摆的运动。 Visual Basic程序设计教程

7 Option Explicit Dim A As Integer, D As Integer '模块级变量,A表示角度,D表示方向 Const PI = Private Sub Form_Load() Form1.Width = 1.3 * Form1.Height '设置窗体的宽度和高度比例 Picture1.Width = 1.5 * Picture1.Height '设置图片框的宽度和高度比例 Picture1.Scale (-150, -5)-(150, 195) '更改坐标系统 Shape1.FillStyle = '使形状控件的填充模式为"实心" Shape1.FillColor = vbRed '使形状控件填充红色 Shape1.BorderColor = vbRed '使形状控件的边界颜色为红色 Shape1.Width = '按坐标系,更改形状控件大小 Shape1.Shape = '使形状控件的形状为圆形 Line1.BorderColor = vbRed '使绳索颜色为红色 Line1.X1 = 0: Line1.Y1 = '使绳索上端在原点(0,0)上 Picture1.AutoRedraw = True '使图片框的重绘属性为True Picture1.Line (-10, 0)-(10, 0) '顶端画一条固定绳索的横线 Timer1.Interval = A = -20: D = '设置初始角度和方向 End Sub Visual Basic程序设计教程

8 Private Sub Timer1_Timer() Dim X As Single, Y As Single If D = -1 Then A = A + 2 Else A = A X = 170 * Sin(A * PI / 180) '确定圆心和直线下端的位置 Y = 170 * Cos(A * PI / 180) Line1.X2 = X: Line1.Y2 = Y '更改直线下端位置 Shape1.Left = X - Shape1.Width / '使圆心位置在直线的下端 Shape1.Top = Y - Shape1.Height / 2 If D = -1 And A = 20 Or D = 1 And A = -20 Then D = -D '±20°改方向 End Sub ·Scale方法使图片框左上角和右下角坐标分别为(-150,-5)和(150,195)。 ·而170表示着绳索的长度,可以取其它值,但应使整个单摆可见。 Visual Basic程序设计教程

9 10.3 什么是VB坐标系 ·坐标系是用于确定数与基本几何对象之间对应关系的参考系,是形和数结合的基础。
·VB中每一个容器采用(x,y)的二维坐标系统 ·每个对象、图形操作,都要使用坐标系。 ·VB坐标系统使用有以下规则: 移动或调整控件大小时,使用容器的坐标系统。 绘图方法和Print方法,使用容器的坐标系统。 10.3 什么是VB坐标系 Visual Basic程序设计教程

10 10.3.1 VB默认坐标系 x是水平方向沿x轴的位置,默认最左端是0 y是垂直方向沿y轴的位置,默认最上端是0
·VB坐标系每个点用(x,y)表示 x是水平方向沿x轴的位置,默认最左端是0 y是垂直方向沿y轴的位置,默认最上端是0 ·坐标单位又称为坐标刻度,默认缇(twips)。 还可以使用磅、像素和毫米等。 ·屏幕的左上角的坐标总是(0,0) Visual Basic程序设计教程

11 ·使用对象的刻度属性和Scale方法,可重新设置容器的坐标系统。
·其它容器在缺省状态下,左上角是(0,0)。 窗体(0,0)点指窗体标题栏下边沿的左上角。 ·使用对象的刻度属性和Scale方法,可重新设置容器的坐标系统。 Visual Basic程序设计教程

12 10.3.2 Scale方法 Visual Basic程序设计教程 1.容器名指窗体名或图片框控件名。 缺省指当前窗体
·Scale方法的使用格式为: [容器名.]Scale [(x1,y1)-(x2,y2)] 1.容器名指窗体名或图片框控件名。 缺省指当前窗体 2.(x1, y1)和(x2, y2) 为新坐标系统左上角和右下角坐标 3.省略(x1,y1)-(x2,y2),恢复缺省刻度。 Visual Basic程序设计教程

13 · 例10-1中Picture1.Scale (-150, -5)-(150, 195)更改图片框坐标系如上图。
这样求运动点(x,y)的位置比较方便 设绳索长为170,则当绳索与y轴的夹角为a时,则x=170sina,y=170cosa。 Visual Basic程序设计教程

14 ·使用坐标属性可以更改容器的坐标刻度,也可以自定义坐标系。
坐标属性 ·使用坐标属性可以更改容器的坐标刻度,也可以自定义坐标系。 ScaleMode:设置坐标刻度,缺省值为1(缇) ScaleLeft:表示或设置对象左边界水平坐标 ScaleTop:表示或设置对象上边界垂直坐标 ScaleWidth:表示或设置对象内水平度量单位数 ScaleHeight:表示或设置对象内垂直度量单位数 CurrentX:当前输出的水平坐标。程序中使用。 CurrentY:当前输出的垂直坐标。程序中使用。 Visual Basic程序设计教程

15 ScaleWidth、ScaleHeight不同于Width、Height
·属性说明: ScaleWidth、ScaleHeight不同于Width、Height ScaleMode属性可以取值0~7,表示刻度分别为自定义、缇、磅、像素、字符、英寸、毫米和厘米。 更改ScaleWidth、ScaleHeight、ScaleLeft、ScaleTop之 一时,VB自动将ScaleMode的值设为0。 如Scale (-150, -5)-(150, 195),也可以表示成: ScaleWidth=300:ScalHeight=200: ScaleLeft=-150:ScaleTop=-5 若要改坐标轴方向,可将ScaleWidth或ScaleHeight设置成负值 Visual Basic程序设计教程

16 ScaleMode属性取值为1~7时的刻度,称为标准刻度
在设置了ScaleMode属性的值后,VB会重定义ScaleWidth和ScaleHeight,使它们与新刻度保持一致。 左上角坐标总是:(ScaleLeft,ScaleTop) 右下角坐标总是: (ScaleLeft+ScaleWidth,ScaleTop +ScaleHeight)。 Visual Basic程序设计教程

17 10.4 使用绘图方法 10.4.1 画点—PSet方法 ·绘图方法可画点、画线、画矩形、画椭圆等。
10.4 使用绘图方法 画点—PSet方法 ·绘图方法可画点、画线、画矩形、画椭圆等。 ·格式:[对象名.]PSet (x,y) [,颜色] 1.(x,y)为所画点的坐标位置 2.颜色指点的颜色。缺省时由容器的ForeColor属性决定。 例如:PSet (1000, 1000), RGB(255, 0, 0) 在(1000,1000)处画红点,大小由容器的DrawWidth属性决定。 3.擦除一个点,可采用以背景色重画点。 4. Cls方法可擦除绘图方法及Print方法的输出内容。 Visual Basic程序设计教程

18 【例10-2】绘制一条y=x2的抛物线。 Private Sub Form_Click() Dim x As Single Scale (-10, 105)-(10, -2) For x = -9 To 9 Step PSet (x, x * x) Next x End Sub Visual Basic程序设计教程

19 1.画线格式:[对象名.]Line [(x1,y1)]-(x2,y2) [,颜色]
如:Line (100, 150)-(1400, 1300), vbRed ·缺省起点 (x1,y1),表示将当前输出位置作为 起点。 Visual Basic程序设计教程

20 坐标点的另一种表示形式为:Step(x,y)
对象的当前位置由CurrentX和CurrentY决定 Line (100, 200)-(150, 250)等价:Line (100, 200)-Step(50, 50) VB画直线时,包括了起点,未包括终点。画终点可用: PSet Step(0, 0)[, color] 连续使用缺省起点的Line方法,可以绘制多点折线。 Visual Basic程序设计教程

21 【例10-3】在窗体上中间画出一个等腰三角形。 可根据窗体ScaleWidth和ScaleHeight属性确定三点位置
由于一条线的终点等价于另一条线的起点,因此除了第一条线以外,其它两条线均可用缺省起点的Line方法。 Visual Basic程序设计教程

22 Private Sub Command1_Click() Dim x1 As Integer, x2 As Integer, x3 As Integer Dim y1 As Integer, y2 As Integer, y3 As Integer 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) End Sub Visual Basic程序设计教程

23 2.画矩形采用格式: [对象名.]Line [(x1,y1)]-(x2,y2) ,[颜色],B[F]
如:Line (500, 200)-Step(200, 200), vbRed, B 如: Line (500, 200)-Step(200, 200), vbRed, BF 若颜色缺省,逗号也不能省 Visual Basic程序设计教程

24 【例10-4】编制简易黑板。功能是:用鼠标左键在窗体上拖动时,画出线条;用鼠标右键在窗体上拖动时,擦去线条。击“清除” 擦去所有痕迹。
·事件: 窗体MouseDown:画出按下鼠标的第一点 窗体MouseMove:画出线条或删除线条 用背景色,画小矩形擦 “清除”的Click:擦去所有痕迹 Visual Basic程序设计教程

25 Visual Basic程序设计教程 Private Sub Command1_Click() '擦“黑板”Cls End Sub
Private Sub Form_Load() '初始化 Form1.Caption = "简易黑板" Form1.BackColor = RGB(0, 0, 0) Form1.ForeColor = RGB(255, 255, 255) Command1.Caption = "擦除" Visual Basic程序设计教程

26 Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then ' Button = 1表示按下左键, 画第一点 Form1.PSet (X, Y) End If End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then '左键拖动画线 Form1.Line -(X, Y) ElseIf Button = 2 Then '右键拖动以黑色画实心方块,起擦除作用 Form1.Line (X - 200, Y - 200)-(X + 200, Y + 200), RGB(0, 0, 0), BF Visual Basic程序设计教程

27 · Circle方法可画出圆、圆弧、扇形或椭圆。 1.画圆格式: [对象名.]Circle [Step](x,y), 半径 [,颜色]
半径的度量单位与容器坐标系的单位相同,不能为负。 画圆时,半径通常由水平单位指定。 Visual Basic程序设计教程

28 又如以窗体中心为圆心,以窗体ScaleWidth的1/4为半径画圆:
如下列代码绘制如图。 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 / 4 Visual Basic程序设计教程

29 【例10-5】编程,在窗体中间画1000个同心多彩圆。 ·编写通用过程PaintCircle:绘制彩色圆
Sub PaintCircle() Dim R As Integer, X As Integer, Y As Integer X = ScaleWidth / '将x坐标设置在窗体内横向中间 Y = ScaleHeight / '将y坐标设置在窗体内纵向中间 If X < Y Then R = X * 0.9 Else R = Y * Circle (X, Y), R * Rnd, RGB(Rnd * 255, Rnd * 255, Rnd * 255) '画圆 End Sub Visual Basic程序设计教程

30 Private Sub Command1_Click() Dim i As Integer For i = 1 To 1000 PaintCircle Next End Sub
其中乘0.9是为了最大圆不会紧贴窗体边缘。 Visual Basic程序设计教程

31 2.画弧格式为: [对象名.]Circle [Step](x,y),半径,[颜色], Start, End[, Aspect]
圆弧以弧度为单位,按逆时针方向画弧。 Start和End表示弧线起始角和终止角的弧度数据 平行于X轴的正向为0弧度 如果Start参数或End参数是负数,则VB将画一条连接圆心到负端点的直线。 使用不为1的 Aspect参数,表示为椭圆弧线的一段。 如: Circle (800, 800), 500, , / 2, / 3 Circle (1800, 800), 500, , 0, 3 * 3.14 / 4 Visual Basic程序设计教程

32 3.画椭圆格式: [对象名.]Circle [Step](x,y),半径[,颜色, Start, End, Aspect]
VB在Circle方法中的半径参数对应椭圆的长轴。 [,颜色, Start, End, Aspect]四项中任一项都是可选的,当前面的项缺省时,逗号仍不能省去。 省略Start, End中的任一项,表示该项为0,画弧。两项都省去,表示画圆或椭圆。 如以下代码,使用半径均为500,但使用不同的方位比,其效果如图。 Circle (800, 800), 500, , , , 3 Circle (800, 800), 500 Circle (2000, 800), 500, , , , 1 / 3 Visual Basic程序设计教程

33 10.5 使用绘图属性 10.5.1 更改线条形式 1.DrawWidth属性 DrawWidth属性可以设置线条的粗细、点的大小
10.5 使用绘图属性 更改线条形式 1.DrawWidth属性 DrawWidth属性可以设置线条的粗细、点的大小 DrawWidth属性值以像素为单位,取值范围为1~32767 当数据取得很大时,可能一个点就能占满整个容器。 Visual Basic程序设计教程

34 下面代码根据DrawWidth取值,效果如图。 Private Sub Form_Click() Dim i As Integer, t As Integer t = ScaleWidth / 20 For i = 1 To 20 Step 2 Form1.DrawWidth = i PSet (t * i, ScaleHeight / 4) Line (t * i, ScaleHeight / 2)-(t * i, ScaleHeight) Next i End Sub Visual Basic程序设计教程

35 2.DrawStyle属性 DrawStyle属性用于指定绘制的图形线条形式。 DrawStyle属性取值为0~6,形式如表。 6:内收实线,框线较粗时, 才可见效果,如图 Visual Basic程序设计教程

36 10.5.2 填充图案 1.FillStyle属性 Visual Basic程序设计教程 设置封闭图形的填充图案样式,取值0至7
填充图案 1.FillStyle属性 设置封闭图形的填充图案样式,取值0至7 缺省值为1 ,无论何种色彩,均表现为空心。 如希望窗体上显示各填充效果,可用代码: t = ScaleWidth / 9 For I = 0 To 7 FillStyle = I Line (I * t + 100, 500)-((I + 0.8) * t + 100, ), , B Next I Visual Basic程序设计教程

37 只要FillStyle属性不为1,就可FillColor填色 VB填充矩形、圆、扇形等封闭图形
FillColor属性的设置方式和ForeColor相同 Visual Basic程序设计教程

38 注意FillColor和ForeColor的差别: 前者用于填充颜色 后者为默认的边线颜色,或输出文字颜色。
若Line语句中使用了参数F,则所有的填充形式和填充颜色都无效。 Visual Basic程序设计教程

39 【例10-6】根据绘图属性,画扇形、画椭圆、画环。
·对于圆环,没有单独语句,可用图形组合。 Private Sub Command1_Click() '画扇形。 FillStyle = 7 FillColor = RGB(255, 0, 0) Circle (800, 1000), 800, , , * 2 / 3 End Sub Visual Basic程序设计教程

40 Private Sub Command2_Click() ‘画两个椭圆 FillStyle = ’画一个红色点线的空心椭圆 DrawStyle = 2 : Circle (2300, 500), 400, vbRed, , , 2 DrawStyle = ‘恢复默认的线条样式 FillStyle = ’画线宽3个像素,线条红色的 一个实心黄椭圆 DrawWidth = 3 : FillColor = vbYellow Circle (2300, 1200), 400, vbRed, , , DrawWidth = '恢复默认线宽 End Sub Private Sub Command3_Click() '绘制圆环 FillStyle = '画一个有填充的大圆 FillColor = vbBlue : Circle (3500, 1000), 600, vbRed FillStyle = '画一个实心的以背景色填充的同心小圆 FillColor = BackColor : Circle (3500, 1000), 300, vbRed End Sub 为了在0弧度上能画上横线,使用了 Visual Basic程序设计教程

41 10.6 使用绘图控件 10.6.1 直线控件(Line) ·直线控件可以在容器对象中绘制直线 ·该直线不能被Cls方法清除,
·程序中修改端点可以移动直线。 1.创建直线控件:工具箱内选取直线工具 10.6 使用绘图控件 Visual Basic程序设计教程

42 2.直线控件的主要属性 ·直线控件没有事件 (名称)Name。直线控件名称。缺省值为Line1 BorderColor:设置线条颜色
BorderStyle:线条样式,取值为0~6,分别表示透明、实线、破折线、点线、点划线、双点划线和内收实线。 BorderWidth:设置线条粗细 X1和Y1:分别为起点的x坐标和y坐标 X2和Y2:分别为终点的x坐标和y坐标 ·直线控件没有事件 Visual Basic程序设计教程

43 10.6.2 形状控件(Shape) ·形状控件可以直接在容器对象中绘制图形 ·这些图形可是圆、椭圆、也可以是矩形等
1.创建形状控件:在工具箱内选取工具 2.形状控件的属性 同直线控件的BorderColor、BorderStyle、BorderWidth 常规属性Height、Width、Left、Top、Visible等 Name(名称),形状控件名称。缺省值为Shape1 Visual Basic程序设计教程

44 ·控件为圆时,半径为Height/2和Width/2的最小值; ·控件为正方形时,边长为Height和Width的最小值。
FillColor:设置填充颜色 FillStyle:填充样式,取值0~7,默认为1,即透明。 Shape:设置图形的形状,取值0~5,分别表示矩形、正方形、椭圆、圆、圆角矩形、圆角正方形。默认为0。 ·控件为圆时,半径为Height/2和Width/2的最小值; ·控件为正方形时,边长为Height和Width的最小值。 ·Shape控件没有事件。 Visual Basic程序设计教程

45 ·用Time、Hour、Minute、Second函数获得时、分、秒
【例10-7】用直线控件和形状控件制作钟。 ·控件: 7条直线控件 Line1~Line4作为3、6、9、12点的位置 Line5~Line7分别作为时、分、秒的指针。 1个形状控件:作为钟的圆盘 ·用Time、Hour、Minute、Second函数获得时、分、秒 ·为了计算方便,原点(0,0)改在窗体中心,并且轴方向与数学上的一致,但没有更改刻度。 ·时和分采用实数型 ·本题所有的属性设置在Form_Load中完成。 Visual Basic程序设计教程

46 Dim H1 As Integer, M1 As Integer, S1 As Integer '指针长度 Const PI = 3
Dim H1 As Integer, M1 As Integer, S1 As Integer '指针长度 Const PI = Private Sub Form_Load() '初始化 Dim R As Integer '钟的半径 Scale (-ScaleWidth / 2, ScaleHeight / 2)-(ScaleWidth / 2, -ScaleHeight / 2) Shape1.FillStyle = 0: Shape1.Shape = 3: Shape1.FillColor = vbYellow Shape1.Left = -Shape1.Width / 2: Shape1.Top = Shape1.Height / 2 If Shape1.Width<Shape1.Height Then R=Shape1.Width/ Else R=Shape1.Height/ '确定半径 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事件过程 End Sub Visual Basic程序设计教程

47 Private Sub Timer1_Timer() Dim H As Single, M As Single, S As Single '计算出时分秒 S =Second(Time): M=Minute(Time)+S/60: H= Hour(Time) Mod 12 +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) End Sub ·通过S * 2 * PI / 60等计算出指针与x轴的夹角弧度 ·指针是在90度开始逆向运动,所以用:PI / 2 - S * 2 * PI / 60。 ·对于时针,转一圈为12小时,故除以12。 Visual Basic程序设计教程

48 10.7 VB图像和色彩 10.7.1 图片框(PictureBox) ·图片框控件属于容器控件 1.创建图片框 可以放置其它控件
可以显示图形、显示Print方法输出的文本 可以载入图片或图像。 1.创建图片框 在工具箱内选取图片框工具 Visual Basic程序设计教程

49 2.图片框的主要属性 坐标系:ScaleHeight、ScaleLeft、ScaleMode、ScaleWidth、ScaleTop
绘图:AutoRedraw、DrawStyle、DrawWidth、FillColor、FillStyle (名称)Name。图片框控件名称。缺省Picture1 AutoSize:控件是否会自动改变大小适合加载的图片。值为True时,自动调整大小与显示的图片相匹配。 Picture:设置控件内显示的图片文件 Visual Basic程序设计教程

50 3.图片框的事件 Click、DblClick、MouseDown、MouseMove、MouseUp、Paint、Resize等 4.图片框的方法 Move方法:移动或调整图片框大小 Circle、Line和Pset方法:画图 Print方法:输出文本或数据 Cls方法:清除输出的内容,但不能清除控件及图片。 还有PaintPicture和Point等方法(后面介绍) Visual Basic程序设计教程

51 5.加载图片 · 属性窗口中设置Picture属性 VB支持 .bmp、.ico、.wmf、.jpg和.gif等文件。加载方法:
· 程序中利用函数LoadPicture设置Picture属性,格式为: 对象名.Picture = LoadPicture("文件说明") 清除图片,格式为:对象名.Picture = LoadPicture("") Visual Basic程序设计教程

52 【例10-8】编程:模拟显示某系统正在读取数据。
·控件: 图片框:内部显示一系列矩形 标签:提示“系统正在读取数 据,请稍等…” 命令按钮:使定时器工作 定时器控件:在图片框内定时 画矩形。 Visual Basic程序设计教程

53 Private Sub Command1_Click() '“开始”按钮 Timer1. Enabled = True : Command1
Private Sub Command1_Click() '“开始”按钮 Timer1.Enabled = True : Command1.Enabled = False : Picture1.Cls Label1.Caption = "系统正在读取数据,请稍等..." End Sub Private Sub Form_Load() Form1.Caption = "图片框示例": Picture1.AutoRedraw = True Label1.Caption = "": Label1.AutoSize = True Timer1.Enabled = False: Timer1.Interval = 1000 End Sub Visual Basic程序设计教程

54 Private Sub Timer1_Timer() Static n As Integer Picture1. Line (160
Private Sub Timer1_Timer() Static n As Integer Picture1.Line (160 * n, 0)-(160 * n + 100, Picture1.ScaleHeight), , BF If 160 * n >= Picture1.ScaleWidth Then Label1.Caption = "数据读取完成!共用了" & (n + 1) & " 秒" MsgBox "数据读取完成!", , "消息" Command1.Enabled = True : Command1.SetFocus n = 0 : Timer1.Enabled = False Else n = n + 1 End If End Sub Visual Basic程序设计教程

55 ·影像框控件只用于显示图片,不能作为容器。 1.创建影像框:在工具箱内选取影像框工具 2.影像框的属性
影像框(Image) ·影像框控件与图片框控件相似 ·影像框控件只用于显示图片,不能作为容器。 1.创建影像框:在工具箱内选取影像框工具 2.影像框的属性 影像框控件使用布局属性和可见、可用属性。 没有字体属性、颜色属性、坐标属性和绘图属性。 Visual Basic程序设计教程

56 其它主要属性: Visual Basic程序设计教程 (名称)Name。影像框控件名称,缺省值为Image1。
Stretch:设置加载的图片是否能自动扩展或缩小以适应控件的尺寸,还是影像框去适合图片的大小。缺省值为False。 Stretch为True时,影像框大小不会自动改变,可由影像框的大小来调整图片的大小 Stretch为为False 时,影像框的大小根据图片大小来自动调整。 Picture:设置控件内显示的图片文件。 Visual Basic程序设计教程

57 3.影像框的事件 4.影像框的方法 Click、DblClick、MouseDown、MouseMove、MouseUp
但没有Paint和Resize事件。 可用Image控件创建按钮(因识别Click)。 4.影像框的方法 可用Move方法移动或调整它的大小 没有绘图方法。 Visual Basic程序设计教程

58 ·Image使用较少系统资源,且加载比PictureBox快。 ·当只要求显示图片时,可以选用Image控件。
5.加载图片 使用Picture属性 可以在属性窗口中设置 可以利用函数LoadPicture来设置Picture属性。 ·Image使用较少系统资源,且加载比PictureBox快。 ·当只要求显示图片时,可以选用Image控件。 Visual Basic程序设计教程

59 【例10-9】利用定时器控件编程,使得4幅图片在影像框Image1中轮流显示,当单击Image1时,将放大的图片显示在Image2中。
·控件: 2个影像框控件: Stretch属性设置为True 1个定时器控件 ·使用静态变量控制图片显示。 Visual Basic程序设计教程

60 10.7.2影像框--图片轮流显示 Visual Basic程序设计教程
Private Sub Form_Load() '初始化属性 Timer1.Interval = Image1.Stretch = True: Image2.Stretch = True Image1.ToolTipText = "请单击" '当鼠标移动到Image1上,显示文字 End Sub Private Sub Image1_Click() '复制 Image2.Picture = Image1.Picture End Sub Private Sub Timer1_Timer() Static N As Integer Image1.Picture = LoadPicture("D:\Wen\" & N & ".jpg") N = (N + 1) Mod 4 End Sub 文件名使用了0.jpg~3.jpg,故可使用字符串表达式: "D:\Wen\" & N & ".jpg" Visual Basic程序设计教程

61 10.7.3 图形复制 PaintPicture方法,可以实现移动图片、复制图片。
图形复制 PaintPicture方法,可以实现移动图片、复制图片。 格式:Object.PaintPicture picture,x1,y1,width1,height1[,x2, y2, width2,height2] 对picture图片中以(x2,y2)为左上角,width2, height2为宽度和高度的图形区域,复制到Object 以(x1,y1)为左上角,宽度和高度为width1,heigh t1的区域中 picture为必需项,表示图形对象源 由Form或PictureBox的Picture属性所决定。 Visual Basic程序设计教程

62 ·缺省x2,y2, width2,height2则表示将整个picture参数指定的图片,复制到Object中。
·例如: ( Pic1 和Pic12为两个图片框) Pic1.PaintPicture Pic2.Picture, 0, 0, w1, h1, x2, y2, w2, h2 其中(0,0)和(x2, y2)分别使用Pic1和Pic2的坐标系统。 Visual Basic程序设计教程

63 【例10-10】图形复制。有两张图片放入影像框中,单击任何一个,复制到图片框中央。 控件:
建立有2个元素的Image控件数组Img1 (0)和Img1(1) 建立1个图片框控件PicShow 设置各对象(名称)属性。设置2个Image控件数组元素的Stretch属性为True。 Visual Basic程序设计教程

64 Private Sub Form_Load() Img1(0)
Private Sub Form_Load() Img1(0).Picture = LoadPicture("e:\feng\temp\APPWIZ.ICO") Img1(1).Picture = LoadPicture("e:\feng\temp\face.ico") PicShow.FontSize = 15 End Sub Private Sub Img1_Click(Index As Integer) Dim t As String t = "左右" PicShow.Cls PicShow.Print "你点中" & Mid(t, Index + 1, 1) & "边的图片:" PicShow.PaintPicture Img1(Index).Picture, _ PicShow.Width/2 - Img1(Index).Width/2, _ PicShow.Height/2 - Img1(Index).Height/2, _ Img1(Index).Width, Img1(Index).Height '复制到中央 End Sub Visual Basic程序设计教程

65 ·使用BackColor、ForeColor、BorderColor、FillColor属性可设置颜色
色彩 ·使用BackColor、ForeColor、BorderColor、FillColor属性可设置颜色 ·颜色的设置可以使用颜色常量,也以使用QBColor函数或RGB函数。 Visual Basic程序设计教程

66 Point方法可以获得某点颜色值,基本格式为: [对象名.] Point(x, y) 该方法将返回一个长整型的RGB颜色值。
·与颜色有关的其它方法: Point方法可以获得某点颜色值,基本格式为: [对象名.] Point(x, y) 该方法将返回一个长整型的RGB颜色值。 例如:PointColor = Point (500, 500) ·如果要对某个长整型颜色值A,区分其红、绿和蓝3种颜色成分,可以使用以下表达式: Red = A Mod 256 : Green = A \ 256 Mod 256 Blue = A \ 256 \ 256 Visual Basic程序设计教程

67 10.8 程序举例 10.8.1 房子和太阳 【例10-11】使用绘线、绘圆、绘点的方法,画出如图所示的图形(不含数字)。
房子和太阳 【例10-11】使用绘线、绘圆、绘点的方法,画出如图所示的图形(不含数字)。 ·因为太阳周围要画出多条直 线作为光,可将坐标系原点 移到太阳的中心点上,循环 完成光芒绘制。 ·其它直线在确定坐标点后,一条一条地画 10.8 程序举例 Visual Basic程序设计教程

68 Private Sub Command1_Click() Const PI = 3
Private Sub Command1_Click() Const PI = Dim i As Single Cls : Scale (-110, 30)-(30, -80) '更改坐标系 FillStyle = 0: FillColor = vbRed '画太阳 Circle (0, 0), 10, vbRed For i = 0 To 2 * PI Step PI / '画光芒 Line (15 * Cos(i), 15 * Sin(i))-(25 * Cos(i), 25 * Sin(i)) Next i FillStyle = '开始画房子(连续画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 = '恢复缺省值 End Sub Private Sub Form_Load() AutoRedraw = True End Sub Visual Basic程序设计教程

69 制作拼图 【例10-12】某单位职工,20~29、30~39、40~49、50~59各年龄段人数分别为5人、7人、10人、8人,退休职工15人。制作表示各年龄段人员分布情况的饼图。 ·因各段加起来为100%,即为1 个圆,角度即为2π Visual Basic程序设计教程

70 ·同时把相应的颜色用画矩形的方法显示在图片框中,并在边上标出人数。
·各段人数所占比例*2π就是扇形的弧度 ·根据弧度即可制作各实心扇形构成饼图。 ·同时把相应的颜色用画矩形的方法显示在图片框中,并在边上标出人数。 Visual Basic程序设计教程

71 Private Sub Command1_Click() Const PI = 3
Private Sub Command1_Click() Const PI = Dim Man, Alpha() As Single, Sum As Integer, i As Integer Dim A As Single, B As Single, N As Integer 'a起始角,b扇形终止角 Man = Array(5, 7, 10, 8, 15) '包含各段人数的数组元素初始化 Sum = 0: N = UBound(Man) 'n为元素个数 For i = 0 To N – 1: Sum = Sum + Man(i) : Next i '求总人数 ReDim Alpha(N - 1) '存放各人数段对应扇形的弧度 A = '因负0不能被表示,所以用0的近似值 FillStyle = 0: Picture1.FillStyle = '窗体和图片框都绘制实心图形 For i = 0 To N '绘制扇形、图片框中图例及输出人数 Alpha(i) = 2 * PI * Man(i) / Sum '计算扇形对应的弧度 FillColor = QBColor(2 * i): Picture1.FillColor = QBColor(2 * i) B = A + Alpha(i) '计算终止角的弧度 If B > 2 * PI Then B = 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.Print Man(i) '输出人数 A = B '将已输出的终止角作下一次的起始角 Next i End Sub Visual Basic程序设计教程

72 Private Sub Form_Load() ‘属性初始化 Form1. AutoRedraw = True: Picture1
Private Sub Form_Load() ‘属性初始化 Form1.AutoRedraw = True: Picture1.AutoRedraw = True Label1.Caption = “各年龄段人员分布图” Label1.AutoSize = True Label1.Left = (Form1.ScaleWidth - Label1.Width) / 2 End Sub 其中Picture1.ScaleHeight / n,表示 将图片框的高度分成n等分,每一份显示 一个图例。 Visual Basic程序设计教程

73 【例10-13】编程:在图片框中滚动显示一张大的图片或照片。运行界面如图。 ·分析:
滚动显示大图片 【例10-13】编程:在图片框中滚动显示一张大的图片或照片。运行界面如图。 ·分析: 由于图片框本身没有滚动条,因此 要以图片框为容器,添加滚动条。 为了能看清整个照片的大致图像,可以使用一个Stretch为True的影像框控件。 Visual Basic程序设计教程

74 不能将查看照片的图片框的AutoSize设为True,但又希望获得照片上的某一区域图案,解决的方法是再增加一个图片框Picture2,让它的AutoSize设为True,同时又让它的Visible属性设为False,只把它作为源图片。 当滚动条滚动时,根据滚动条的值,把Picture2中与Picture1相同大小的一块区域,通过PaintPicture方法复制到Picture1中。 Visual Basic程序设计教程

75 Private Sub MovePic() '按滚动条的值复制图片 Picture1. PaintPicture Picture2
Private Sub MovePic() '按滚动条的值复制图片 Picture1.PaintPicture Picture2.Picture, 1, 1, Picture1.Width, _ Picture1.Height, HScroll1.Value, VScroll1.Value, _ Picture1.Width, Picture1.Height End Sub Visual Basic程序设计教程

76 Private Sub Command1_Click() ‘显示按钮 Dim s As String On Error GoTo A '为防止输入的文件标识有错,设置出错处理 Picture1.Visible = False '万一文件标识有错,先设它们不可见 s = InputBox("请输入要显示的文件的标识(d:\path\filename.ext)") If Len(Trim(s)) = 0 Then GoTo A '不允许出现空格文件名 Picture2.Picture = LoadPicture(s) '加载源图片 HScroll1.Max = Picture2.Width - Picture1.Width '设置滚动条最大值 VScroll1.Max = Picture2.Height - Picture1.Height Call Movepic: Picture1.Visible = True '设置Picture1初始图像,并可见 Image1.Picture = Picture2.Picture '设置Image1的显示图像 Exit Sub A1: MsgBox "文件名或路径错误!", vbCritical, "出错" '出错处理 End Sub Visual Basic程序设计教程

77 Private Sub Command2_Click() '退出按钮 End End Sub Private Sub Form_Load() '初始化图片框和影像框属性 Picture2.AutoSize = True: Picture2.Visible = False Picture1.AutoRedraw = True: Picture1.Visible = False Image1.Stretch = True End Sub Private Sub VScroll1_Change() '垂直滚动条改值时调用MovePic MovePic End Sub Visual Basic程序设计教程

78 ·程序运行时,只要输入合法文件标识,并确实是图片文件,就会正常显示,否则给出出错信息。
Private Sub HScroll1_Change() '水平滚动条改值时调用MovePic MovePic End Sub ·程序运行时,只要输入合法文件标识,并确实是图片文件,就会正常显示,否则给出出错信息。 Visual Basic程序设计教程


Download ppt "第10章 处理图形 Visual Basic 程序设计教程."

Similar presentations


Ads by Google