教学课件第9章 图形设计.ppt

上传人:春哥&#****71; 文档编号:12723261 上传时间:2022-04-25 格式:PPT 页数:47 大小:515.50KB
返回 下载 相关 举报
教学课件第9章 图形设计.ppt_第1页
第1页 / 共47页
教学课件第9章 图形设计.ppt_第2页
第2页 / 共47页
点击查看更多>>
资源描述

《教学课件第9章 图形设计.ppt》由会员分享,可在线阅读,更多相关《教学课件第9章 图形设计.ppt(47页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、1第第9章章图形设计图形设计 2本章内容本章内容n图形设计的基础知识图形设计的基础知识n坐标系统、颜色坐标系统、颜色n各种绘图方法和绘图的基本技巧各种绘图方法和绘图的基本技巧n绘图属性绘图属性n图形的重绘图形的重绘 3学习目标学习目标 n了解了解Visual Basic坐标系统的刻度单位坐标系统的刻度单位n了解默认坐标系了解默认坐标系n了解图形的重绘的方法了解图形的重绘的方法n理解当前坐标、颜色值等概念理解当前坐标、颜色值等概念n掌握自定义坐标系的方法掌握自定义坐标系的方法n掌握与线宽、线形、填充色、填充样式有关的掌握与线宽、线形、填充色、填充样式有关的属性和其使用方法属性和其使用方法n熟练掌

2、握画点、矩形、圆、椭圆、圆弧的方法熟练掌握画点、矩形、圆、椭圆、圆弧的方法n能够利用本章介绍的绘图方法,设计编写绘制能够利用本章介绍的绘图方法,设计编写绘制各种简单几何图形的程序各种简单几何图形的程序 49.1 坐标系统与颜色坐标系统与颜色 n坐标系统坐标系统 nVisual Basic的坐标系统与数学中的直角坐标系的坐标系统与数学中的直角坐标系类似类似nY轴是向下的轴是向下的nVisual Basic的容器对象都有自己的坐标系统的容器对象都有自己的坐标系统n在容器中放置的其他对象,其在容器中放置的其他对象,其Left、Top属性就属性就是相对于容器坐标原点的横坐标和纵坐标是相对于容器坐标原点

3、的横坐标和纵坐标n在容器中绘制图形也是相对于坐标系的在容器中绘制图形也是相对于坐标系的n图形中每个点的位置都由当前坐标系中的坐标来图形中每个点的位置都由当前坐标系中的坐标来确定确定n坐标系不同,图形的相对位置也不同坐标系不同,图形的相对位置也不同 5刻度单位刻度单位 n容器的容器的ScaleMode属性确定了使用的刻度单位属性确定了使用的刻度单位 值值系统常量系统常量单位单位含义含义0vbUserUser用户自定义。若设置了用户自定义。若设置了ScaleWidth、ScaleHeight、ScaleLeft、ScaleTop属性,属性,ScaleMode自动为自动为01vbTwipsTwip(

4、缇)(缇)默认值,默认值,1440 Twip等于等于1英寸英寸2vbPointsPoint(点)(点)72点等于点等于1英寸英寸3vbPixelsPixel(象素)(象素)每英寸象素数由设备分辨率确定每英寸象素数由设备分辨率确定4vbCharactersCharacter(字符)(字符)1个字符为个字符为1/12英寸宽,英寸宽,1/6英寸高英寸高5vbInchesInch(英寸)(英寸)6vbMillimetersMillimeter(毫米)(毫米)7vbCentimetersCentimeter(厘米)(厘米)6Visual Basic默认坐标系默认坐标系 n刻度单位是刻度单位是Twipn坐

5、标原点(坐标原点(0,0)是容器对象工作区的左上角)是容器对象工作区的左上角nX轴的方向向右,轴的方向向右,Y轴的方向向下轴的方向向下nScaleWidth和和ScaleHeight属性属性 窗体的窗体的Height图片框的图片框的Height图片框的图片框的ScaleHeight窗体的窗体的ScaleHeight窗体的窗体的Width窗体的窗体的ScaleWidth图片框的图片框的ScaleWidth图片框的图片框的Width(0,0)(0,0)Y轴轴Y轴轴X轴轴X轴轴7自定义坐标系自定义坐标系 n容器对象的容器对象的Scale方法方法 n.Scale () ()n省略对象名表示是当前窗体省

6、略对象名表示是当前窗体nx1, y1是对象新坐标系下工作区左上角的坐标值是对象新坐标系下工作区左上角的坐标值nx2, y2是对象新坐标系下工作区右下角的坐标值是对象新坐标系下工作区右下角的坐标值n缺省缺省x1, y1和和x2, y2表示恢复表示恢复Visual Basic默认坐标系默认坐标系(-500,400)(500,-400)XY Scale (-500, 400) - (500, -400)(-200,300)(500,-100)XYScale (-200, 300) - (500, -100)8n例例9-1 运行下面程序,单击运行下面程序,单击Command1按钮移按钮移动动Text1

7、文本框,然后单击窗体后再单击文本框,然后单击窗体后再单击Command1按钮,观察两次移动文本框的不同按钮,观察两次移动文本框的不同 Private Sub Command1_Click() Text1.Move 100, 200 Text1.Text = 宽:宽: & Str(Text1.Width) _ & ,高:,高: & Str(Text1.Height)End SubPrivate Sub Form_Click() Scale (-100, 300) - (500, -100) Line (-100, 0) - (500, 0) Line (0, 300) - (0, -100) C

8、urrentX = 0 CurrentY = 0 Print OEnd Sub 改变坐标系前移动文本框改变坐标系前移动文本框改变坐标系后移动文本框改变坐标系后移动文本框9当前坐标当前坐标 nCurrentX和和CurrentY属性记录当前坐标位置属性记录当前坐标位置n只能在程序中引用和赋值,不能在属性窗口中设置只能在程序中引用和赋值,不能在属性窗口中设置 n例如例如nPrivate Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)n CurrentX = Xn CurrentY =

9、 Yn Print 这是当前位置这是当前位置nEnd Subn单击窗体,将从鼠标点击的位置开始,输出单击窗体,将从鼠标点击的位置开始,输出“这这是当前位置是当前位置” 10颜颜 色色 n颜色的表示颜色的表示n屏幕上每个点的颜色由红、绿、蓝屏幕上每个点的颜色由红、绿、蓝3种基色混合而种基色混合而成成n3种基色的比例不同,产生的颜色效果就不同种基色的比例不同,产生的颜色效果就不同n每种基色用一个整数表示,其取值范围是每种基色用一个整数表示,其取值范围是0255 n3种基色值按一定格式构成一个不小于种基色值按一定格式构成一个不小于0的整数即的整数即颜色值,代表一种颜色颜色值,代表一种颜色n例如例如n

10、0表示黑色表示黑色n十六进制数十六进制数 H00FFFFFF 表示白色表示白色nH000000FF表示红色表示红色 11QBColor函数函数 n返回返回16种常见颜色的颜色值种常见颜色的颜色值n调用格式调用格式nQBColor() 颜色码颜色码颜色颜色颜色码颜色码颜色颜色0黑黑8灰灰1蓝蓝9亮蓝亮蓝2绿绿10亮绿亮绿3青青11亮青亮青4红红12亮红亮红5品工品工13亮品红亮品红6黄黄14亮黄亮黄7白白15亮白亮白12RGB函数函数n颜色函数颜色函数RGB可以指定可以指定3种基色所占的成分来获得一个颜色值种基色所占的成分来获得一个颜色值n调用格式调用格式nRGB(,)nRed、Green、Bl

11、ue分别是基色红、绿、蓝在颜色中所占的成分分别是基色红、绿、蓝在颜色中所占的成分n它们的取值范围都是它们的取值范围都是0255n某个基色数值越大,表示该基色在颜色中的成分越多某个基色数值越大,表示该基色在颜色中的成分越多 颜色颜色红红绿绿蓝蓝例例颜色颜色红红绿绿蓝蓝例例黑黑000RGB(0, 0, 0)黄黄255 2550RGB(255, 255, 0)红红25500RGB(255, 0, 0)紫紫2550255RGB(255, 0, 255)绿绿02550RGB(0, 255, 0)青青0255255RGB(0, 255, 255)蓝蓝00255RGB(0, 0, 255)白白255 255

12、255RGB(255, 255, 255)13颜色的应用颜色的应用n例例9-2 通过文本框输入基色值,或通过滚动条设置基色值来改变图片通过文本框输入基色值,或通过滚动条设置基色值来改变图片框的背景色。框的背景色。n分析分析n需要使用需要使用3个文本框和个文本框和3个滚动条个滚动条n3个滚动条的个滚动条的Min、Max属性都分属性都分 别设置为别设置为0和和255n滚动块的位置(滚动块的位置(Value属性)值作属性)值作 为为RGB函数的参数,获得颜色值函数的参数,获得颜色值n滚动块的位置值与文本框内的数值应动态保持一致滚动块的位置值与文本框内的数值应动态保持一致n界面设计界面设计控件类型控件

13、类型控件名称控件名称用途用途控件类型控件类型名称名称用途用途属性设置属性设置文本框文本框TRed输入输入/显示红色值显示红色值滚动条滚动条HSRed改变红色值改变红色值Min=0 ,Max=255文本框文本框TGreen输入输入/显示绿色值显示绿色值滚动条滚动条HSGreen改变绿色值改变绿色值Min=0 ,Max=255文本框文本框TBlue输入输入/显示蓝色值显示蓝色值滚动条滚动条HSBlue改变蓝色值改变蓝色值Min=0 ,Max=255图片框图片框Picture1演示颜色效果演示颜色效果14nPrivate Sub HSRed_Scroll()n TRed.Text = HSRed.V

14、aluen Picture1.BackColor = RGB(HSRed.Value, HSGreen.Value, HSBlue.Value)nEnd SubnPrivate Sub HSGreen_Scroll()n TGreen.Text = HSGreen.Valuen Picture1.BackColor = RGB(HSRed.Value, HSGreen.Value, HSBlue.Value)nEnd SubnPrivate Sub HSBlue_Scroll()n TBlue.Text = HSBlue.Valuen Picture1.BackColor = RGB(HSRe

15、d.Value, HSGreen.Value, HSBlue.Value)nEnd SubnPrivate Sub TBlue_Change()n HSBlue.Value = Val(TBlue.Text)nEnd SubnPrivate Sub TGreen_Change()n HSGreen.Value = Val(TGreen.Text)nEnd SubnPrivate Sub TRed_Change()n HSRed.Value = Val(TRed.Text)nEnd Sub 159.2 图形的绘制与清除图形的绘制与清除n有两种方式可以在容器对象上绘制图形有两种方式可以在容器对象上

16、绘制图形n利用图形控件绘制简单图形利用图形控件绘制简单图形n只能画出简单图形,但编程比较简单只能画出简单图形,但编程比较简单 直线、圆、矩形等直线、圆、矩形等n利用容器对象的绘图方法在容器上画图形利用容器对象的绘图方法在容器上画图形n比较灵活,可以画出各种复杂图形比较灵活,可以画出各种复杂图形n绘制过程需要设计算法,编程相对复杂绘制过程需要设计算法,编程相对复杂 16画线与矩形的方法画线与矩形的方法 n画直线线段与画矩形需要使用容器对象的画直线线段与画矩形需要使用容器对象的Line方法方法 n调用格式调用格式n.Line Step (, ) Step (, ) , , BF n缺省对象表示当前

17、窗体缺省对象表示当前窗体nx1,y1是线段起点坐标,或矩形左上角坐标是线段起点坐标,或矩形左上角坐标 若前面有若前面有Step,表示相对于当前坐标的相对位置,表示相对于当前坐标的相对位置 缺省缺省x1,y1则表示起点为当前坐标则表示起点为当前坐标nx2,y2是线段终点坐标,或矩形右下角坐标是线段终点坐标,或矩形右下角坐标 Step的含义与起点的相同的含义与起点的相同n颜色是画线的颜色,省略则用容器对象的前景色画线颜色是画线的颜色,省略则用容器对象的前景色画线nB表示画矩形表示画矩形nF必须与必须与B联用,表示用前面的颜色值来填充矩形,省略联用,表示用前面的颜色值来填充矩形,省略F则由则由Fil

18、lColor和和FillStyle属性决定矩形的填充方式属性决定矩形的填充方式n调用了调用了Line方法后,方法后,CurrentX,CurrentY的值为线段的的值为线段的终点坐标终点坐标 17画线画线n例例9-3n用鼠标单击窗体在窗体上用不同颜色随机画用鼠标单击窗体在窗体上用不同颜色随机画16条直线条直线n分析分析n随机画直线实际就是随机产生直线两个端点的坐标随机画直线实际就是随机产生直线两个端点的坐标n这两个坐标应在窗体工作区的范围之内这两个坐标应在窗体工作区的范围之内n程序代码程序代码nPrivate Sub Form_Click()n Dim x1%, x2%, y1%, y2%n

19、For k = 0 To 15n x1 = Int(Rnd * Form1.ScaleWidth)n y1 = Int(Rnd * Form1.ScaleHeight)n x2 = Int(Rnd * Form1.ScaleWidth)n y2 = Int(Rnd * Form1.ScaleHeight)n Line (x1, y1)-(x2, y2), QBColor(k)n Next knEnd Sub 18画矩形画矩形n例例9-4n数组中存放着某企业数组中存放着某企业4个季度的利润值,用直方图表示各个季度的利润值,用直方图表示各季度利润情况,并标出利润值。程序执行结果如图所示季度利润情况

20、,并标出利润值。程序执行结果如图所示n分析分析n每个季度的利润用一个矩形表示每个季度的利润用一个矩形表示n矩形的宽都相同,矩形的高等于利润值矩形的宽都相同,矩形的高等于利润值ny轴方向应向上,所以要重新定义坐标系轴方向应向上,所以要重新定义坐标系n4个季度的利润值可以用个季度的利润值可以用Array函数放到数组函数放到数组a中中 19Const RWidth = 50 矩形的宽度矩形的宽度Private Sub Command1_Click() a = Array(212, 433, 322, 520) 4个季度数据个季度数据 DrawCoordinate 画坐标轴并显示画坐标轴并显示x轴的标

21、值轴的标值 DrawRectangle a 画矩形图画矩形图9-6 例例9-4的界面的界面End SubPrivate Sub DrawRectangle(a) Dim x1%, x2%, y1%, y2% For k = 1 To 4 x1 = k * RWidth * 2 - RWidth y1 = 0 x2 = x1 + RWidth y2 = a(k - 1) Line (x1, y1)-(x2, y2), , B CurrentX = x1 CurrentY = y2 + 60 Print Trim(Str(a(k - 1) Next kEnd Sub 程序代码程序代码(一一)20程

22、序代码(二)程序代码(二)Private Sub DrawCoordinate() Dim xLen%, yLen%, y% xLen = (4 + 2) * RWidth * 2 x轴长度轴长度(数据个数数据个数+2)乘两倍矩形宽度乘两倍矩形宽度 yLen = Int(520 * 1.2) y轴长度,比最大数据(轴长度,比最大数据(520)多)多20% 建立坐标系,在坐标轴负方向各留一定长度建立坐标系,在坐标轴负方向各留一定长度 Scale (-RWidth, yLen)-(xLen, -yLen * 0.1) Line (0, 0)-(xLen, 0) 画画x轴轴 Line (0, 0)-

23、(0, yLen) 画画y轴轴 For k = 1 To 4 CurrentY = -5 CurrentX = k * RWidth * 2 - 50 Print Trim(Str(k) & 季度季度 显示显示x轴的标值轴的标值 Next kEnd Sub 21画曲线画曲线22程序代码程序代码Private Sub Form_Click() Const PI = 3.14159 Scale (-0.5, 1)-(4, -1) Line (-0.5, 0)-(4, 0) Line (0, 1)-(0, -1) s = 0 For x = 0 To PI Step 0.01 y = Sin(x)

24、s = s + (x - CurrentX) * y Line (x, 0)-(x, y), vbRed Next x Text1 = sEnd Sub 23画圆、椭圆和圆弧的方法画圆、椭圆和圆弧的方法 n画圆、椭圆、圆弧、扇形需要用容器的画圆、椭圆、圆弧、扇形需要用容器的Circle方法方法nCircle方法的调用格式方法的调用格式n.Circle Step (,), , , , , n对象是指在承载图形的容器对象,缺省则表示当前窗体对象是指在承载图形的容器对象,缺省则表示当前窗体nx,y是圆心坐标,若前面有是圆心坐标,若前面有Step,表示相对于当前坐标的相,表示相对于当前坐标的相对位置对

25、位置n对于椭圆,半径是指长轴的一半对于椭圆,半径是指长轴的一半n颜色是指线条的颜色,若省略,则使用容器对象的前景色颜色是指线条的颜色,若省略,则使用容器对象的前景色n圆弧起点和终点圆弧起点和终点沿逆时针圆弧的起始角度和终止角度沿逆时针圆弧的起始角度和终止角度用弧度表示,取值范围为用弧度表示,取值范围为02 若起点或终点前有负号,则画出该点到圆心的径向线若起点或终点前有负号,则画出该点到圆心的径向线n纵横比是椭圆纵轴与横轴长度的比值,默认值为纵横比是椭圆纵轴与横轴长度的比值,默认值为1,表示画圆,表示画圆n调用调用Circle方法后,方法后,CurrentX,CurrentY为圆心坐标值为圆心坐

26、标值 24Circle方法所产生的图形方法所产生的图形 25画圆、椭圆画圆、椭圆n例例9-6n把一个椭圆轨迹等分为若干份,以每个等分点为圆心画圆,把一个椭圆轨迹等分为若干份,以每个等分点为圆心画圆,产生如图所示的图案。产生如图所示的图案。n分析分析n设定椭圆的圆心在窗体中央,纵横比取设定椭圆的圆心在窗体中央,纵横比取0.5n利用椭圆轨迹的方程在循环中计算出椭圆轨迹上某个利用椭圆轨迹的方程在循环中计算出椭圆轨迹上某个点的坐标值点的坐标值x,y,再以,再以x,y为圆心画圆为圆心画圆n椭圆轨迹方程是椭圆轨迹方程是nx = rx * Cos()ny = ry * Sin()nrx和和ry分别为横轴和纵

27、轴半径分别为横轴和纵轴半径n是圆心角是圆心角n若纵横比为若纵横比为0.5,则,则ry = 0.5*rx 26画圆、椭圆画圆、椭圆n程序代码程序代码nPrivate Sub Form_Click()n Const PI = 3.14159n x0 = Form1.ScaleWidth / 2 设定椭圆中心坐标设定椭圆中心坐标n y0 = Form1.ScaleHeight / 2n r = y0 r是椭圆横轴半径是椭圆横轴半径n For k = 0 To 2 * PI Step PI / 20n x = r * Cos(k) + x0n y = 0.5 * r * Sin(k) + y0 纵轴半

28、径取纵轴半径取0.5rn Circle (x, y), r * 0.4 圆半径取圆半径取0.4rn Next knEnd Sub 27圆扇形圆扇形n例例9-7n编写程序演示一把折扇逐渐展开的过程。折扇完全展开后编写程序演示一把折扇逐渐展开的过程。折扇完全展开后的图案如图所示。折扇完全展开后两端与水平面的夹角都的图案如图所示。折扇完全展开后两端与水平面的夹角都是是15度。度。n分析分析n要逐渐展开折扇,其展开的速度不能太快要逐渐展开折扇,其展开的速度不能太快n使用一个定时器,其使用一个定时器,其Interval属性的值可设置为属性的值可设置为300msn每调用定时器的每调用定时器的Timer事件

29、过程一次,画出折扇的一事件过程一次,画出折扇的一折扇面折扇面n全部画完后,关闭定时器全部画完后,关闭定时器 28n程序代码程序代码Const PI = 3.14159, gap = 5 把一折扇面的角度设置为把一折扇面的角度设置为5度图度图Dim angle%Private Sub Form_Click() angle = 15 从从15度开始度开始 Timer1.Interval = 300 Timer1.Enabled = TrueEnd SubPrivate Sub Timer1_Timer() x0 = Form1.ScaleWidth / 2 y0 = Form1.ScaleHeig

30、ht * 0.8 r = ScaleHeight * 0.7 If angle = 180 - 15 - gap Then Circle (x0, y0), r, , -angle * PI / 180, -(angle + gap) * PI / 180 angle = angle + gap Else Timer1.Enabled = False End IfEnd Sub 29画点的方法画点的方法 n容器对象的容器对象的PSet方法可以在指定位置画一个点方法可以在指定位置画一个点nPSet方法的调用格式方法的调用格式n.PSet Step (,) , n缺省对象表示当前窗体缺省对象表示当

31、前窗体nx,y是所画点的坐标是所画点的坐标 若前面有若前面有Step,表示相对于当前坐标的相对位置,表示相对于当前坐标的相对位置n颜色是画点的颜色颜色是画点的颜色 若省略,则用容器对象的前景色画点若省略,则用容器对象的前景色画点n调用了调用了PSet方法后,方法后,CurrentX,CurrentY的值的值为该点坐标为该点坐标 30画点画点n例例9-8 用鼠标点击图片框,以点用鼠标点击图片框,以点 击点为起点画出一个周期的正弦击点为起点画出一个周期的正弦 曲线图案。其运行效果如图所示。曲线图案。其运行效果如图所示。n分析分析n使用与数学坐标系一致的坐标系统,应自定义坐标系使用与数学坐标系一致的

32、坐标系统,应自定义坐标系n利用三角函数计算出画图的点利用三角函数计算出画图的点n思路思路nx从从0度循环到度循环到360度,对每一个度,对每一个x(需转换成弧度),利用函数(需转换成弧度),利用函数关系计算出关系计算出y,在(,在(x,y)坐标处画一个点)坐标处画一个点n循环完毕即可画出一个周期的曲线循环完毕即可画出一个周期的曲线n为使曲线是连续的,循环的步长应足够小为使曲线是连续的,循环的步长应足够小n由于曲线的启始点不是固定的,不能直接在计算出的(由于曲线的启始点不是固定的,不能直接在计算出的(x,y)坐标处画点坐标处画点n在画图时,把画图点向鼠标点击的点平移,按平移后的点画图在画图时,把

33、画图点向鼠标点击的点平移,按平移后的点画图31n程序代码程序代码Private Sub Form_Load() Picture1.Scale (-600, 400)-(600, -400) 建立坐标系建立坐标系End SubPrivate Sub DrawSin(Radius As Single, x0 As Single, y0 As Single) Const PI = 3.14159 Dim x As Integer, y As Integer For x = 0 To 360 y = Radius * Sin(x) * PI / 180) 计算正弦曲线上点的坐标计算正弦曲线上点的坐标

34、Picture1.PSet (x + x0, y + y0) x,y分别平移分别平移x0,y0后画点后画点 Next xEnd SubPrivate Sub Picture1_MouseDown(Button As Integer, _ Shift As Integer, x As Single, y As Single) DrawSin 100, x, y 把鼠标点击位置作为参数调过程把鼠标点击位置作为参数调过程End Sub 32用用PSet方法画曲线方法画曲线n例例9-9n在窗体上画出曲线在窗体上画出曲线x3 - 3x2 - 20 x + 30的图形,并求它的近似的图形,并求它的近似解。

35、其运行界面如图所示。解。其运行界面如图所示。n分析分析n方程的解就是该曲线与方程的解就是该曲线与X 轴的交点轴的交点n在计算出要画的点的在计算出要画的点的y坐标后,坐标后, 应立即判断应立即判断y是否为是否为0,若为,若为0, 则对应的则对应的x就是一个解就是一个解n因求出的因求出的y是不连续的,应判是不连续的,应判 断断y的绝对值是否小于某个足的绝对值是否小于某个足 够小的值够小的值,若小于,若小于就可就可 认为对应的认为对应的x是一个近似解是一个近似解33Private Sub DrawCoordinate() 定义坐标系并画坐标轴定义坐标系并画坐标轴 Scale (-7, 100)-(7

36、, -100) Line (-7, 0)-(7, 0) Line (0, 100)-(0, -100)End SubPrivate Sub Form_Click() DrawCoordinate For x = -7 To 7 Step 0.001 y = x * x * x - 3 * x * x - 20 * x + 30 PSet (x, y) If Abs(y) 0.02 Then 选为选为0.02 Print Format(x, #0.#) End If Next xEnd Sub 34用用PSet方法画曲线方法画曲线n例例9-10 用鼠标在窗体上画曲线。用鼠标在窗体上画曲线。 其运

37、行效果如图所示。其运行效果如图所示。n分析分析n用鼠标画线就是在鼠标移动用鼠标画线就是在鼠标移动 时在鼠标坐标处画点时在鼠标坐标处画点n调用调用PSet方法的语句应在窗方法的语句应在窗 体的体的MouseMove事件过程中事件过程中n要知道鼠标左键是处在按下状要知道鼠标左键是处在按下状 态还是未按下状态态还是未按下状态n这可根据事件过程的参数这可根据事件过程的参数Button的值来判断的值来判断 n程序代码程序代码Private Sub Form_MouseMove(Button As Integer, _ Shift As Integer, X As Single, Y As Single)

38、 If Button = 1 Then Form1.PSet (X, Y) End IfEnd Sub 35清除图形与文字清除图形与文字 n清除所有内容清除所有内容n容器对象的容器对象的Cls方法可以清除用绘图方法画出的图形方法可以清除用绘图方法画出的图形和用和用Print方法输出的文字方法输出的文字nCls方法的调用格式方法的调用格式n.Cls n调用了调用了Cls方法后,方法后,CurrentX、CurrentY属性的值被属性的值被设置为设置为0 n对容器上的控件及控件上的图形和文本不起作用对容器上的控件及控件上的图形和文本不起作用n清除部分内容清除部分内容n用容器对象的背景色重画曲线或重

39、写该段文字用容器对象的背景色重画曲线或重写该段文字n容器对象的背景色可从它们的容器对象的背景色可从它们的BackColor属性获得属性获得 36清除图形与文字清除图形与文字n例例9-11 在窗体上画在窗体上画2个按钮,个按钮,Command1按钮用于画例按钮用于画例9-9中曲线的图形,中曲线的图形,Command2按按钮用于擦除该曲线。钮用于擦除该曲线。n分析:分析:n设计一个画曲线的过程设计一个画曲线的过程DrawCurve,有一个参数,有一个参数n画曲线,用窗体的前景色作为画曲线,用窗体的前景色作为实参调用该过程实参调用该过程n擦除曲线,用窗体的背景色作擦除曲线,用窗体的背景色作为实参调用

40、该过程为实参调用该过程n擦除曲线时,曲线与坐标轴的擦除曲线时,曲线与坐标轴的交点也会被擦除,所以擦除曲交点也会被擦除,所以擦除曲线后应该重画坐标轴线后应该重画坐标轴 37Private Sub Command1_Click() DrawCoordinate DrawCurveForm1.ForeColor 用窗体前景色画曲线用窗体前景色画曲线End SubPrivate Sub Command2_Click() DrawCurve Form1.BackColor 擦除曲线擦除曲线 DrawCoordinate 恢复坐标轴恢复坐标轴End SubPrivate Sub DrawCurve(BCo

41、lor As Long) 本过程用于画曲线本过程用于画曲线 For x = -7 To 7 Step 0.001 y = x * x * x - 3 * x * x - 20 * x + 30 PSet (x, y), BColor Next xEnd SubPrivate Sub DrawCoordinate() 定义坐标系并画坐标轴定义坐标系并画坐标轴 Scale (-7, 100)-(7, -100) Line (-7, 0)-(7, 0) Line (0, 100)-(0, -100)End Sub 389.3 图形的属性与图形的重绘图形的属性与图形的重绘 n线宽与线形线宽与线形nDr

42、awWidth属性属性n设置图形的线宽设置图形的线宽 n取值范围是取值范围是132767,默,默 认值为认值为1,单位是象素,单位是象素n不随坐标刻度单位的变化不随坐标刻度单位的变化 而变化而变化n对画点也有影响对画点也有影响nDrawStyle属性属性n设置图形的线宽和线形设置图形的线宽和线形 n取值范围是取值范围是06,默认值为,默认值为0nDrawWidth=1时,时,DrawStyle属性有效属性有效nDrawWidth1时,时,DrawStyle属性无效,画出的线都是实线属性无效,画出的线都是实线 39线宽线宽n例例9-12在窗体上画一个如图所示的图案。在窗体上画一个如图所示的图案。

43、n分析分析n图案由若干个线条之间没有空隙,半径不同的同心圆所组成图案由若干个线条之间没有空隙,半径不同的同心圆所组成n同心圆的颜色从内到外逐渐变深同心圆的颜色从内到外逐渐变深n为保证相邻为保证相邻2个同心圆之间没有空隙,线宽选择为个同心圆之间没有空隙,线宽选择为2n程序代码程序代码Private Sub Form_Click() Form1.DrawWidth = 2 x% = Form1.ScaleWidth / 2 y% = Form1.ScaleHeight / 2 n = y - 200 st = 120 / n For r = 1 To n Step 1 Form1.Circle (

44、x, y), r, RGB(255 - r * st, 255 - r * st, 255 - r * st) Next rEnd Sub40线形线形n例例9-13在窗体上画一个如图所示的图案。在窗体上画一个如图所示的图案。n分析分析n这是这是3个同心的圆和椭圆个同心的圆和椭圆n外面的圆的线宽较宽,外面的圆的线宽较宽,2个内接椭圆的线形不同个内接椭圆的线形不同n程序代码程序代码nPrivate Sub Form_Click()n x = Form1.ScaleWidth / 2n y = Form1.ScaleHeight / 2n DrawWidth = 2 外圆的线宽为外圆的线宽为2n C

45、ircle (x, y), y * 0.9n DrawWidth = 1 2个椭圆线宽为个椭圆线宽为1n DrawStyle = 2 线形为点线线形为点线n Circle (x, y), y * 0.9, , , , 2n DrawStyle = 0 线形为实线线形为实线n Circle (x, y), y * 0.9, , , , 0.5nEnd Sub 41填充色与填充样式填充色与填充样式 n可以在封闭图形内部填充不同的颜色和图案可以在封闭图形内部填充不同的颜色和图案 nFillColor属性属性n决定在对象上所画的封闭图形的填充颜色决定在对象上所画的封闭图形的填充颜色n形状控件也有形状控

46、件也有FillColor属性,决定该控件的填充颜色属性,决定该控件的填充颜色nFillStyle属性属性n决定在对象上所画的封闭图形的填充样式,样式不同,填决定在对象上所画的封闭图形的填充样式,样式不同,填充的图案就不同充的图案就不同n形状控件也有形状控件也有FillStyle属性,决定该控件的填充样式属性,决定该控件的填充样式n取值范围是取值范围是07,默认值为,默认值为142例例9-14n把例把例9-4中的直方图改为饼图,其运行结果如图所示中的直方图改为饼图,其运行结果如图所示 n分析分析n先计算出每个数据占全部数据之和的百分比,根据百分比确先计算出每个数据占全部数据之和的百分比,根据百分

47、比确定该数据在圆中所占扇形弧度的启始角和终止角定该数据在圆中所占扇形弧度的启始角和终止角n再以这个启始角和终止角画扇形再以这个启始角和终止角画扇形n注意注意n后一个扇形的启始角后一个扇形的启始角a1应等于应等于 前一个扇形的终止角前一个扇形的终止角a2n第一个扇形的启始角第一个扇形的启始角a1应为应为0, 为能画出封闭扇形,为能画出封闭扇形,a1取一个取一个 很小的角度(例如很小的角度(例如0.001)n不能影响对终止角不能影响对终止角a2的计算的计算na2 = IIf(a1 = 0.001, 0, a1) + 2 * PI * Percentn其中其中IIF函数把函数把a1中的中的0.001

48、还原为还原为0n重建坐标系后,重建坐标系后,Y轴方向向上,轴方向向上,ScaleHeight为负值,若半径为负值,若半径是是ScaleHeight的函数,要取绝对值的函数,要取绝对值 43Private Sub Form_Click() Dim sum%, Percent!, x%, y% Const PI = 3.14159 Scale (-1000, 600)-(1000, -600) r = Abs(0.8 * Form1.ScaleHeight / 2) Data = Array(212, 433, 322, 520) For k = 0 To 3 sum = sum + Data(k

49、) Next k a1 = 0.001 For k = 0 To 3 FillStyle = k + 2 FillColor = QBColor(k * 4) Percent = Data(k) / sum 计算每个数据占所有数据之和的比值计算每个数据占所有数据之和的比值 a2 = IIf(a1 = 0.001, 0, a1) + 2 * PI * Percent 计算终止角计算终止角 Circle (0, 0), r, , -a1, -a2 画扇形画扇形 CurrentX = 0.8 * r * Cos(a1 + (a2 - a1) / 2) 输出百分比值输出百分比值 CurrentY =

50、0.8 * r * Sin(a1 + (a2 - a1) / 2) Print Format(Percent * 100, 0.00); % a1 = a2 a2作为下一扇形的启始角作为下一扇形的启始角 以下程序段输出图例以下程序段输出图例 x = -950 y = 550 - k * 150 Line (x, y)-(x + 150, y - 120), , B CurrentX = x + 160 CurrentY = y Print k + 1; 季度季度; Next kEnd Sub 程序代码程序代码44图形的重绘图形的重绘 n图形、文字被遮盖后,或容器对象大小变化或,图形、文字被遮盖

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com