软件及软件工程-第6章_第1页
软件及软件工程-第6章_第2页
软件及软件工程-第6章_第3页
软件及软件工程-第6章_第4页
软件及软件工程-第6章_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

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

文档简介

6.1项目休闲娱乐—绘图板6.1.1项目目标本项目实例主要任务是设计完成“休闲娱乐”界面和“休闲娱乐”中的“绘图板”界面。其中绘图板程序中,单击“设置坐标系”,能在中间的图片框中画出坐标系,并能通过单击不同按钮,分别绘制出点、正弦曲线、直线等图形,可以通过右侧的组合框和标签设置作图样式。“休闲娱乐”窗口如图6-1所示,“绘图板”窗口如图6-2所示。6.1.2项目分析本项目实例主要运用了VB6.0的Line、Circle、Pset方法画出各种图形。并用两个标签来标明当前绘图区域的前景色和填充色,单击标签时弹出“颜色”对话框,来选择前景色和填充色。利用3个组合框设置“线型”“线宽”“填充样式”。下一页返回6.1项目休闲娱乐—绘图板6.1.3项目实现1.程序界面设计1)“休闲娱乐”窗体界面设计双击“学生管理系统”工程中的Form6(休闲娱乐)窗体,进入Form6的窗体设计状态,添加1个标签Label1和4个命令按钮Command1、Command2、Command3、Command4。依次添加窗体Form13、Form14、Form15,并进行保存。保存窗体名称分别为“绘图板”“电子相册”“多媒体”。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板2)“绘图板”窗体界面设计双击“工程资源管理器”中的Form13(绘图板)窗体,进入Form13的窗体设计状态,在窗体上添加1个命令按钮Command1,用来设置坐标系,再添加1个命令按钮Command2,利用“复制”“粘贴”操作建立控件数组,在窗体中间添加1个图片框,用来绘制各种图形。在窗体右侧添加7个标签,3个列表框,用来设置图形样式。2.界面对象属性设置1)“休闲娱乐”窗体属性设置参照图6-1所示在属性窗口中为“休闲娱乐”窗体和控件设置相应的属性值。2)“绘图板”窗体属性设置“绘图板”窗体中各对象属性设置如表6-1所示。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板注意:初始状态设置各个绘制图形的命令按钮控件Enabled属性为Flase(不可用状态)。只有当设置好坐标系后才可用。3.编写对象事件过程代码(1)“休闲娱乐”窗口Form6中的代码设置如下。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板(2)“绘图板”窗口Form13的代码设置如下。在代码窗口“通用”区设置模块级变量如下。双击Form13窗体中的相应控件进入代码窗口编写如下事件过程代码。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板6.1.4相关知识VisualBasic为应用程序的编写提供了复杂的图形功能。这些功能可以优化应用程序,使之更有吸引力和易于使用。1.坐标系统概述每一个图形操作都要使用绘图区或容器的坐标系统。坐标系统对定义窗体和控件在应用程序中的位置也非常重要。1)默认坐标系在VB中,默认的坐标原点为对象的左上角,横向向右为X轴的正向,纵向向下为Y轴的正向,窗体的坐标系统如图6-3所示。构成一个坐标系需要3个要素:坐标原点、坐标度量单位、坐标轴的长度与方向。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板每个窗体和图片框都有五个刻度属性(ScaleLeft、ScaleTop、ScaleWidth、ScaleHeight、ScaleMode)和一个方法(Scale),它们可用来定义坐标系统。任何容器默认坐标系统,都由容器的左上角(0,0)坐标开始。沿这些坐标轴定义位置的测量单位统称为刻度。默认刻度单位为缇(twip)。ScaleTop、ScaleLeft属性用于控制容器对象左边和顶端的坐标,根据这两个属性值可形成坐标原点。所有对象ScaleTop、ScaleLeft属性的默认值为0,坐标原点在容器的左上角。若不直接定义单位,则可通过设置ScaleMode属性,用标准刻度来定义它们。属性设置值如表6-2所示。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板设置ScaleMode的值后,VisualBasic会重新定义ScaleWidth和ScaleHeight,使它们与新刻度保持一致。然后,ScaleTop和ScaleLeft设置为0。直接设置ScaleWidth、ScaleHeight、ScaleTop或ScaleLeft,将自动设置ScaleMode为0。注意:用ScaleMode属性只能改变刻度单位,不能改变坐标原点及坐标轴的方向。想想议议:窗体的Height、Width属性与窗体的ScaleWidth、ScaleHeight;窗体的Top、Left属性与窗体的ScaleTop、ScaleLeft有什么区别?下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板2)自定义坐标系要达到与数学坐标系相同的效果,就需要重新定义对象的坐标系。Scale方法是建立用户坐标系最方便的方法。语法格式:

[对象名.]Scale[(x1,y1)-(x2,y2)]其中,对象名是容器,如省略对象,则是带有焦点的窗体对象。x1、y1决定了ScaleLeft和ScaleTop属性的设置值。两个x坐标之间的差值和两个y坐标之间的差值分别决定了ScaleWidth和ScaleHeight属性的设置值。例如:项目实例中设置坐标系的代码如下,运行结果如图6-2所示。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板DimiAsIntegerPicture1.Scale(-5,5)-(5,-5)'自定义坐标系

Picture1.Line(0,5)-(0,-5)'画Y轴线

Picture1.Line(-5,0)-(5,0)'画X轴线

Picture1.CurrentX=4.8'当前光标位置

Picture1.CurrentY=0'当前光标位置

Picture1.Print"X"'在当前光标位置输出"X"Picture1.CurrentX=0.1'当前光标位置

Picture1.CurrentY=5'当前光标位置

Picture1.Print"Y"'在当前光标位置输出"Y"说明:当Scale方法不带参数时,取消用户定义的坐标系,采用默认坐标系。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板对象的ScaleWidth,ScaleHeight属性值也可以定义坐标轴方向和度量单位,其值可确定对象坐标系X轴与Y轴的正向及最大坐标值。默认时其值均大于0,此时,X轴的正向向右,Y轴的正向向下。对象右下角坐标值如下。(ScaleLeft+ScaleWidth,ScaleTop+ScaleHeight)如果ScaleWidth的值小于0,则X轴的正向向左,如果ScaleHeight的值小于0,则Y轴的正向向上。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板因此,上例中的Picture1.Scale(-5,5)-(5,-5)也可以用以下代码完成。

Picture1.ScaleLeft=-5Picture1.ScaleTop=5Picture1.ScaleHeight=-10Picture1.ScaleWidth=10想想议议:当移动容器时,容器内的对象会发生怎样变化?下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板2.使用VisualBasic作图在VisualBasic中,使用窗体、图片框或Printer对象的图形方法和属性可以绘制一些基本的图形、设置颜色、线形和填充样式。1)绘图属性(1)用AutoRedraw创建持久的图形。每个窗体和图片框都具有AutoRedraw属性。AutoRedraw属性有两种值。①AutoRedraw的默认值是False。当设置为False时,VB会把图形输出到屏幕,不输出到内存。②当容器的AutoRedraw属性设置为True时,VB会把图形输出并保存在内存中。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板注意:运行时,在程序中设置AutoRedraw可以在画持久图形(如背景色或网格)和临时图形之间切换。当AutoRedraw设置为False时,如果用Cls方法清除对象,并不能清除已有的输出。这是因为输出保存在内存,必须再次设置AutoRedraw为True,才能用Cls方法清除。(2)使用CurrentX和CurrentY属性设置当前坐标。CurrentX和CurrentY属性表示在绘图时的当前坐标,这两个属性在设计阶段不能使用,当坐标系确定后,坐标值(x,y)表示对象上的绝对坐标位置。如果前面加上关键字Step,则表示相对坐标位置,当使用Cls方法后,CurrentX和CurrentY属性值为0。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板例如,下面的程序会在(1000,2000)处显示"Hello!"。

PrivateSubCommand1_Click()Me.CurrentX=1000Me.CurrentY=2000Print"Hello!"EndSub(3)使用DrawWidth属性设置线宽。语法格式:容器对象名.DrawWidth[=宽度]下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板参数说明如下。①容器对象名:指窗体、图片框或打印机。②宽度:其范围从1到32767。该值以像素为单位表示线宽。默认值为1,即一个像素宽。作用:指定图形方法输出时线的宽度。(4)使用DrawStyle属性设置线型语法格式:容器对象名.DrawStyle[=设置值]参数说明如下。①容器对象名:指窗体、图片框或打印机。②设置值:如表6-3所示。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板作用:指定用图形方法创建的线,其线型可以是实线和虚线。注意:只有当DrawWidth设置为1时,DrawStyle属性产生的效果才会如表6-2中的各设置值所述。(5)使用Fillstyle属性设置填充图案语法格式:容器对象名.FillStyle[=设置值]参数说明如下。①容器对象名:指窗体、图片框或打印机。②设置值:如表6-4所示。作用:返回或设置用来填充Shape控件以及由Circle和Line图形方法生成的圆和方框的模式。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板6)使用Fillstyle和Fillcolor属性设置填充图案和颜色语法格式:容器对象名.FillColor[=颜色]作用:返回或设置用来填充Shape控件以及由Circle和Line图形方法生成的圆和方框的填充颜色。默认为0(黑色)。注意:如果FillStyle设置为1(透明),则忽略FillColor属性,但是Form对象除外。想想议议:容器对象名.FillColor[=颜色]中的颜色值有几种赋值方法?下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板2)画点PSet方法语法格式:[对象名.]PSet[Step](x,y)[,颜色]参数说明如下。(1)x、y:单精度参数,确定画点的位置,可以是整数、分数或数值表达式。(2)颜色:指定画点的颜色。默认为前景色。(3)Step:可免除持续不断地记录最后画点位置的负担。在编写程序中经常关心的是两点的相对位置,而不是绝对位置。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板比如:

PSet(300,100),RGB(0,0,255)PSet(10.75,50.33)Picture1.PSet(1.5,3.2)PSet(50,75),Backcolor'擦除该点例如,在本项目实例中,利用画点方法绘制正弦曲线。如图6-4所示。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板3)画直线和矩形语法格式:

[对象名.]Line[[Step](x1,y1)]-[Step](x2,y2)[,颜色][B[F]]参数说明如下。(1)x1、y1:表示起点坐标值,x和y参数可以是整数、分数。若省略这点坐标,就把当前坐标作为该对象的起点。当前位置由CurrentX和CurrentY属性指定。(2)x2、y2:表示终点坐标值。(3)B:表示画矩形。(4)F:表示用画矩形的颜色来填充矩形,F必须和关键字B一起使用。如果只用B不用F,则矩形的填充由FillColor和FillStyle属性决定。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板例如:

Line(500,500)-(2000,2000),RGB(255,0,0)'画一条红色的直线

Line–(880,880)'起点为(2000,2000)

Line(100,100)-(2000,2000),,B'左上角(100,100),右下角(2000,2000)的矩形

Line(500,500)-Step(1500,1500),,BLine(500,500)-Step(1500,1500),,BF注意:格式中的各参数可根据实际要求进行取舍,但如果舍去的是中间参数,参数之间分隔符不能舍去。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板想想议议:①Line(150,250)-Step(150,50)是否等同于Line(150,250)-(300,300)?②容器对象的FillColor属性能不能应用于Line方法画的三角形、矩形、正方形?4)画圆、椭圆、圆弧和扇形用Circle方法可画出大小不同的各种圆形、椭圆、圆弧和扇形。使用变化的Circle方法,可画出多种曲线。语法格式:

[对象名.]Circle[Step](x,y),半径[,[颜色][,[起始角][,[终止角][,纵横比]]]]下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板参数说明如下。(1)x和y:圆心的坐标。(2)纵横比:通过此参数可控制椭圆,指定了垂直长度和水平长度比,是正浮点数。如果纵横比小于1,则半径指的是水平方向的x半径,如果大于或等于1,则半径指的是垂直方向的y半径。默认值为1,画的是圆。(3)起始角和终止角:通过此参数可控制圆弧和扇形,当起始角和终止角取值在0至360°时为圆弧。如果起始角的绝对值大于终止角的绝对值,则画一个角度大于180°的圆弧。如果为负数,则VB将画出扇形。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板比如:

Circle(500,500),400Circle(1000,1000),500,,,,2'注意逗号不能省略

Circle(600,1000),800,,,,3Circle(1800,1000),800,,,,1/3说明:Circle方法画图形时,采用逆时针方向。5)使用Line控件和Shape控件作图Line控件和Shape控件是VisualBasic提供的具有图形功能的控件。用户可用Line控件和Shape控件创建多种图形而无须编写代码。可用Line控件用来在窗体、框架或图片框中创建简单的线段;可用Shape控件在窗体、框架或图片框中创建各种预定义形状,如矩形、正方形、椭圆形、圆形、圆角矩形或圆角正方形。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板(1)Line控件。常用属性如下:①x1,y1,x2,y2:控制线的两个端点的位置。②BorderWidth:设置线宽。③BorderStyle:设置线型。(2)Shape控件。常用属性如下:①FillStyle:设置填充图案。②FillColor:设置填充颜色。③Shape属性提供了6种预定义的形状。表6-5列出Shape控件的所有预定义形状、样值和相应的常数。说明:利用线与形状控件,用户可以迅速地显示简单的线与形状或将之打印输出,与其他大部分控件不同的是,这两种控件不会响应任何事件,它们只用来显示或打印。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板3.鼠标事件通过MouseDown、MouseUp、MouseMove鼠标事件可使应用程序对鼠标位置及状态的变化作出响应,大多数控件能够识别这些鼠标事件。例如,窗体、图片框和图像控件能检测鼠标指针的位置,判断其左、右键是否被按下,还能响应鼠标按键与Shift、Ctrl、Alt键的各种组合。表6-6列出了这3种鼠标事件的触发条件。3种鼠标事件均使用Button参数(指示用户按下或释放了哪个按钮)、Shift参数(指示用户按了Shift、Ctrl与Alt键中哪一个或哪几个)和x、y参数(表示当前鼠标的位置)。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板注意:①鼠标事件被用来识别和响应各种鼠标状态,并把这些状态看做独立的事件,不能将鼠标与Click事件和DblClick事件混为一谈。在按下鼠标按键并释放时,Click事件只能把此过程识别为一个单一的操作。另外,鼠标事件能够区分各鼠标按键与Shift、Ctrl、Alt键,而Click事件和DblClick事件却不能。②应用程序能迅速识别大量的MouseMove事件,因此,在MouseMove事件中不能处理需要大量计算时间的工作。例如,绘图板项目实例中的“任意曲线”的绘制,也可以设计一个简单的绘图板,如图6-5所示。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)

'当前鼠标坐标位置

CurrentX=XCurrentY=YEndSubPrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)IfButton=1ThenLine-(X,Y)'鼠标移动时画线

EndSub下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板1)Button参数。表示用户按下或释放了哪个按钮。它是一个位域参数,其中0、1、2三位分别描述鼠标按键的状态。其值的意义如表6-7所示。注意:MouseDown和MouseUp一次只能识别一个按键,而MouseMove事件可以检测是否同时进行了两个以上的鼠标按键。MouseMove事件还可以检测是否进行了某个特定的键,而不管是否同时还有其他键被按下。(2)Shift参数。指示用户按了Shift、Ctrl与Alt键中哪一个或几个按钮。它是一个位域参数,其中0、1、2三位分别描述Shift、Ctrl与Alt键的状态。用户也可以使用下面的符号常数及它们的逻辑组合来检测。①1——vbShiftMask:Shift键被按下。②2——vbCtrlMask:Ctrl键被按下。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板③4——vbAltMask:Alt键被按下。比如:ShiftAnd2,ShiftAndvbCtrlMask。(3)x,y参数。指示当前鼠标的位置,采用的坐标系统是用ScaleMode属性指定的坐标系。4.键盘事件键盘事件和鼠标事件都是用户与程序之间交互操作中的主要元素。我们把编写响应击键事件的应用程序作为编写键盘处理器。键盘处理器能在控件级和窗体级两个层次上工作。用控件级(低级)处理器可对特定控件编程,如可将TextBox控件中的输入文本转换成大写字符;而用窗体级处理器可使窗体首先响应击键事件。这样就可将焦点转换成窗体的控件。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板VisualBasic提供3种事件,分别为:KeyPress、KeyUp和KeyDown事件。表6-8对这些事件作了描述。注意:①键盘事件彼此并不相互排斥。按一个键时将生成KeyDown和KeyPress事件,释放此键后生成KeyUp事件。当用户按一个KeyPress事件不能检测的键时将触发KeyDown事件,而释放此键后发生KeyUp事件。②默认情况下,当用户对获得焦点的控件进行键盘操作时,控件的3个键盘事件被触发,但窗体的3个键盘事件不会发生。但如果将窗体上的KeyPreview属性设置为True,则对每个控件在控件识别其所有键盘事件之前,窗体就会接收这些键盘事件。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板③如果窗体的KeyPreview属性设置为True,并且窗体级事件过程修改了KeyAscii变量的值,则当前具有焦点的控件的KeyPress事件过程将接收到修改后的值。如果窗体级事件过程将KeyAscii设置为0,则不再调用对象的KeyPress事件过程。1)KeyPress事件按对应ASCII字符的键时可触发KeyPress事件。ASCII字符集包括标准键盘的字母、数字、标点符号及大多数控制键,如Enter、Tab和BackSpace键等。KeyDown和KeyUp事件能够检测其他功能键、编辑键和定位键,而KeyPress事件主要应用在下面3个方面。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板(1)使用KeyPress事件可处理标准ASCII字符按键。例如,使KeyPress事件将文本框中的所有字符都强制转换为大写字符。

PrivateSubText1_KeyPress(KeyAsciiAsInteger)KeyAscii=Asc(Ucase(Chr(KeyAscii)))EndSub其中,KeyAscii参数返回对应于ASCII字符代码的整型数值。(2)利用KeyPress事件识别用户是否按下一个特定的键。例如,检测用户是否正在按BackSpace键(其ASCII值为8,其常数值为vbKeyBack)。

PrivateSubForm_KeyPress(KeyAsciiAsInteger)

IfKeyAscii=8ThenMsgBox"你按下BackSpace键"EndSub下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板(3)使用KeyPress事件改变某些键的默认行为。例如,当窗体上没有默认按键时,按Enter键就会发出“嘟嘟”声。下面的程序将在KeyPress事件中中断Enter键(字符代码13),可以避免发声。

PrivateSubText1_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13ThenKeyAscii=0EndSub下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板2)KeyDown和KeyUp事件KeyDown和KeyUp事件报告键盘本身准确的物理状态:按键(KeyDown)及释放键(KeyUp)。KeyPress事件并不直接报告键盘状态,它只识别按键所代表的字符而不识别键的按下或释放状态。例如,输入大写A时,KeyDown事件获A的ASCII码,输入小写a时,KeyDown事件获得a的ASCII码,由此可见,KeyPress事件将字母的大小写作为两个不同的ASCII字符处理。而KeyDown事件将字母的大小写作为相同ASCII字符处理,要区分大小写,可进一步使用Shift参数。表6-9中提供了KeyDown和KeyUp事件的两个参数返回输入字符的信息。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板1)KeyCode参数。KeyCode参数通过ASCII值或键代码常数来识别键的。因为字母键的键代码与此字母的大写字符的ASCII值相同,所以A和a的KeyCode值都是Asc("A")。比如,下面程序本意是只有按A才显示“按下A键”,而当按下a时也显示同样的信息。因此,为判断按下的字母是大写形式还是小写形式,需使用Shift参数。

PrivateSubText1_KeyDown(KeyCodeAsInteger,ShiftAsInteger)IfKeyCode=vbKeyAThenMsgBox"按下A键"EndSub注意:数字与标点符号键的键代码与键上数字的ASCII代码相同。因此1和!的KeyCode都是由Asc(1)返回的数值。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板KeyDown和KeyUp事件可识别标准键盘上的大多数控制键,其中包括功能键(F1~F16)、编辑键(Home、PgUp、Del等)、定位键(→、←、↑、↓)和数字小键盘上的键,可以通过键代码或相应的ASCII值检测这些键。例如:

PrivateSubText1_KeyDown(KeyCodeAsInteger,ShiftAsInteger)IfKeyCode=vbKeyHomeThenMsgBox"按下Home键"EndSub(2)Shift参数。在键盘事件中,Shift参数代表Shift、Ctrl和Alt键的整数值或常数。在KeyDown与KeyUp事件中,使用Shift参数可区分字母大小写。Shift参数的整数值和常数如表6-10所示。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.1项目休闲娱乐—绘图板例如,用Shift参数判断按下的字母的大小写形式。想想议议:KeyDown与KeyPress事件的区别?返回上一页返回上一页返回返回上一页返回6.2项目休闲娱乐—电子相册6.2.1项目目标本项目实例主要任务是设计完成“休闲娱乐”中的“电子相册”界面,单击“新建”菜单,打开一个通用对话框,选择一个图片文件后,产生一个新的子窗体,并在子窗体上显示图片;通过选择“层叠”“平铺”“排列”菜单会使打开的多个子窗口进行相应方式的排列。相册窗口如图6-6所示。6.2.2项目分析本项目实例主要运用了VB6.0的MDI窗体的相关知识。在窗体上添加菜单栏,然后建立一个子窗体作为模板,并按相应模式排列窗体。下一页返回下一页返回下一页返回下一页返回下一页返回6.2项目休闲娱乐—电子相册6.2.3项目实现1.程序界面设计和属性设置(1)建立MDI窗体。选择“工程”→“添加MDI窗体”命令,在打开的窗口中。添加一个MDI窗体,新建的MDI窗体名称为“MDIForm1”,Caption属性为“相册”。(2)在MDI窗体中添加菜单栏,4个菜单项分别为“新建”“层叠”“平铺”“排列”。(3)在工程中添加新窗体Form14,设置Form14的Caption属性为“相册”,MDIChild属性为“True”。2.编写对象事件过程代码双击“工程资源管理器”窗口中的MDIForm1,使MDIForm1成为当前的设计窗体,以下是MDIForm1相册窗口的代码设置。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.2项目休闲娱乐—电子相册分别单击“新建”“层叠”“平铺”“排列”菜单项进入代码窗口编写如下事件过程代码。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.2项目休闲娱乐—电子相册下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.2项目休闲娱乐—电子相册6.2.4相关知识VisualBasic允许在一个工程(程序)中使用多个窗体。多窗体程序一般有两种形式,单文档界面(SDI)和多文档界面(MDI)。前者又称为多重窗体界面,每个窗体都是独立的、平等的,也就是说每个窗体可以有自己的界面和程序代码,以完成不同的功能。本章前面所涉及的窗体都是单文档窗体界面;而后者所包含的多个窗体与多重窗体的界面不同,是本节要讲的内容。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.2项目休闲娱乐—电子相册Windows的多文档界面(MDI,MultipleDocumentInterface)应用程序是当前最常用的一类用户界面,它允许用户在一个窗体中同时显示多个文档界面。利用多文档界面的应用程序可以简化多个文档之间的信息交换。大家熟悉的Word和Excel应用程序就是很好的例子,如图6-7所示。当用户需要同时进行两项以上的相关事务操作时,能够包含多个文档的MDI窗体就给操作带来了便利。多文档应用程序由主窗体和子窗体组成。从用户界面中可以看到,其中有一个特殊窗体,它被用来放置所有的子窗体,该窗体被称为主窗体或父窗体(通常称为MDI窗体)。一个应用程序中只能有一个MDI窗体。MDI窗体为程序中的所有子窗体提供工作空间;一个MDI窗体可以有多个子窗体,每个子窗体都有各自的特定功能。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.2项目休闲娱乐—电子相册1.创建MDI窗体1)添加MDI窗体选择“工程”菜单中的“添加MDI窗体”命令,然后从相应的对话框中选择“MDI窗体”,再单击“打开”按钮。这样就添加了一个MDI窗体。如果已经添加了一个MDI窗体,这时“工程”菜单中的“添加MDI窗体”命令为不可用状态。2)将普通窗体设置为MDI子窗体若想把某个窗体变为MDI窗体的子窗体,只需将该窗体的MDIChild属性值设置为True即可。如果工程中尚未添加MDI窗体,而将某窗体的MDIChild属性设置为True,那么运行时将会出错。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.2项目休闲娱乐—电子相册对于一个多文档应用程序,至少要有两个窗体,即MDI窗体和子窗体。MDI窗体只是子窗体的容器,并不是应用程序用户的接口,它只能添加具有Align属性(如Picture控件)或者具有不可见界面的控件(如Timer控件),其他控件如Label、TextBox等不能添加在MDI窗体上。在设计时,子窗体不是限制在MDI窗体内,也就是说在设计阶段,子窗体和普通窗体没有区别,可以像设计普通窗体一样添加控件、设置属性、编写代码以及设计子窗体的功能。如何确定窗体是否是一个MDI子窗体呢?一种方法是通过查看指定窗体的MDIChild属性值来判断。如果MDIChild值为True,则表示该窗体为一个MDI子窗体;另一种方法是通过查看工程资源管理器中图标来判断。在VisualBasic的工程资源管理器中,MDI窗体和MDI子窗体都有特定的图标表示,如图6-8所示。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.2项目休闲娱乐—电子相册2.MDI窗体的特性运行时,MDI窗体及其所有子窗体的运行都呈现出与普通应用程序不同的特性。(1)所有子窗体均显示在MDI窗体提供的工作空间内。像普通窗体一样,用户能够移动子窗体和改变子窗体的大小,不过,它们均被限制在这一工作空间内。(2)当最小化一个子窗体时,它的图标将显示于MDI窗体上,而不是显示在任务栏上;当最小化MDI窗体时,此MDI窗体及其所包含的子窗体将由一个图标来代表,显示在任务栏上。当还原MDI窗体时,MDI窗体及其所有子窗体将按最小化之前的状态显示出来。(3)当最大化一个子窗体时,它的标题会与MDI窗体的标题组合在一起并显示于MDI窗体的标题栏上。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.2项目休闲娱乐—电子相册(4)通过设定AutoShowChildren属性,子窗体可以在窗体加载时自动显示(True)或隐藏(False)。(5)活动子窗体如果有菜单栏,将显示在MDI窗体的菜单栏中,而不是显示在子窗体中,如图6-9所示。想想议议:子窗体在什么情况下与父窗体无关,在什么情况下与父窗体有关?3.MDI窗体及其子窗体的设计技巧(1)创建应用程序的菜单。为MDI窗体及其子窗体添加菜单与为一般窗体添加菜单基本相同。都需选定窗体后,选择“工具”菜单中“菜单编辑器”命令或单击工具栏上的“菜单编辑器”按钮来添加。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.2项目休闲娱乐—电子相册添加菜单后,为每一个菜单项加入相应的代码。大多数MDI窗体都有一个“窗口”菜单,它是一个显示所有打开的子窗体标题的特殊菜单,如图6-9所示。从“窗口”菜单中可以看出,在当前MDI窗体中打开四个MDI子窗体,其中“照片5”为活动子窗体。另外菜单中还包括操纵子窗体排列的菜单项。(2)子窗体的排列方式。在MDI窗体中可以使用Arrange方法来重新排列子窗体。所有的子窗体可以通过水平平铺、垂直平铺、层叠或者沿着MDI窗体的下部排列子窗体的图标等方式来显示。其语法格式如下。

Object.Arrangearrangement参数说明:arrangement是一个数值或常数,指定重排的子窗体或图标的方式。该参数的取值参见表6-11。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.2项目休闲娱乐—电子相册本项目实例中对窗口进行排列的代码如下。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.2项目休闲娱乐—电子相册4.确定活动子窗体及控件(1)确定活动窗体。MDI应用程序可以同时打开多个子窗体,但是某一时刻只能对当前处于活动状态的一个子窗体进行操作(例如将剪切板中的数据粘贴到子窗体)。有时由于编程的需要,首先要确定哪个是活动子窗体,可根据MDI窗体的ActiveForm属性来判断,该属性可以返回具有焦点的或是被最后激活的子窗体。访问ActiveForm属性时,至少应有一个窗体被加载或可见,否则会返回一个错误信息。(2)确定具有焦点的控件。当一个子窗体上有几个控件时,需要确定具有焦点的控件是哪一个。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.2项目休闲娱乐—电子相册可以根据MDI窗体的ActiveControl属性来判断,该属性将返回活动子窗体上具有焦点的控件。下面代码是用剪切板的内容替换当前活动窗体上具有焦点的控件的内容。frmMDI.ActiveForm.ActiveControl.SelText=Clipboard.GetText()(3)加载MDI窗体及子窗体。加载子窗体,其MDI窗体会自动加载并显示。而加载MDI窗体时,其子窗体不会自动加载。如果MDI窗体为启动窗体,则运行程序后,无子窗体加载。只有选择“新建”命令才能加载一个子窗体。AutoShowChildren属性可用来加载隐含状态的子窗体,再用Show方法把它们显示出来。但是不能将MDI窗体和MDI子窗体显示为模式窗体。如果要在应用程序中显示模式对话框,可使用MDIChild属性设置为False的窗体。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.2项目休闲娱乐—电子相册DimphotoAsNewForm14'创建名为photo的窗体,Form14的一个新实例

photo.Caption="照片"'设置新窗体的标题

photo.Show'显示新窗体(4)设置窗体的大小和位置。MDI子窗体的BorderStyle属性会影响子窗体的大小和位置。如果MDI子窗体的BorderStyle属性的值为2,则表示它具有大小可变的边框,在装载时将根据MDI窗体的大小决定子窗体初始化的高度、宽度和位置,而不再是设计时的子窗体的大小。下一页返回上一页下一页返回上一页下一页返回下一页返回上一页下一页返回6.2项目休闲娱乐—电子相册说明:①要想在应用程序运行时先启动MDI窗体,那就要改变启动窗体。选择“工程→工程属性”命令,打开“工程属性”对话框,从“工程属性”对话框中的“启动对象”列表框中,选择所需要启动的MDIForm1。②要想应用程序运行时,需要按一定顺序启动多个窗体,可专门建立一个启动多个窗体的工作流程的标准模块,并在该标准模块创建一个名为Main的子过程,然后通过“工程属性”对话框选择SubMain选项作为启动对象。想想议议:多文档窗体与多重窗体应用程序在创建、运行、退出方面的异同点?返回上一页返回上一页返回返回上一页返回6.3知识进阶在VisualBasic中有几个预先定义好的系统对象,它们是屏幕、打印机和剪贴板。系统对象不需要在程序中定义就可使用,十分方便。1.打印机(1)Printer对象。使用Printer对象可以实现与系统打印机的通信。①Page属性。语法格式:

Printer.Page作用:返回当前页号,当一个应用程序开始执行时,或从P

温馨提示

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

评论

0/150

提交评论