资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,6,章 窗口,教学目标,教学重点,教学过程,教学目标,了解创建窗体的基本步骤,了解如何添加窗体控件,了解窗体属性的设置,了解窗体事件,教学重点,窗体的属性设置,窗体的方法和事件,教学过程,窗口类型,创建窗体,设置窗体属性,窗口事件,窗口函数,6.1,窗口类型,PB,提供了六种窗口类型,他们的表现风格和使用环境不同。,主窗口,弹出式窗口,子窗口,响应窗口,多文档界面窗口,带微帮助的多文档界面窗口,Main,(,主窗口):,主窗口是可以独立存在、不依赖于任何其它窗口的窗口,在执行应用程序过程中,获得焦点时会覆盖其它窗口,失去焦点时又会被其它窗口所覆盖。,主窗体一般还可以称为父窗体,通常作为一个应用程序的启动界面,可以有菜单、工具栏、最大化、最小化按钮等。,它可以被最大化、最小化,也可以嵌入菜单,但菜单中若有工具栏,则工具栏不能被显示,若在显示菜单的同时,也要显示与菜单项对应的工具栏,则应选择,MDI,或,MDIHelp,类型的窗口。,Popup,(,弹出式窗口),Popup,(,弹出式窗口):,弹出式窗口通常由另一个窗口打开,打开它的窗口称为它的父窗口,它可以覆盖父窗口,也可以移出父窗口,但不能被父窗口覆盖,它总是显示在父窗口的前面。,弹出式窗体在打开后,焦点自动指向弹出窗体并在弹出窗口上执行相应的操作;只有将弹出窗口关闭后,其祖先窗口才可能重新获得焦点。,弹出式窗口可以被最大化、最小化,也可以拥有自己的菜单,当弹出式窗口被最小化时,它以图标形式显示在屏幕底部,而不是在父窗口中;当弹出式窗口最大化时,最大化到整个屏幕,而不仅仅覆盖父窗口部分;当父窗口最小化时,弹出式窗口随其隐藏,当父窗口被关闭时,弹出式窗口也随之关闭。,Child,(子窗口),子窗口也是由另一个窗口打开,打开它的窗口是它的父窗口,父窗口可以是主窗口或弹出式窗口。,子窗口不能移出父窗口范围,只能在父窗口范围内移动,当移动子窗口时,子窗口移出父窗口部分变为不可见;当移动父窗口时,子窗口也随之移动,并且保持与父窗口相对位置不变。,子窗口没有菜单,也不能被当作当前活动窗口,但它可以被最大化和最小化,当被最小化时,图标显示在父窗口中,当被最大化时,它充满整个父窗口工作区,当父窗口关闭时,它也被关闭。,Response,(响应窗口),响应窗口是一种应答式窗口,用于向用户请求信息,并且要得到用户的应答,响应窗口通常在另一窗口(父窗口)中打开,但它的父窗口不能是响应窗口。,当响应窗口获得焦点成为活动窗口时,用户必须应答该响应窗口或关闭该响应窗口,才能访问其它窗口。,MDI,(,多文档界面窗口):,MDI,窗口是一个最先打开的窗口,它充当其它窗口的容器,任何时候在,MDI,中打开的窗口叫做一个工作表,工作表只能在框架内活动,若把它极小化,就变成一个位于框架底部的图标。,多文档窗体可以在一个主窗体中可以打开多个子文档窗体,例如,word,程序。多文档窗体创建方法和主窗体相同,只需要将,Properties,窗口中的,WindowType,下拉列表框选择,Mdi,!选项即可。,MDIHelp,(,带微帮助的多文档界面窗口):,MDIHelp,类似于,MDI,窗口,但,MDIHelp,窗口在底部多了一个状态栏,用于向用户显示当前应用程序的一些简短信息和帮助信息。,6.2,创建窗口,6.2.1,创建窗口对象,创建新窗口一般要经过以下五个步骤:打开窗口画板;新建一个窗口,定义窗口的属性;在窗口中添加控件;为窗口和窗口中的控件编写脚本;,预览并存盘。,1.,单击菜单,【File|New】,。,2.,选择,【PB Object|Window】,图标,同时注意,Target,文本框中是否是创建窗口所在的应用程序,若名称正确,则点击,【OK】,按钮。出现窗口界面,如下图。,3.,上,图右边部分设置窗口属性。左边部分底部的第一个标签,Layout,用来设计窗口的格局,如在窗口中添加按钮、文字等;第二个标签,open,用来给窗口及窗口中的控件编写脚本;第五个标签,Declare Instance Variables,用来定义非局部变量。,4.,窗口属性、控件、脚本设置完毕(也可以部分设置)后,点击菜单,【File|Save】,,在,Windows,文本框输入新建窗口的名称(窗口名按规则用,w_,打头),在,Comments,文本框输入窗口的注释,输入完毕后点击,【OK】,按钮即可完成。,6.2.2,继承一个窗口,1.,点击菜单,【File|Inherit】,。,2.,选择祖先窗口所在的目标文件(,Target,)、,库文件(,Libraries,)、,对象类型(,Objects of Type,),选择,Windows,,,并输入或选择窗口名称之后点击,OK,按钮。,3.,对继承的窗口根据需要进行适当的修改,然后保存。,使用继承方法创建窗口有以下优点:,当修改祖先窗口后,该窗口的所有后代窗口都会随之做相应修改。,在程序代码和应用窗口中获得了一致性。,注意:不能删除继承窗口中的原有控件,也不能修改和删除原有的脚本程序,若不想使用某个控件,可以不选择这个控件的,Visible,属性,使这个控件不显示。,6.2.3,窗口画板,布局视图区,窗口属性区,函数列表区,脚本编辑区,结构列表区,结构定义区,控件列表区,事件列表区,非可视对象列表区,布局和属性视图,布局,(Layout),视图用来设计和显示对象及其控件的布局和外观。,属性,(Properties),视图显示对象、控件或者对象中不可视部分的属性。,如果打开了属性视图,并且从布局视图或控件列表视图中选择了一个控件,则控件的属性将显示在属性视图中,我们可以设置或修改这些属性。,脚本视图,在脚本,(Script),视图中,可以编辑事件和函数的脚本,定义、修改用户事件和函数,声明变量和外部函数,查看祖先对象的脚本。,若在函数列表视图中双击一函数,该函数的脚本将显示在脚本视图中。,如果从函数列表视图中拖动一函数到脚本视图中,则脚本视图中显示的将是该函数的脚本。,若想覆盖系统定义的函数,只需在脚本视图中输入覆盖的代码。,函数列表,视图,函数列表视图列出了系统定义的函数和用户自定义的对象级的函数。函数旁的图标标识了该函数是否有脚本,是否带有脚本的继承函数,或者是否带祖先脚本和自身脚本的继承函数。,事件列表视图,事件列表(,Event List,),视图显示了对象默认的和用户定义的事件原型。事件的图标标识了该事件是否有脚本,是否带脚本的继承事件,以及是否带祖先脚本和自身脚本的继承事件。,窗格的,标题栏,每一个窗格都具有可以持久显示也可以暂时显示的,标题栏,,在左上角有一句柄,可以将窗格拖动到新的位置。窗格和相邻窗格之间有分隔条,可以调整大小。用户可以按自己的需要来决定画板窗口的视图布局。,显示窗格标题栏:,将鼠标指针移动到窗个顶层的分割条上,标题栏会显示出来。,单击标题栏左边的图钉,或者从标题栏快捷菜单中选择,“,Pinned,”,项。,再次单击图钉会将标题栏隐藏起来。,6.2.4,预览、运行和打印窗口,1.,预览、运行窗口,打开设计窗口后,选择菜单,【Design|Preview】,,,可预览窗口。,选择,Painterbar,上的,【Preview】,按钮,可预览窗口。,选择,Powerbar,上的,【,Run/Preview,】,按钮,在弹出的对话框中选择要预览的窗口,点击,【,OK,】,按钮,可预览、运行窗口。,2,打印窗口,窗口打开后,选择菜单,【,File|Print,】,,,就可打印窗口。,6.3,设置窗口属性,窗口属性定义窗口的外观、行为和状态,即窗口的变现风格。窗口属性不同,呈现给用户的界面就有所区别,可以根据需要来设置窗口的属性。,打开要设置属性的窗口,在窗口的任意空白处点击右键,选择,Properties,,,或选择菜单,【,View|Properties,】,,,就打开了窗口的属性窗口。,窗口属性共有,4,页:,General,、,Scroll,、,Toolbar,、,Other,。,设置,General,页,1.,指定窗口类型:,单击,WindowType,下拉式列表框,从中选择合适的窗口类型。,窗口类型有以下六种:,主窗体,子窗体,弹出式窗体,应答窗体,多文档窗体,多文档微帮助窗体,2.,指定窗口菜单:,在,Menu Name,后面指定菜单名称,。,3.,选择窗口图标:,点击,Icon,属性下拉列表框右边按钮,从中选择一个系统预定义图标,或点击右边的,Browse,按钮指定一个图标文件即可。,4.,设置窗口颜色:设置窗口的背景颜色:从,BackColor,下拉列表框中选择颜色;,设置,MDI,窗口工作区颜色:从,MDIClientColor,下拉列表框中选择颜色。,5.Title,:,窗口的标题,默认的标题是,Untitled,,,有的窗口类型可以输入标题,有的不能输入标题,这可根据该项是否是可输入状态而定。,6.Visible,:,选择该项,表示打开的窗口处于可视状态,否则窗口虽然已经打开但不能显示在屏幕上。,7.Enabled,:,选择该项表示窗口处于可使用状态,否则窗口及窗口中的控件不能使用。,8.Control Menu,:选择该项表示在窗口的标题栏上可以使用控制框,包括窗口左上角的控制菜单项、窗口右上角的关闭控制项;不选择该项表示不能使用窗口标题栏上的所有控制框。,9.MaxBox,:在选择,Control Menu,的同时再选择该项,则在窗口的右上角显示最大化按钮,点击最大化按钮,窗口变为最大化状态同时最大化按钮变为还原按钮,点击还原按钮回到窗口的初始状态。,10.MinBox,:在选择,Control Menu,的同时再选择该项,则在窗口的右上角显示最小化按钮,点击最小化按钮,窗口在屏幕底部缩为一个图标,点击图标回到窗口的初始状态。,11.Border,:指定窗口周围是否要加边框,只有子窗口、弹出式窗口可以不加边框,其它窗口系统自动加上边框,并且用户不能将边框去除。,12.Resizable,:指定在程序运行过程中,用户是否可以改变窗口的大小,系统指定响应窗口不能改变其大小。,13.WindowState,:指定窗口第一次显示在屏幕上的方式,这里方式有三种:,Normal,表示按照窗口定义的大小和位置显示在屏幕上,,Maximized,表示以最大化显示窗口,,Minimized,表示以最小化显示窗口。,该页用于定义滚动条参数。,(,1,),HScroll,Bar,:指定窗口中是否具有水平滚动条。窗口显示的大小不能无限增大,有时希望看到区域右边内容,可选择该项。,(,2,),VScroll,Bar,:指定窗口中是否具有垂直滚动条。当窗口垂直方向内容较多,希望能看到显示区域以外内容,可选择该项。,(,3,),UnitsPerLine,:单击垂直滚动条上下箭头时,垂直滚动条滑块每次上下移动的单位数。当值为,0,时,每次滚动窗口高度的,1/100,。,(,4,),UnitsPerColumn,:单击水平滚动条左右箭头时,水平滚动条滑块每次左右移动的单位数。当值为,0,时,每次滚动窗口宽度的,1/100,。,设置,Scroll,页,(,5,),ColumnsPerPage,:单击水平滚动条上的任意位置,滑块左右滚动的列数。默认情况下该值为,0,,滚动,10,列。,(,6,),LinesPerPage,:单击垂直滚动条上的任意位置,滑块上下滚动的行数。默认情况下该值为,0,,滚动,10,行。,设置,Toolbar,页,在,Properties,窗口中的,Toolbar,选项卡中可以设置窗体上工具栏的属性包括是否可见、工具栏的高度和宽度等。,Toolbar,选项卡中的各属性设置项含义如下所示:,ToolbarVisible,设置窗口中的工具条是否显示出来。属性值为,True,时显示,否则为,False,时不显示。,ToolbarAlignment,设置工具条在一个,MDI,窗口中的显示位置。,ToolbarX,设置当工具条以窗口方式浮动显示时工具条窗口左上角距,MDI,窗口左边界的距离。用于,MDI,窗口。,ToolbarY,设置当工具条以窗口方式浮动显示时工具条窗口左上角距,MDI,窗口上边界的距离。用于,MDI,窗口。,ToolbarWidth,设置当工具条以窗口方式浮动显示时工具条窗口的宽度。用于,MDI,窗口。,ToolbarHeight,设置当工具条以窗口方式浮动显示时工具条窗口的高度。用于,MDI,窗口。,设置,Other,页,(,1,),X,:,窗口左上角距屏幕或其父窗口客户区左边界的距离。,(,2,),Y,:,窗口左上角距屏幕或其父窗口客户区上边界的距离。,(,3,),Width,:,窗口的左右宽度。,(,4,),Height,:,窗口的上下高度。,(,5,),Pointer,:,鼠标移到该窗口区域内时鼠标的形状,可以点击下拉列表框,选择系统预定义的形状,或点击右边按钮,选择文件来定义鼠标形状。,在代码中设置窗口属性,在程序运行时可以通过脚本控制窗口的某些属性。其语法格式为:,窗口名称,.,属性,=,属性值,例如:要设置窗口的显示属性为,false,,则使用如下语句:,窗口名称,.visible=false,PowerBuilder,程序采用事件驱动工作方式,程序的运行没有固定的流程,程序中的代码也是为各种可能发生的事件编写的,当程序开始运行之后,它就可以接受来自系统、用户或者其它应用程序触发的事件,然后执行相应的事件代码。,PowerBuilder 9.0,中为窗体定义了很多事件,包括,Open,、,MouseDown,、,Show,等,当触发窗体的这些事件时使得应用程序执行相应的程序代码,从而实现应用程序的各种功能。下面列出了几个常用事件。,6.4,窗口事件,(,1,),Activate,事件,该事件在窗口成为活动窗口时、得到输入焦点之前触发,并且窗口中,Tab,值最小的那个控件得到输入焦点。,这个事件没有参数,只有唯一的返回值,0,,表示继续操作。,dw_1.settransobject(sqlca),dw_1.retrieve(),(,2,),Open,事件,打开窗口时触发该事件,它发生在窗口被打开之后,未显示之前。,这个事件没有参数,只有唯一的返回值,0,,表示继续操作。,当窗口的,Open,事件被触发时,也会触发一些其它事件,如,Activate,事件、,Show,事件,窗口上各个控件的,Constructor,事件等。,通常在该事件中初始化窗口中的一些变量和控件,也可以设置数据窗口和事务对象的关联关系等。,如在窗口的,Open,事件中将数据窗口控件与事务对象连接并检索数据。,(,3,),Clicked,事件,当用户点击窗口中没有被控件覆盖的地方,在释放鼠标左键之后就会触发窗口的,Clicked,事件。若用户点击的是一个可用且可见的控件,就会触发这个控件的,Clicked,事件,而不会触发窗口的,Clicked,事件。,Clicked,事件有三个参数,,Flags,、,Xpos,、,Ypos,,,Flags,表示用户单击鼠标左键的同时,是否还单击了鼠标上别的键或按了键盘上的键,,Xpos,、,Ypos,分别代表鼠标单击的,X,坐标和,Y,坐标。它只有唯一的返回值,0,,表示继续操作。,窗口的,Clicked,和,DoubleClicked,事件被触发之前,先触发,MouseUp,和,MouseDown,事件。,在触发,DoubleClicked,事件之前,先触发,Clicked,事件。,(,4,),Close,事件,关闭窗口时触发该事件,通常将一些善后的事情放在这个事件中完成。,(,5,),CloseQuery,事件,关闭窗口时,在,Close,事件之前被触发。,该事件有两个返回值,,0,代表可以关闭窗口,继续执行;,1,代表不能关闭窗口。,(,6,),DoubleClicked,事件,当双击窗口上任何没有被控件覆盖的地方就触发该事件。,它的返回值和参数与,Clicked,事件相同。,(,7,),Show,窗口显示时发生。窗口的,Show,函数将触发该事件。,(,8,),Hide,窗口被隐藏前的瞬间发生。,(,9,),Resize,窗口大小发生变化时发生,窗口被打开时也产生此事件。,(,10,),Timer,调用,Timer,函数启动定时器,在设定时间到后发生。,6.5,窗口函数,1,、,Open,(,windowvar,Parent,):用于打开窗口。,Open,函数还有第二种语法格式:,open(windowvar,wintdowtype,parent,),6.5.1PowerBuilder,窗口函数,2,、,openwithparm(windowvar,parameter,parent,),用于带参数打开窗口。,打开窗口时,,openwithparm,函数把参数,parameter,保存到系统默认的全局对象,Message,中,根据数据类型的不同,在被打开窗口的事件处理程序中,通过检查,Message,对象的相应属性得到打开函数传递来的参数值。参数类型及,Message,对象相应属性的对应关系如表所示。,Parameter,数据类型,使用的,Message,属性,Numeric,Message.DoubleParm,PowerObject,(包含各种对象以及用户自定义结构),Message.PowerObjectParm,String,Message.StringParm,注意:,Message,对象是全局变量,其他程序可能会使用,因此,要尽早检查,Message,对象相应属性,并取出参数做保存。,3,、,Close,():用于关闭窗口。如:,close(w_main,),4,、,OpenWithParm,:,打开窗口时带参数。,5,、,CloseWithReturn,:关闭窗口时向打开该窗口的程序返回一个值。,语法格式:,closewithreturn(windowname,returnvalue,),返回值保存在,Message,对象的属性中。,6,、,show,:显示窗口。,7,、,Hide,:,返回数据类型为整型,.,,用于隐藏窗口。如果返回值为,1,操作成功,否则,返回值为,-1,。,8,、,Move,:,返回数据类型为整型。用于移动窗口。如果返回值为,1,,操作成功,否则,返回值为,-1,;参数是,NULL,,则返回,NULL,。,9,、,Resize,:改变窗口大小。,10,、,OpenSheet,:打开表单窗口。,11,、,GetActiveSheet,:返回当前活动表单窗口。,12,、,GetFirstSheet,:返回第一个表单窗口。,13,、,SetMicroHelp,:在状态栏中显示指定字符串。,14,、,TriggerEvent,:触发指定事件。,15,、,PostEvent,:将事件放入事件队列。,16.ArrangeSheet,:,此方法用于排列,MDI,框架中的表单或图标。返回数据类型为整型。返回值为,1,成功,否则,返回值为,-1,失败。,17.ChangeMenu,:,用于更换与窗口相关联的菜单。其中,参数,position,只适用于,MDI,框架类型的窗口。,6.5.2,用户自定义窗口函数,在事件脚本编程中,编程人员可以自定义一些窗口函数,使用自定义函数的优点是程序简洁明了,易于维护,并且代码实现共享,移植方便。,1,、进入函数定义区,2,、函数定义区,在函数定义区为函数命名,定义是否有返回值、返回值类型、参数。,3,、编写函数代码,4,、函数的使用,函数的使用有静态调用和动态调用两种方式,前者是系统默认的函数调用方式,应用方式最多。,静态调用就是系统在编译代码时就对函数进行彻底地编译。,动态调用的函数在程序执行时才会去查找和调用函数,而在程序编译时可以没有该函数。动态调用的方法是在函数名前加上,dynamic,。,6.6,多文档界面,多文档界面是一种十分流行的界面风格,一般说来,如果要建立一个能在其中打开多个窗口、并且易于在打开的多个窗口之间灵活切换的应用程序时,最好采用这个风格。,6.6.1,多文档界面的构成及有关概念,典型的,MDI,窗口由六部分组成:菜单栏、工具栏、框架、客户区、工作表、状态栏。,多文档界面的应用程序的特点:有一个最先显示的主窗口,MDI,框架窗口,其他窗口在主窗口中打开,其他窗口称为工作表。工作表只能在,MDI,框架窗口中移动而不能被移出框架窗口。,6.6.2,创建多文档界面,创建一个完整的,MDI,界面通常要完成下述工作:,建立,MDI,框架窗口;,创建工作表;,建立,MDI,应用程序中的菜单;,设置微帮助;,设置工具栏。,6.7,窗口编程,6.7.1,在窗口中编写脚本,脚本的编写都是在各种事件的响应处进行。脚本采用,PowerScript,语言编写。,6.7.2,窗口设计实例,设计一个窗口应用程序,运行程序时打开主窗口,在主窗口单击鼠标右键后,每隔,10s,弹出一个消息对话框。再次单击右键则停止弹出消息对话框,在主窗口单击左键就弹出一个响应式窗口。,设计思路:,(,1,)建立一个工作空间和应用,(,2,)建立一个主窗口对象。,(,3,)在窗口的,mousedown,、,rbuttondown,事件和,timer,事件中编写代码。,
展开阅读全文