资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,图形,坐标体系,颜色,绘图方法,形状控件,1,坐标,X,值:是沿,X,轴点的位置,窗体中最左端是缺省位置,0,Y,值:是沿,Y,轴点的位置,窗体中最上端是缺省位置,0,X,Y,的值可以小于,0,,也可以大于容器宽度或高度,相对于,Form1,(0,0),相对于,Form1(1200,800),相对于,Frame1(0,0),2,坐标值的刻度,缺省使用缇(,Twip,)为测量单位。,缇是打印机的一磅的,1/20,(,1440,缇等于一英寸;,567,缇等于一厘米)。这些测量值指示对象打印后的大小。利用缇可以精确地控制图形打印输出的质量。,通过设置控件的,ScaleMode,属性,可以采用不同的刻度 来表示坐标值,3,ScaleMode,属性,每个可见控件都有,ScaleMode,属性,可以取以下常量值:,vbUser,:,0,,用户自定义。若直接设置了,ScaleWidth,、,ScaleHeight,、,ScaleTop,或,ScaleLeft,,则,ScaleMode,属性自动设为,0,vbTwips,(缺省值):,1,,缇,vbPoints,:,2,,磅,,72,磅等于一英寸,vbPixels,:,3,,像素。像素是监视器或打印机分辨率的最小单位,每英寸里像素的数目由设备的分辨率决定,vbCharacters,:,4,,字符。打印时,一个字符有,1/6,英寸高、,1/12,英寸宽,vbInchs,:,5,,英寸,vbMillimeters,:,6,,毫米,vbCentimeters,:,7,,厘米,4,不同刻度的转换,ScaleX,和,ScaleY,方法:,用来将水平坐标或垂直坐标值从一种刻度模式转换为另一种刻度模式。返回转换后的刻度值。,object,.ScaleX(,value,fromScale,toScale),object,.ScaleY(,value,fromScale,toScale),Value,:,是给定的一个坐标值(如控件的宽度或高度);,fromScale,:,指定从哪一种坐标系统转换(刻度常量);如省略,则默认,value,的刻度模式是,HIMETRIC,(,0.01,毫米)。,toScale,:,指定要转换到哪一种坐标系统(刻度常量)。省略,则取,object,的刻度模式(即,ScaleMode,属性指定的刻度模式)。,如将,1,厘米的宽度转换为以缇为单位的宽度数并输出:,Debug.Print Form1.ScaleX(1,vbCentimeters,vbTwips),输出结果为,566.9286,5,颜色,指定颜色有四种方式:,使用,RGB,函数,该函数有三个参数,分别取值,0-255,;,使用,QBColor,函数,该函数有一个参数,取值,0-15,,,16,种,Microsoft QuickBasic,颜色中的一种;,使用内部描述颜色的常量,如,vbRed,;,直接输入一种颜色值。,调色板颜色值:,正常的,RGB,颜色的有效范围,是从,0,到,16,777,215,(,&HFFFFFF&,)。即可以用十六进制数按照下述语法来指定颜色:,&HBBGGRR&,系统颜色值:,最高位设置为,1,时,颜色值不再代表,RGB,颜色,而是从,Windows“,控制面板,”,指定的系统环境范围颜色。这些数值对应的系统颜色范围是从,&H80000000,到,&H80000015,。,6,绘图方法,VB,提供有以下创建图形的方法,这些图形方法适用于窗体和图片框控件。,Cls,:,清除所有图形和调用,Print,方法所作的输出,PSet,:,设置屏幕指定位置像素的颜色,Line,:,画线、矩形、或填充框,Circle,:,画圆、椭圆、或圆弧,Point,:,返回指定点的颜色值,PaintPicture,:,在任意位置画出图形,7,使用,Pset,方法画点,object.PSet(x,y),color,x,和,y,参数是单精度参数,所以它们可以接受整数或分数的输入,可以适应不同的坐标系。,color,参数指定点的颜色,该参数可以使用任意一种方法来指定。如果没有指定,color,参数,,PSet,将像素设置为前景色(,object,对象的,ForeColor,属性)。,下述语句在当前窗体、,MyForm,窗体和,Picture1,图片框上设置各种点:,PSet(10.75,50.33),MyForm.PSet(230,1000),Picture1.PSet(1.5,3.2),PSet(50,75),RGB(0,0,255),8,Pset,方法示例,【,例,】,编写程序,在窗体上随机画出各种颜色的点。,Sub Form_Click(),Dim R As Integer,G As Integer,B As Integer,Dim XPos As Integer,YPos As Integer,Do,设置红、绿、兰随机颜色值,赋值后会自动转换为整数,R=255*,Rnd,G=255*Rnd,B=255*Rnd,设置水平和垂直位置的随机坐标值,XPos=Rnd*ScaleWidth,YPos=Rnd*ScaleHeight,用,PSet,画点,PSet(XPos,YPos),RGB(R,G,B),DoEvents,Loop,End Sub,Rnd,函数:生成一个小于,1,大于等于,0,的随机数,DoEvents,:,因为循环没有给定结束条件(死循环),程序启动后将无法正常中止,,DoEvents,函数允许操作系统获取控制权以处理其他事件。,9,点的尺寸,PSet,方法所画点的尺寸取决于对象的,DrawWidth,属性,值。缺省时,DrawWidth,为,1,,,PSet,就将一个像素的点设置为指定颜色。当,DrawWidth,大于,1,,则点的尺寸将变大,使其中心位于指定坐标。这样只要,DrawWidth,足够大,,PSet,就可以画各种颜色的实心圆了。,Form1.DrawWidth=Rnd*50+1,10,擦除点,擦除一点,,只要把其颜色设置为背景色即可,如:,Form1.PSet(50,75),Form1.BackColor,11,指定点的坐标,有两种方法来指定点的坐标:,使用参数(,x,y,)指定点的坐标。如:,PSet(20,20),当在参数(,x,y,)前面加上,Step,关键字后,就是相对定位,(,x,y,)指定的就是相对,当前坐标的偏移量,。如:,Pset Step(20,20),当前的坐标点就是调用图形方法或,Print,方法所画最后点的位置,该位置由对象的,CurrentX,和,CurrentY,属性,保存,它们的初始值都为,0,。,比如,PSet,可相对最后所画点的位置向下画点:,For i=0 to 1000,PSet Step(1,0),Next,因为是循环画点,所以上述代码可以得到一条水平线。,12,使用,Line,方法画线,Line,方法可以画出一条直线,指定直线的起点、终点和颜色,语法为:,object,.Line,(x1,y1,)(,x2,y2,),color,第一对坐标为起点,第二对坐标为终点。,Line(0,0)-(ScaleWidth,ScaleHeight),从左上角到右下角的对角线,Line(0,ScaleHeight)-(ScaleWidth,0),从左下角到右上角的对角线,其中第一对坐标,(x1,y1),是可选的。如果省略,将把该对象的当前坐标位置(,CurrentX,和,CurrentY,属性)作为线的起点。,Color,如果省略,则使用对象的,ForeColor,属性为线的颜色。,与,PSet,方法一样,,Line,方法也支持使用关键字,Step,来指定相对位置。假设当前坐标为,(500,500),:,Line-(1000,0),从,(500,500),到,(1500,500),的一条水平线,Line-Step(0,1000),从,(1500,500),到,(1500,1500),的一条垂直线,Line Step(0,1000)-Step(200,200),从,(1500,2500),到,(1700,2700),的斜线,13,使用,Line,方法画矩形,一个很简单的画矩形的方法。当在,Line,方法中的最后添加“,B,”,选项时,就会以指定的两点为矩形的对角点,画一个矩形。如:,Line(500,500)(1500,1000),vbRed,B,或,Line(500,500)Step(1000,500),B,注意:如果,color,参数省略的话,则在“,B”,之前要有两个逗点,参数值可以省略,但参数位置要保留。,14,填充矩形,使用,Line,方法还可以指定对矩形进行填充,有两种填充方式:,颜色填充,Line(500,500)(1500,1000),vbRed,B,F,以上代码绘制一个红色的方块,图案填充,FillStyle=1,Line(500,500)(1500,1000),vbRed,B,需要先指定,FillStyle,属性,即矩形内部图案填充方式,15,填充图案的选择,FillStyle,属性的取值和填充效果,vbFSSolid,:,0,,实线,vbFSTransparent,(缺省值):,1,,,透明,vbHorizontalLine,:,2,,水平直线,vbVerticalLine,:,3,,垂直直线,vbUpwardDiagonal,:,4,,上斜对角线,vbDownwardDiagonal,:,5,,下斜对角线,vbCross,:,6,,十字线,vbDiagonalCross,:,7,,交叉对角线,以上填充的图案以线条为主,那么如何指定线条的颜色呢?对象的,FillColor,属性充当此任。该属性缺省为黑色,所以如果不更改的话,填充的将都是黑色线条。,16,填充矩形示例,【,例,】,编程在窗体中显示所有的填充图案,并使用不同的填充颜色。,Sub Form_Click(),Dim i As Integer,For i=0 To 7,Form1.FillStyle=i,Form1.FillColor=QBColor(i),Line(i*600,500)-Step(600,600),vbRed,B,Next,End Sub,17,指定线型,DrawWidth,设置为,1,时,,DrawStyle,可以设置以下线型:,vbFSSolid,(缺省值):,0,,实线,vbDash,:,1,,,虚线,vbDot,:,2,,点线,vbDashDot,:,3,,点划线,vbDashDotDot,:,4,,双点划线,vbInvisible,:,5,,无线,vbInsideSolid,:,6,,内收实线,18,指定线宽,通过设置,DrawWidth,属性可以控制画出的线的宽度,值越大,线越宽(整数值),【,例,】,利用,Line,方法在窗口上随意画画,可以指定颜色和线宽。,鼠标按下并移动开始划线,鼠标抬起的时候不划,需要响应鼠标按下和移动两个事件。,颜色可以利用通用对话框,CommonDialog,控件来选择,线宽用滚动条设置。,19,绘图程序示例,设置线宽,Private Sub HScroll1_Change(),Form1.DrawWidth=HScroll1.Value,End Sub,设置线条颜色,Private Sub cmdColor_Click(),CommonDialog1.ShowColor,Form1.ForeColor=CommonDialog1.Color,End Sub,擦除窗体,Private Sub cmdClear_Click(),Me.Cls,End Sub,20,绘图程序示例,鼠标按下后,设置绘图起始坐标,Private Sub Form_MouseDown(Button As Integer,Shift As Integer,X As Single,Y As Single),CurrentX=X,CurrentY=Y,End Sub,鼠标按下的同时并移动,绘制从,(CurrentX,CurrentY),到,(X,Y),的线条,Private Sub Form_MouseMove(Button As Integer,Shift As Integer,X As Single,Y As Single),If Button=1 Then Line-(X,Y),End Sub,21,使用,Circle,方法画圆,Circle,方法用于画圆的语法是:,object,.Circle Step(,x,y,),radius,color,其中(,x,y,)是圆心坐标,,radius,指定半径长度,,例如,下面语句将画出一个以,(1000,1000),为圆心、,500,为半径的红色空心圆:,Circle(1000,1000),500,vbRed,和,Line,方法一样,在设置了对象的,FillStyle,和,FillColor,属性后,,Circle,方法就能画实心圆和其它填充效果的圆。例如画一个红色的实心圆:,FillStyle=vbSolid,FillColor=vbRed,Circle(1000,1000),500,vbRed,22,画圆示例,【,例,】,从窗口中心向外不停地画同心圆,直到充满。,Private Sub Timer1,_,Timer(),Static Radius,Dim CX,CY,Limit,ScaleMode=vbPixels,CX=ScaleWidth/2,CY=ScaleHeight/2,Limit=IIf(CX CY,CY,CX),Circle(CX,CY),Radius,RGB(Rnd*255,Rnd*255,Rnd*255),Radius=Radius+1,If Radius Limit Then,Form1.Cls,Radius=0,End If,End Sub,如果改变线宽,怎么办?,23,Circle,方法画椭圆,圆的纵横轴比例不等于,1,,就是椭圆。,Circle,方法完整的语法是:,Circle Step(,x,y,),radius,color,start,end,aspect,其中参数,start,和,end,是可选的,可用于画圆弧,画椭圆时省略这两个参数,但是逗号是不能省的。如果画椭圆,最后一个参数,aspect,是不能省略的,所以更明确的椭圆的语法是:,Circle Step(,x,y,),radius,color,aspect,aspect,参数:,指定了椭圆的垂直直径和水平直径的比例。该参数是正浮点数。当,aspect,参数小于,0,时,椭圆沿水平轴线拉长;相反,aspect,参数大于,1,时,则沿垂直轴线拉长。,Radius,参数:,椭圆有两个半径,水平方向的,x,半径和垂直方向的,y,半径,但在,Circle,语句中只使用了一个参数,radius,对应椭圆的,长轴,。也就是说,当,aspect,参数小于,1,的话,,radius,指的是水平方向的半径,如果,aspect,参数大于或等于,1,的话,则,radius,指的是垂直方向的半径。,24,画椭圆示例,【,例,】,在任意大小的窗口上画出最大的椭圆,并且椭圆随着窗口变化而变化。,Private Sub Form_Resize(),Dim var1,var2,Form1.Cls,ScaleMode=vbPixels,var2=ScaleHeight/ScaleWidth,If var2 1 Then,var1=ScaleWidth/2-1,Else,var1=ScaleHeight/2-1,End If,Circle(ScaleWidth/2,ScaleHeight/2),var1,vbRed,var2,End Sub,25,Circle,方法画圆弧,圆弧就是截取圆或椭圆中指定的一部分。,Circle Step(,x,y,),radius,color,start,end,aspect,start,和,end,参数指定的就是圆或椭圆中的两个角度,,Circle,方法按照逆时针顺序画出这两个角度之间的弧线。圆的角度取值范围是,-2 2,Circle(1000,1000),800,vbRed,0,Pi/2,Circle(3000,1000),800,vbRed,*Pi,3*Pi/2,Circle(1000,1000),800,vbRed,-2*Pi,-Pi/2,Circle(3000,1000),800,vbRed,-Pi,-3*Pi/2,26,使用,PaintPicture,方法显示图片,PaintPicture,方法不仅可以显示图像,还可以完成各种图像效果,包括缩放、滚动、全景、平铺以及多种颜色效果。实际上,PaintPicture,方法可以理解为从源控件到目标控件的图像的复制,,object,.PaintPicture,pic,destX,destY,destWidth,destHeight,srcX,srcY,srcWidth,srcHeight,Opcode,Object,:,指的是目标控件,可以是窗体、图片框或,Printer,对象,这些控件都是图片显示的容器。,pic,参数:,一个,Picture,对象,是要绘制到目标控件上的图形源,它可以由窗体或,PictureBox,控件的,Picture,属性指定。,destX,和,destY,参数:,图像出现在目标控件中的坐标位置。,destWidth,和,destHeight,参数:,可选,图象在目标控件中的大小。,srcX,和,srcY,参数:,可选,源控件图像要复制的区域的起始坐标。,destWidth,和,destHeight,参数:,可选,图像复制区的宽度和高度。,Opcode,参数:,可选,定义当在目标控件上绘图时,在图像上执行的位操作。如反转等。,27,PaintPicture,方法示例,【,例,】,以不同效果将图片显示在窗体上。,28,PaintPicture,方法示例,整个图像以原始尺寸复制到窗体上,Private Sub Command1_Click(),Cls,PaintPicture Picture1.Picture,0,0,End Sub,复制原始图像的指定矩形区域到窗体上,Private Sub Command3_Click(),Cls,PaintPicture Picture1.Picture,0,0,1000,1000,500,500,End Sub,29,PaintPicture,方法示例,放大,1,倍显示整个图像,Private Sub Command2_Click(),Cls,PaintPicture Picture1.Picture,0,0,_,ScaleX(Picture1.Picture.Width,vbHimetric,vbTwips)*2,_,ScaleY(Picture1.Picture.Height,vbHimetric,vbTwips)*2,End Sub,整个图像以反转复制到窗体上,Private Sub Command4_Click(),Cls,PaintPicture Picture1.Picture,0,0,vbNotSrcCopy,End Sub,30,直线控件(,Line,),通过设置,Line,控件的属性,可以定义直线的位置、长度、颜色和样式等外观。但是,Line,控件功能有限。,1,、,BorderStyle,属性:,提供六种直线样式:透明、实线、虚线、点线、点划线、双点划线和内实线。,2,、,BorderColor,属性:,指定直线的颜色。,3,、移动和调整线段长度,在运行时,不能用,Move,方法移动直线,只可更改直线控件的,X1,、,X2,、,Y1,和,Y2,属性来移动控件或调整直线控件长度。,X1,和,Y1,属性设置直线控件左端点的坐标,,X2,和,Y2,属性设置直线控件右端点的坐标。,31,形状控件(,Shape,),可用,Shape,控件在窗体、框架或图片框中创建下述预定义形状:矩形、正方形、椭圆形、圆形、圆角矩形或圆角正方形。,1,、,Shape,属性:,指定形状,有,六种预定义的形状。如,vbShapeRectangle,、,vbShapeSquare,、,vbShapeOval,等,。,2,、,FillStyle,属性:,提供了若干预定义的填充样式图案,如实线、水平线、十字线等。,3,、,FillColor,属性:,设置填充颜色。该属性不影响边框颜色(,BorderColor,属性),32,
展开阅读全文