Visual Basic程序设计教程(下)ppt.ppt_第1页
Visual Basic程序设计教程(下)ppt.ppt_第2页
Visual Basic程序设计教程(下)ppt.ppt_第3页
Visual Basic程序设计教程(下)ppt.ppt_第4页
Visual Basic程序设计教程(下)ppt.ppt_第5页
已阅读5页,还剩159页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Visual Basic程序设计教程(下),目录,第9章 图形操作,坐标系统是绘制各种图形的基础,坐标系统选择的是否恰当,会直接影响着绘图的质量,由于坐标系统的不同,图形出现屏幕位置不同,或是在屏幕上显示不出来,或是在打印机打印不出结果,或是图形出现比例不协调。因此,绘制图形前,必须首先确定坐标系。,9.1.1 默认坐标系统,1.坐标系 VB中每个图形在容器中的绘制、位置移动、大小调整等,都离不开绘图区或容器的坐标系统。每一个对象都有自已的坐标系统。 坐标系统是一个二维网格,用于确定容器中点的位置。它由三个元素组成:坐标原点、坐标轴的方向、坐标单位。 坐标系统定义的位置:(x,y),其中x代表横坐标,y代表纵坐标,x值是指点与原点的水平距离,y值是指点与原点的垂直距离。最左端默认值为0(x),最上端默认值为0 (y),因此屏幕的左上上角总是(0,0)。任何容器的默认坐标系统,都是由容器的左上角(0,0)坐标开始,如图9-1所示。,在VB中,每个对象定位于存放它的容器内,对象定位都要使用容器的坐标。例如,窗体处于屏幕(Screen)内,屏幕是窗体的容器;在窗体内绘制图形,窗体就是容器;如果在图形框内绘制图形,该图形框就是容器。容器内的对象只能在容器界定的范围内移动,当移动容器时,容器内的对象也随着一起移动,而且与容器的相对位置保持不变。,通过ScaleMode属性值来设置度量单位坐标的度量单位是由ScaleMode属性决定的。通过设置不同的ScaleMode属性值来改变单位。,3. ScaleMode属性,2.VB刻度单位,9.1.1 默认坐标系统,度量单位之间的换算关系: 1英寸1440缇; 一个字符的宽度是120缇、高度是240缇。 用ScaleWidth、ScaleHeight、ScaleTop和ScaleLeft属性定义坐标系统 ScaleLeft和ScaleTop属性用来给对象指定左上角的水平和垂直坐标,所有对象的ScaleLeft和ScaleTop属性的默认值为0,坐标原点在对象的左上角。当改变ScaleTop或ScaleLeft的值后,坐标系的X轴或Y轴按此值平移形成新的坐标原点。 (ScaleLeft+ScaleWidth,ScaleTop+ScaleHeight)是绘制图形在容器中显示区域右下角的坐标值。根据左上角和右下角坐标值的大小自动设置坐标轴的正向。X轴与Y轴的度量单位为分别为1/ScaleWidth和1/ScaleHeight。 ScaleWidth和ScaleHeight属性则是根据对象内的可用区域的当前宽度和高度来定义刻度。,3. ScaleMode属性,9.1.1 默认坐标系统,【例9-1】修改窗体Form1的 ScaleWidth、ScaleHeight、ScaleTop和ScaleLeft属性,建立新坐标系统。 Form1.ScaleWidth=100 Form1.ScaleHeight=100 Form1.ScaleTop=200 Form1.ScaleLeft=200,9.1.1 默认坐标系统,9.1.2 用户自定义坐标系统,格式: 对象.Sccale(x1,y1)-(x2,y2) 对象:可以是窗体、图形框或打印机,如果省略对象名, 则为带有焦点的窗体对象。 x1和y1:对象的左上角的坐标,决定了ScaleLeft和 ScaleTop属性值。 x2和y2:对象的右下角的坐标,决定了ScaleWidth和 ScaleHeight属性值。,利用Scale方法定义坐标系统,Private Sub Command3_Click() P1.Scale (-100, 100)-(500, -500) DrawWidth = 8 DrawStyle = 4 P1.Line (0, 1000)-(0, -1000) P1.Line (1000, 0)-(-1000, 0) End Sub,1.系统默认坐标系(0,0)按钮“不改变坐标系”,Private Sub Command1_Click() P1.Line (0, 1000)-(0, -1000) P1.Line (1000, 0)-(-1000, 0) End Sub,2. 通过修改窗体Form1的 ScaleWidth、ScaleHeight、ScaleTop和ScaleLeft属性,建立新坐标系统,按钮“改变坐标系”,9.1.2 用户自定义坐标系统,3. 利用Scale方法定义坐标系统,Private Sub Command2_Click() DrawWidth = 6 DrawStyle = 2 P1.ScaleLeft = 100 P1.ScaleTop = -100 P1.ScaleHeight = 200 P1.ScaleWidth = -200 P1.Line (0, 1000)-(0, -1000) P1.Line (1000, 0)-(-1000, 0) End Sub,9.1.2 用户自定义坐标系统,要想制作出各式各样的图形,以及给这些图形加上色彩和动画等,绘图属性与事件起到了至关重要的角色。,9.2.1 CurrentX、CurrentY属性,CurrentX和CurrentY属性用于设置当前对象的水平和垂直坐标,即下一次打印或绘图的起点坐标,在设计时不可用。当重新设置窗体的坐标系统时,CurrentX和CurrentY的值也将自动改变,但以这两个数为坐标的点的实际位置并不改变。 坐标值(x,y)表示对象上的绝对坐标位置,绝对坐标值为(CurrentX+x ,CurrentY+y)。,9.2.2 线宽与线型,1线宽 用DrawWidth属性指定图形方法输出时线的宽度,BorderWidth属性指定直线和形状控件轮廓线的粗细。 下列过程将画出几条不同宽度的线。 Private Sub Form_Click() DrawWidth = 1 For i = 1 To 15 Step 1 DrawWidth = i Line(100,i * 300)-(3000,i*300), _ QBColor(i) Print “ 线宽“, i Next i End Sub,2线型 用DrawStyle属性指定图形方法输出时线型的样式。,9.2.2 线宽与线型,9.2.3 图形的填充,填充只针对封闭图形。填充方式由FillColor 属性和FillStyle属性来决定。FillColor 也可以用来填充由 Circle 和 Line图形方法生成的圆和方框,默认情况下,FillColor 设置为 0(黑色)。如果 FillStyle 设置为 1(透明),则忽略FillColor 属性,但是窗体对象除外。,程序代码: Private Sub Form_Activate() For i = 0 To 7 Shape1(i).FillStyle = i Next i End Sub,9.2.4 AutoRedraw属性,在设计时,窗体、图片框的AutoRedraw属性默认为False,图形不具有持久性,即当窗体被覆盖或扩大窗体都会使图形丢失。当AutoRedraw属性设置为True时,图形具有持久性。,9.2.5 图形颜色,颜色在图形中应用非常广泛,比如线条或是图形的填充。在VB中可以用四种办法来设置颜色。,1RGB函数 RGB函数用指定红、绿、蓝三基色的值来混合产生不同颜色。 语法:RGB(红,绿,蓝) 其中:红,绿,蓝指三种颜色的成分,取值在0255之间,每种颜色是由三种颜色的相对亮度、饱和度组合而成的。常见标准颜色设置如表9-3所示。,9.2.5 图形颜色,QBColor用来表示所对应颜色值的RGB颜色码,产生16种颜色。 语法:QBColor(颜色参数) 其中: 颜色参数是在015之间的颜色值,每种颜色值对应的颜色如表9-4所示。 例如:下面的语句将窗体的前景色设置为蓝色: Form1.ForeColor=QBColor(1) Form1.ForeColor=Vbblue Form1.forecolor=RGB(0,0,128),2QBColor函数,3通过内部常数来设置颜色,4直接使用颜色设置值,在开发Windows 图形用户界面程序时,图形控件用于图形图像的显示。Visual Basic 有四个控件以简化与图形有关的操作,它们是PictureBox控件、Image控件、Shape控件和Line控件。 Image、Shape 和 Line 控件有时被称作轻量图形控件,因为它们需要较少的系统资源,因此比 PictureBox 控件显示得快并且包含 PictureBox 中可用的属性、方法和事件的子集。每一个控件都适用于一个特定的目的。,9.3.1 图片框(PictureBox)控件,1图片框 PictureBox 控件被用来显示图形,同时作为画布来提供图形方法的输出图形或显示 Print方法输出的文本。 (1)使用 PictureBox 控件 PictureBox 控件的主要作用是为用户显示图片。 PictureBox 控件可显示下述任何格式的图片文件:位图、图标、图元文件、增强型图元文件、JPEG 或 GIF 文件。 (2)PictureBox 控件的属性 Picture属性 设置被显示的图片,也可以在程序运行时使用LoadPicture( )函数在图形框中装入图形。其格式为: .Picture= LoadPicture(“) 要清除图片框中的图像,可以属性窗口把Picture属性设置为空(“),也可以程序运行时使用LoadPicture( )函数清除。其格式为:,9.3.1 图片框(PictureBox)控件,Autosize属性 设置片框是否自动调整图像框的大小以适应图形尺寸,默认值为False。属性值为False,图片超出图像框以外的图像将自动被裁剪(隐藏);属性值为True,则表示图片框将根据所显示的图片大小自动调整本身的尺寸。 Width和Height属性 这两个属性设置图片框控件的实际大小,它们总是取表示空间容器的单位。 Left和Top属性 Left和Top属性是图片框控件左上角的坐标,用容器的坐标系表示。 ScaleMode属性 ScaleMode返回或设置绘图方法的输出外观。取值从1到16。 ScaleWidth和ScaleHeight属性 这两个属性是当前坐标系单位的控件内部尺寸。 ScaleLeft和ScaleTop属性 ScaleLeft和ScaleTop属性是用户定义坐标系中控件左上角的坐标。ScaleLeft是x坐标的最小值,其最大值为ScaleLeft + ScaleWidth。,9.3.1 图片框(PictureBox)控件,(3)图片框的应用,【例9-3】图片互换的程序,Private Sub Form_Load() Picture2.Picture = LoadPicture(“d:tubei.bmp “) Picture3.Picture = LoadPicture(“d:tujing.bmp“) Picture4.Picture = LoadPicture(“d:tuhuan.bmp“) Picture5.Picture = LoadPicture(“d:tuying.bmp“) Picture6.Picture = LoadPicture(“d:tuni.bmp“) End Sub,Private Sub Picture2_Click() Picture1.Picture = Picture2.Picture Picture2.Picture = Picture3.Picture Picture3.Picture = Picture4.Picture Picture4.Picture = Picture5.Picture Picture5.Picture = Picture6.Picture Picture6.Picture = Picture1.Picture End Sub,9.3.2 图像框(Image)控件,(2)将图形加载到 Image 控件中 设计时从控件的“属性”窗口中选择 Picture 属性,或在运行时使用 Picture 属性和 LoadPicture 函数都可将图形加载到 Image 控件,这一点与Picture控件完全相同。移除所加载的图形的方法也是使用不指定文件名的 LoadPicture 函数。,图像框(Image)的主要功能是在窗体的指定位置显示图形。它可显示下面几种格式的图形:位图、图标、图元文件、增强型图元文件、JPEG 或 GIF 文件。此之外,Image控件还响应Click事件,并可用Image控件代替命令按钮或作为工具条的项目,还可用来制作简单动画。,1图像框(Image)的属性 (1)图像框(Image)的Stretch属性 在调整 Image 控件大小,来放缩整图像控件的大小。若将属性设置为True 则将伸缩 Picture 属性加载的图片。,9.3.2 图像框(Image)控件,2使用 Image 控件作为命令按钮 3使用 Image 控件创建工具条,9.3.3 形状控件Shape,形状控件用于在窗体、框架或图片框中绘制预定义的几何形状,如矩形、正方形、圆、椭圆、圆角矩形或圆角正方形。形状控件的Shape属性决定了它的图形样式,这个属性的所有可能取值都有对应的形状样式。,形状控件Shape的常用属性 Shape的常用属性: Left、Top、Width和Height属性决定形状控件的位置和大小,也可以用Move方法改变它的大小和位置。 BorderWidth属性设置图形边界宽度。它的值是以像素为单位的边线宽度。 BorderColor属性设置图形边界颜色。 BorderStyle属性设置边界线的类型。 FillColor属性设置图形的前景颜色。 如果为图形填充颜色(背景)时,首先应该将属性FillStyle(填充方式)设置成1(透明),否则FillColor(前景色)的颜色会覆盖背景色,达不到预期的目的。,9.3.3 形状控件Shape,形状控件Shape的特有属性 Shape属性:该属性用来设置图形的形状,如图9-7所示,Shape 属性的参数值如表9-6所示。 BackStyle属性:该属性用来设置图形背景的风格。 0Transparent(透明) 1Opaque(不透明) FillStyle属性:该属性用来设置图形填充的线形(风格或样式)。,9.3.4 直线控件Line,直线控件用于在窗体、框架或图片框中绘制简单的线段。它没有自己的特殊方法,也不产生任何事件。设计和运行时可以通过它的属性来改变它的位置、粗细和颜色等。,直线控件的特有属性 x1,x2,y1,y2属性指定起点和终点的x坐标及y坐标。可以通过改变x1,x2,y1,y2的值,来改变线的位置和长度。,说明 直线控件没有Left、Top、Width和Height属性,运行时也不能用Move方法决定直线的位置和长短。,直线控件的常用属性 BorderColor属性设置直线的颜色。 BorderWidth属性设置直线的粗细。 BorderStyle属性设置直线样式。有06种类型,1实线,6内实线。,要想制作出各式各样的图形,以及给这些图形加上色彩和动画等,绘图属性与事件起到了至关重要的角色。,9.4.1 Pset方法,功能: PSet方法可以在窗体或图片框的指定位置用给定的色彩画一个“点”。点的大小由对象的DrawWidth属性指定。 格式: 对象.PSetStep(x,y),颜色 说明: (x,y) 是欲画点的坐标,可以是整数,也可以是小数。 StepStep表示与当前位置的偏移量,即步长(水平、垂直两个方向,可正可负)。 颜色用来指定绘制点的颜色,数据类型为Long。默认时,系统用对象的ForeColor属性值作为绘制点的颜色。该参数还可用QBColor(),RGB()函数指定。如果没有颜色参数,则为前景色。 例如: 在图片框Picture1中的(150,100)处画一个绿色的点。 Picture1.PSet(150,100),RGB(0,255,0),9.4.2 Line方法,功能:Line方法用于在窗体或图片框对象上画直线和矩形。在绘制直线时,应给出起点和终点坐标。 格式:对象名.Line Step (x1,y1) - Step (x2,y2) ,color ,B F (x1,y1) 为起点坐标,如果省略则为当前坐标。 (x2,y2) 为终点坐标。 Step 为可选项,第一个Step表示它后面的一对坐标是相对于当前坐标的偏移量,第二个Step表示后面的一对坐标是相对于第一对坐标的偏移量。 color 指定要画直线的颜色。可以使用颜色代码或颜色函数。省略时用对象的ForeColor属性指定的颜色绘制直线。 B F 如果没有参数B,为画一条直线;如果有参数B,则画一个矩形;指定参数F,表示要画的是一个实心的矩形。,例如, 在(500,300)与(3000,2500)之间绘制一条蓝色的斜线。 Line(10,1000)-(3000,5000),vbblue 又如,此时再画出一个内部填充蓝色的实心矩形。 Line (1000, 1000)-(3000, 3000), vbBlue, BF,9.4.3 Circle方法,Circle方法可用于在窗体、图片框或打印机上绘制圆、椭圆、弧等图形。上节介绍的有关属性DrawWidth,DrawStyle,FillColor,FillStyle等在Circle方法中也同样适用。,1圆 格式:Objectname.Circle Step(x,y),Radius,color (x1,y1) 指定圆心的位置。 Step 指定它后面圆心的坐标值(x,y)是相对于当前位置 (CurrentX,CurrentY)。省略Step关键字,(x,y)为相对于坐标原点的 绝对坐标值。 Radius 用于指定圆的半径。 color 用于指定绘制圆的颜色,省略时以对象的ForeColor属性设置的颜色画圆。,绘制的圆是实心圆、空心圆或者用指定的图案填充,对象的 fillColor 属性(指定的颜色填充)、FillStyle属性(指定的图案填充)设置有关,可参考矩形的绘制。,9.4.3 Circle方法,2椭圆 绘制椭圆仍使用Circle方法,与画圆相比多一个纵横比参数,当纵横比为1:1时,即是圆。 格式:Objectname.CircleStep(x,y),Radius,color,aspect aspect 决定所画椭圆纵轴与横轴的比值。比值大于1时,绘制扁形椭圆(垂直方向大于水平方向);小于1时绘制椭圆;等于1时绘制圆。 在aspect前的三个逗号“,”不能省略,因为实际上还有两个参数未写出,在画圆弧时要用到这两个参数,待画弧时再作介绍。 其他几个参数与画圆时相同。,9.4.3 Circle方法,3弧和扇形 弧与扇形既有相同点,也有不同点。弧可以视为由圆或椭圆的边线中截取的一部分,而扇形还要在弧的基础上,从弧的两端再分别画一条到圆心的直线,且它是封闭的图形。 格式:Objectname.Circle Step(x,y),Radius,colorstart,end,aspect start,end start指定弧的起始角,end指定弧的终止角,它们的单位均是弧度,范围从02。画弧时,start,end都用正值。从start开始,逆时针画到end处结束。 画扇形时,start,end都取负值,也是从start开始,逆时针绘制,到end结束。 负值仅表示画扇形,不表示数学上不同的象限。如0/2画一段弧,而0-/2仅表示画0/2的扇形,不表示数学上的0-/2即3/20。,9.4.3 Circle方法,3弧和扇形,【例9-4】如图9-8所示,在Picture1上画出圆形、椭圆形、圆弧。在窗体上创建为Picture1的图片控件。创建4个命令按钮Command1、 Command2、 Command3、 Command,分别设置其Caption属性为“绘圆形”、“ 绘椭圆形”、 “绘画圆弧”、“清除”。 代码如下:,Private Sub Form_Load() Picture1.DrawWidth = 2 设置线的宽度 Picture1.DrawStyle = 0 设置实线 End Sub,9.4.3 Circle方法,画圆 Private Sub Command1_Click() For i = 400 To 1500 Step 500 Picture1.ForeColor = RGB(255 * Rnd, 255 * Rnd, 255 * Rnd) Picture1.Circle (2500, i), i 画圆 Next i End Sub,画椭圆 Private Sub Command2_Click() For i = 100 To 2000 Step 200 Picture1.ForeColor = RGB(255 * Rnd, 255 * Rnd, 255 * Rnd) Picture1.Circle (2500, i), i, , , , 0.5 画椭圆 Next i End Sub,9.4.3 Circle方法,画弧 Private Sub Command3_Click() Picture1.ForeColor = RGB(255 * Rnd, 255 * Rnd, 255 * Rnd) For i = 100 To 2000 Step 600 Picture1.Circle (2 * i, i), i, , -3.14 / 4, 3.14 画弧 Next i End Sub,清除 Private Sub Command4_Click() Picture1.Cls End Sub,要想制作出各式各样的图形,以及给这些图形加上色彩和动画等,绘图属性与事件起到了至关重要的角色。,下面来设计一个简单五环旗,如图9-9所示。 下面介绍具体的操作步骤。 步骤1: 在窗体上创建一个Shape1组(通过复制得到)。 它们分别是:Shape1(0),Shape1(1),Shape1(2),Shape1(3),Shape1(4),分别设置其Backcolor颜色为蓝色,黑色,红色,橙黄色,绿色。,步骤2: 创建一个Label1,字体是楷体,字号为四号字。 步骤3: 在窗体上分别创建Timer1,Timer2 ,分别设置它们的interval值为900,500,步骤4 具体代码如下: Private Sub Timer1_Timer() For i = 0 To 4 Shape1(i).Visible = False Label1.Visible = False Next i End Sub Private Sub Timer2_Timer() For j = 0 To 4 Shape1(j).Visible = True Label1.ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255) Label1.Visible = True Next j End Sub,思考,1怎样建立用户坐标系? 2窗体的ScaleHeight、ScaleWidth属性和Height、Width属性有什么区别? 3怎样设置Line控件对象的线宽?当用Line方法画线之后,CurrentX与CurrentY在何处? 4当用Circle方法画圆弧和扇形时,若起始角的绝对值大于终止角的绝对值,则圆弧角度在何范围,第10章 键盘与鼠标事件,鼠标事件过程可用来处理与鼠标指针的移动和位置有关的操作。,10.1.1 鼠标事件过程,在以前的例子中,我们曾多次使用过鼠标事件,即单击(Click)和双击(DblClick)事件,这些事件是通过快速按下并放开鼠标按钮产生的。实际上,在Visual Basic中,还可以识别按下或放开某个鼠标按钮而触发的事件。 为了实现鼠标操作,Visual Basic提供了3个过程模板。,10.1.1 鼠标事件过程,按下鼠标按钮事件过程 Private Sub Form_MouseDown(Button As Integer , Shift As Integer,_ X As Single, Y As Single) End Sub,10.1.1 鼠标事件过程,松开鼠标按钮事件过程 Private Sub Form_MouseUp(Button As Integer , Shift As Integer,_ X As Single, Y As Single) End Sub,10.1.1 鼠标事件过程,移动鼠标指针事件过程 Private Sub Form_MouseMove(Button As Integer , Shift As Integer,_ X As Single, Y As Single) End Sub,10.1.1 鼠标事件过程,【例10-1】用鼠标在窗体上画图。 Dim PaintNow As Boolean Private Sub Form_DblClick() Cls End Sub Private Sub Form_Load() DrawWidth = 2 ForeColor = RGB(0, 0, 255) End Sub Private Sub Form_MouseDown(Button As Integer, Shift As Integer,_ X As Single, Y As Single) Print “鼠标按下了“ PaintNow = True End Sub,Private Sub Form_MouseMove(Button As Integer, Shift As Integer,_ X As Single, Y As Single) If PaintNow Then PSet (X, Y) End If End Sub Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X_ As Single, Y As Single) Print “鼠标松开了“ PaintNow = False End Sub,10.1.1 鼠标事件过程,10.1.2 拖放,所谓拖放,就是用鼠标从屏幕上把一个对象从一个地方“拖拉(Dragging)”到另一个地方再放下(Dropping)。在Windows中会经常使用过这一操作。Visual Basic提供了让用户自由拖放某个控件的功能。 拖放的一般过程是,把鼠标指针移到一个控件对象上,按下鼠标按钮不要松开,然后移动鼠标,对象将随鼠标的移动而在屏幕上拖动,松开鼠标按钮后,对象即被放下。通常把原来位置的对象叫作源对象,而拖动后放下的位置的对象叫作目标对象。在拖动的过程中,被拖动的对象变为灰色。,10.1.2 拖放,【例10-2】拖放的实现。 按图10-1所示设计界面,窗体标题设置为“拖放的演示”,各控件除表10-1中指定的属性外,均采用默认值。,10.1.2 拖放,如下编写代码: Private Sub Form_Load() Picture1.Picture=LoadPicture(“C:WINDOWSWeb bliss.bmp“) Picture1.DragIcon=LoadPicture(“C:WINDOWS 3dgmove.cur“) End Sub 设置完上述属性后,运行程序,即可自由地拖动图片框。但是,当松开鼠标按钮时,被拖动的控件又回到原来的位置。其原因是:Visual Basic不知道把控件放到什么位置。,10.1.2 拖放,在上例的基础上,做少许修改。在程序代码窗口中的“对象”框中选择Form,在“过程”框中选择DragDrop,编写如下事件过程: Private Sub Form_DragDrop(Source As Control, X As Single,_ Y As Single) Picture1.Move X, Y End Sub 上述过程中“Picture1.Move X, Y”语句的作用是:将源对象(Picture1)移到(Move)鼠标指针(x,y)处。 经过以上修改,就可以拖动控件了。不过在拖动时,整个Picture1控件都随着鼠标移动。按照拖放的一般要求,拖动过程中应把控件变成图标,放下时再恢复为控件。这可以通过以下方法来实现。,10.1.2 拖放,在设计阶段,不要用Picture属性装入图像,而是用DragIcon属性装入图像,其操作与用Picture属性装入类似。即在建立图像框后,在属性窗口中找到并单击DragIcon属性条,然后利用Load Picture对话框把图像装入图片框内。不过,这样装入后,图片框看上去仍是空白,只有在拖动时才能显示出来。 在执行阶段,通过过程代码设置DragIcon属性。一般有以下三种形式: Picture1.DragIcon=LoadPicture(“C:WINDOWS3dgmove.cur“) Picture1.DragIcon=Picutre1.Picture Picture1.DragIcon=Picutre1.DragIcon,10.1.3 OLE拖放,语法格式: Private Sub 对象_OLEGiveFeedback(Effect As Long, Defaultcursors As Boolean) End Sub 其中参数含义如下。 Effect:指出目标支持的操作类型,与OLEDragOver事件中参数含义相同。 Defaultcursors:表示是否使用默认的鼠标图标。为True则使用,为False则不使用鼠标图标,用MousePointer来设定。,鼠标事件过程可用来处理与鼠标指针的移动和位置有关的操作,当用户按下键盘上的某个健时,将发生KeyPress事件。该事件可用于窗体、复选框、组合框、命令按钮、列表框、图片框、文本框、滚动条及与文件有关的控制。严格地说,当按下某个键时,所触发的是拥有输入焦点(Focus)的那个控件的KeyPress事件。在某一时刻,输入焦点只能位于某一个控件上,如果窗体上没有活动或可见的控件,则输入焦点位于窗体上。当一个控件或窗体拥有输入焦点时,该控件或窗体将接收从键盘上输入的信息。例如,假定一个文本框拥有输入焦点,则从键盘上输入的任何字符都将在该文本框中显示。,10.2.1 KeyPress事件,10.2.1 KeyPress事件,在窗体上画一个控件(指上面所讲的可以发生KeyPress事件的控件),并双击该控件,进入程序代码窗口后,从“过程”框中选取KeyPress,即可定义KeyPress事件过程。一般格式为: Private Sub Form_KeyPress(KeyAscii As Integer) End Sub KeyPress事件带有一个参数,这个参数有两种形式。第一种形式是:Index As Integer,只用于控件数组;第二种形式是:KeyAscii As Integer,用于单个控件。上面列出的是第二种形式。KeyPress事件用来识别按键的ASCII码。参数KeyAscii是一个预定义的变量,执行KeyPress事件过程时,KeyAscii为所按键的ASCII值。例如,按下A键,KeyAscii的值为65,如按下a键,则KeyPress的值为97,等等。,10.2.1 KeyPress事件,利用KeyPress事件,可以对输入的值进行限制。假定在窗体少建立了一个文本框(Text1)然后双击该文本框进入程序代码窗口,并从“过程”框中选择KeyPress,编写如下事件过程: Private Sub Text1_KeyPress(keyascii As Integer) If Keyascii 57 Then Beep keyascii= 0 End If End Sub,10.2.1 KeyPress事件,该过程用来控制输入值,它只允许输入0(ASCII码48)到9(ASCII码57)的阿拉伯数字。如果输入其他字符,则响铃(Beep),并消除该字符。 用KeyPress可以捕捉击键动作。例如,用下面的事件过程可以模拟打字机: Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii =13 Then Printer.Print Text1.Text End If KeyAscii = 0 End Sub 运行上面的程序,在文本框中输入一行字符,按回车键后,这行字符即在打印机上打印出来。,10.2.1 KeyPress事件,在KeyPress过程中可以修改KeyAscii变量的值。如果进行了修改,则Visual Basic在控件中输入修改后的字符,而不是用户输入的字符。例如: Private Sub Text1_KeyPress(KeyAscii AS Integer) If Keyascii =65 And keyascii =122 Then Keyasscii =42 End If End Sub 上述过程对输入的字符进行判断,如果ASCII码大于等于65(字母A),并小于等于122(小写字母z),则用星号(ASCII码为42)代替。运行上面的过程,如果从键盘上输入Testing,则在文本框中显示“*”。利用类似的操作,可以编写口令程序。请看下面的例子。,10.2.1 KeyPress事件,【例10-3】编写一个口令程序,界面如图10-2所示。 程序运行后,在文本框中输入口令,如果口令正确,则显示相应的信息,单击“确定”按钮后,将显示第二个窗体。如果口令不正确,则要求重新输入,三次输入的口令都不正确,则停止输入,并结束程序。,设计步骤如下。 步骤1 设计界面 窗体标题设置为“键盘事件演示”,各控件除表10-2中指定的属性外,均采用默认值。,10.2.1 KeyPress事件,10.2.1 KeyPress事件,步骤2 代码设置 Private Sub Text1_KeyPress(KeyAscii As Integer) Static Password As String Static Counter As Integer Static Numberoftries As Integer Counter = Counter + 1 Password = Password + Chr$(KeyAscii) KeyAscii = 0 Text1.Text = String$(Counter, “*“) If LCase$(Password) = “abcd“ Then Text1.Text = “ Password = 0 MsgBox “口令正确,继续。“ Counter = 0,Form2.Show ElseIf Counter = 4 Then Text1.Text = “ Password = “ Counter = 0 MsgBox “口令不正确,请重新输入“ End If Numberoftries = Numberoftries + 1 If Numberoftries = 12 Then End End Sub,10.2.2 KeyDown事件,KeyDown是当一个键被按下时所产生的事件。和KeyPress事件不同,KeyDown事件返回的是键盘的直接状态,而KeyPerss并不反映键盘的直接状态。换言之,KeyDown事件返回的是“键”,而KeyPress事件返回的是“字符”的ASCII码。例如,当按字母键A时,KeyDown所得到的KeyCode码(KeyDown事件的参数,与按字母键 a时相同的),而对KeyPress来说,所得到的ASCII码并不一样。 KeyDown事件的参数有两种形式,其中Index As Integer只用于控件数组,而KeyCode As Integer,Shift As Integer用于单个控件。下面只讨论这种形式,形式如下:,10.2.2 KeyDown事件,Pivate Sub Form_KeyDown(KeyCode As Integer,Shift As Integer) End Sub 设计步骤如下。 步骤1 设计界面 在工程中添加一个空白窗体即可。 步骤2 代码设置 为窗体添加KeyDown事件,并编写如下代码:,10.2.2 KeyDown事件,Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Static i i = i + 1 If i Mod 7 = 0 Then Print Chr$(KeyCode); “-“; Hex$(KeyCode); “ “; Print: Print ElseIf KeyCode = 13 Then i = 0 Print: Print Else Print Chr$(KeyCode); “-“; Hex$(KeyCode); “ “; End If End Sub,10.2.2 KeyDown事件,利用逻辑运算符And,可以判断是否按下了某个转换键。这里的Shift是KeyDown事件的第二个参数。利用这一原理,可以在事件过程中通过判断是否按下了某个或某几个键来执行指定的操作。例如: Private Sub Text1_KeyDown(KeyCode As Integer,Shift As Integer) Const Alt = 4 Const Key_F2 = &H71 ShiftDown% = (Shift And Shift) 0 AltDown% = (Shift And Alt) 0 F2Down% = (KeyCode = Key_F2) If ShiftDown% And AltDown% And F2Down% Then End End Sub 上述程序运行后,如果按Shift+Alt+F2,则结束程序运行。,10.2.3 KeyUp事件,KeyUp表示松开被按下的键时所产生的事件。和KeyDown事件一样,KeyUp事件也是返回键盘的直接状态。 KeyUp事件的参数也有两种形式,其中Index As Integer只用于控件数组,而KeyCode As Integer,Shift As Integer用于单个控件。下面只讨论这种形式,形式如下: Private Sub Form_KeyUp(KeyCode As Integer,Shift As Integer) End Sub 其中的参数KeyCode和Shift的含义同KeyDown事件。 下面对KeyDown事件和KeyUp事件举一例,演示它们的使用方法。,10.2.3 KeyUp事件,【例10-5】编写程序,显示KeyDown和KeyUp事件的功能。 首先在窗体内建立一个文本框,然后编写如下两个事件过程:,Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = &H41 Then Print “压下A键“ End If If KeyCode = &H42 Then Print “压下B键“ End If If KeyCode = &H43 Then Print “压下C键“ End If,End Sub Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer) If KeyCode = &H41 Then Print “松开A键“ End If If KeyCode = &H42 Then Print “松开B键“ End If If KeyCode = &H43 Then Print “松开C键“ End If End Sub,10.2.3 KeyUp事件,程序运行后,如果按A键,则在窗体上输出“压下A键”,当松开时输出“松开A键”。按B和C输出结果类似,如图10-4所示。,10.2.3 KeyUp事件,在试验上面的程序时,按下A(或B、C)键应立即松开,如果按住不放,将连续显示“压下A键(或B、C)”。,KeyPress事件可以用来对标准键盘编写代码来处理大多数按键。此事件中只有一个参数,就是用户按键的ASCII码值。 KeyDown和KeyUp事件在程序中用于检测一些键的特殊组合。 鼠标事件有MouseDown、MouseUp、MouseMove,可以通过它们来了解鼠标的位置及状态的变化。,思考,1.常用的鼠标事件有哪些?如何应用? 2.键盘事件中KeyPress和KeyDown有什么区别?,第11章 文件,所谓文件,是指记录在外部介质上的相关数据的集合,并给此集合指定一个名称。由于文件存储在外部介质上,它不会因系统掉电而丢失信息,因此,文件可以方便、安全地保存程序运行期间的过渡数据和最终结果。在Visual Basic文件管理系统下,存储文件的方式有三种,即顺序文件、随机文件和二进制文件。这三种文件存储方式按照数据存放顺序和数据组织结构进行分类。,VB提供了3个文件系统控件用于文件搜索,分别是DriveListBox(驱动器列表框)、DirListBox(目录列表框)和FileListBox(文件列表框)。这3个控件是VB的内部控件,总是出现在工具箱中。,DriveListBox(驱动器列表框)是一个下拉式列表框,其用途是搜索驱动器。平时只显示一个驱动器(默认情况下,显示的是当前驱动器的名称)。用户可以从列表中选定某个驱动器。 驱动器列表框最重要的属性是Drive,该属性用来在运行时设置或返回所选择的驱动器,但在设计时不可用。例如,将Drive1.Drive = “D“添加到窗体的Load事件中,则程序启动后驱动器中显示的是指定的驱动器D,而不是当前驱动器. 另外,值得注意的是,以上操作只能显示驱动器,并不能自动地变更当前的工作驱动器。若改变当前驱动器,需要使用以下代码: ChDrive “C: “ 将C盘设置为当前工作驱动器 ChDrive Drive1.Drive 将驱动器列表框所选盘设置为当前工作驱动器,11.2.1 DriveListBox,11.2.2 DirListBox,DirListBox(目录列表框)用于显示当前驱动器上的目录清单。它以根目录开始显示当前驱动器目录结构。目录列表框最重要的属性是Path,该属性用来在运行时设置或返回所选择的路径,但在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论