数据库第十二章窗口.doc_第1页
数据库第十二章窗口.doc_第2页
数据库第十二章窗口.doc_第3页
数据库第十二章窗口.doc_第4页
数据库第十二章窗口.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

第十二章 窗口121 窗口概述窗口是应用程序图形界面的基础,它由属性、事件、函数、控件组成,用户通过窗口及窗口上的控件和菜单表达自己的操作意图。在PowerBuilder中,窗口是个十分重要的对象,一般用窗口画笔来定义,我们将各种控件、菜单与窗口融合成一个整体作为应用程序与用户交互的界面。窗口可以显示信息,向用户请求信息,并能响应用户的键盘或鼠标操作。窗口由四部分组成:1 属性:定义窗口的外观及行为(例如,窗口是否有标题条,窗口的颜色、大小、显示位置、边框形状等)2 事件 : 发生在窗口上的事情,通过编写事件处理程序控制对用户操作如何响应3 函数 : 用于操作窗口4 控件: 放置在窗口中的图形对象,用于请求、显示信息或操作PowerBuilder 提供了六种窗口类型,每种类型都有其特殊用途,下面简单地介绍各窗口类型。一、主窗口(Main Window)主窗口是独立的窗口,它不依赖于其它任何窗口而独立存在,这种类型的窗口既能够覆盖其它窗口,也能够被其它窗口覆盖。主窗口可以带有菜单,能够被最大化、最小化、或改变大小。对功能单一的应用,通常选用主窗口作界面基础。二、弹出式窗口(Popup Window)弹出式窗口通常由另一个窗口打开,该窗口一般情况下成为弹出式窗口的父窗口。弹出式窗口显示在父窗口前面,它既可以移出父窗口,也能够覆盖父窗口,但不能被父窗口覆盖,当父窗口最小化时,弹出式窗口随之隐藏,父窗口被关闭时,弹出式窗口也随之关闭。根据需要,也可以把弹出式窗口设计成带有菜单、能够被最大化、最小化、或可改变大小的形式。弹出式窗口用途广泛,它可以显示文字信息,也可以作成图形化的进度提示窗口,还能够用于输入用户的选择。三、子窗口(Child Window)正如其名字所暗示的那样,子窗口从属于另一个窗口,它总是在主窗口或弹出式窗口中打开,该窗口成为子窗口的父窗口。子窗口可以在父窗口内部移动,但不能移出父窗口。当子窗口的一部分移出父窗口时,系统剪裁子窗口,使得只有父窗口内的部分可见。移动父窗口时,子窗口随之移动,关闭父窗口时,子窗口也随之被关闭。子窗口可以有标题条,可以被最大化、最小化及改变大小,但它没有菜单,也不能被当作活动窗口。子窗口在最大化时,它充满父窗口的工作区;子窗口在最小化时,它缩小成图标显示在父窗口的底部。一般情况下,子窗口应用不多,如果需要子窗口的功能,则应该选用MDI窗口类型,它能够自动完成许多窗口管理工作,避免了一切从头做起的麻烦。四、响应窗口(Response Window)响应窗口向用户请求信息,它总是在另一个窗口(父窗口)中打开。响应窗口被显示时,用户必须关闭了该窗口后才能操作同一个应用程序的其它窗口。响应窗口不能被最大化、最小化,但可以带有控制菜单。应用程序中经常使用的About(关于)窗口、MessageBox对话框都是响应窗口应用的具体实例。五、MDI框架窗口(MDI Frame )和带微帮助的MDI框架窗口(MDI Frame WithMicrohelp)MDI框架窗口及其子窗口构成了应用程序的多文档界面风格,它有两种形式:普通的MDI框架窗口和带微帮助的MDI框架窗口,两者的区别在于,后一种框架窗口在底部多了个状态栏,用于显示应用程序简短的当前信息,我们将其称做微帮助(Microhelp)。典型的MDI框架窗口由标题、菜单、工具栏、客户区、状态栏组成。122 窗口属性窗口属性定义窗口的外观、行为和状态,比如,窗口是哪种类型的窗口、是否要标题、要标题时标题是什么、窗口是否要菜单、窗口的颜色、位置、大小等。窗口对象的大部分属性均能修改,但也有部分属性系统不允许修改,例如Control数组。下面首先介绍PowerBuilder开发环境中设置窗口属性的步骤,同时分类说明常用窗口属性的作用和用法。一、 在窗口画板上设置窗口属性设置窗口属性窗口有三十多个属性,在窗口画板上我们可以设置大部分常用的窗口属性,其设置步骤为:1 打开窗口2 在窗口属性对话框上设置窗口属性二、 在程序中设置窗口的属性1 Backcolor long设置窗口的背景色w_1.backcolor=RGB(0,0,255)2 Center boolean设置窗口是否居中显示 w_1.center=TRUE3.title string设置窗口的标题w_1.title=”主窗口”4.Visible boolean窗口是否可见w_1.visible=FALSE5 Enabled boolean窗口是否可用如果该属性是false则窗口变灰对任何操作均不响应6.位置属性x integer y integer窗口左上角的坐标height integer width integer窗口的高度和宽度12.3 窗口事件什么是事件:事件指可能发生在对象上的事情。在Windows系统中,用户的所有操作都由系统自动转化为某个事件,比如,用户移动了鼠标,就会触发当前鼠标指针下对象的MouseMove事件;用户按下键盘上的某个按键,系统就会将这个操作转变成键盘事件。另外,系统的某些行为也将转换成事件来表现,比如定时器事件。为了简化应用程序的开发,大多数PowerBuilder对象都预先定义了一组事件。如果我们想对某个事件作出反应,那么就需要编写该事件的事件处理程序,这样,当相应事件发生时,事件处理程序就会被执行。如果没有对某个事件编写事件处理程序,那么当该事件发生时,应用程序什么也不做,就像没有发生这样的事件一样。除了用户操作应用程序能够产生事件外,程序本身也能够主动地触发事件,其目的在于简化编程任务。当我们对某个事件编写了事件处理程序后,比如编写了窗口的Clicked(单击)事件处理程序,当事件发生时(用户单击了窗口),事件处理程序就会执行,执行完毕后,窗口等待下一个事件的发生。窗口事件窗口对象具备丰富的预定义事件,有二、三十个。实际上,不需要对每个事件都编写事件处理程序,而只要对需要响应、需要处理的事件编写事件处理程序。窗口对象中最常用的事件是Open、Close、CloseQuery、Drag事件、Resize,Timer其它事件普通编程使用不多。一、 open事件当第一次打开窗口时,在窗口显示之前系统触发Open(打开)事件,在Open事件发生时,系统已经创建了窗口及窗口中的控件,因此,在这个事件的处理程序中,我们能够引用这些对象、修改它们的属性等,例如,在Open事件中可以将某个按钮暂时隐藏起来。窗口被打开后,窗口类型(Window Type)属性不能再被更改,例如,主窗口类型的窗口只能作为主窗口使用,而不能在事件处理程序中将它更改为响应窗口或弹出窗口。我们可以在open事件中为,窗口控件设置初值。下述函数触发窗口的Open事件:Open、OpenWithParm、OpenSheet、OpenSheetWithParm二、closequery事件在开始关闭窗口时,发生该事件,该事件返回一个0或1的返回值。执行该事件的事件处理程序后,系统检查返回值,如果返回值为1,则窗口不被关闭,通常情况下紧随其后发生的Close事件不被产生;如果返回值为0,则窗口被关闭。利用该事件的这种特性,程序能够根据当前状态提醒用户保存数据、询问用户是否真要关闭窗口。例如在关闭窗口前询问是否关闭窗口。Int retRet=messagebox(“请注意”,”是否关闭窗口?”,question!,yesno!,2)If ret=1 thenReturn 0Else Return 1End if三、close事件窗口被关闭时发生。触发该事件后,没有办法能够阻止窗口关闭操作。一般在该事件中做一些清除工作,清除窗口创建的一些对象。四、timer事件在调用Timer函数启动定时器、设定时间后发生。在应用timer事件编程时,首先要使用timer函数设定定时器,在定时器规定的时间间隔触发timer事件。Timer(时间间隔)以秒为单位,timer(0)关闭定时器,创建定时器后要注意关闭定时器,因为定时器会消耗内存。例如:我们创建一个时钟窗口W_1St_1在w_1的open事件中设置定时器timer(1)在w_1的timer事件中显示当前时间st_1.Text = String(Now(), hh:mm:ss)在w_1的close事件中关闭定时器timer(0)五、resize事件入口参数:ULong sizetype:指明改变窗口大小的类型例如:0 :(SIZE_RESTORED) 窗口不是由于最小化或最大化发生改变1 :(SIZE_MINIMIZED) 由于最小化2 :(SIZE_MAXIMIZED) 由于最大化Integer newwidth:窗口新的客户区宽度Integer newheight:窗口新的客户区高度一般我们在这个事件中来改变窗口中控件的大小,使它们按窗口的比例进行改变。改变窗口大小和位置的操作均会触发该事件例如:在窗口w_1的大小发生变化时修改多行编辑器mle_1的大小W_1Mle_11、声明实例变量int old_width,old_height 用于存放窗口的原大小2、在w_1的open事件中:old_width=this.widthold_height=this.height3、在w_1的resize事件中:int x_bl,y_blx_bl=this.width - old_widthy_bl=this.height - old_heightmle_1.width=mle_1.width+x_blmle_1.height=mle_1.height+y_blold_width=this.widthold_height=this.height六、拖动事件dragenterdragwithindragleave124 窗口函数powerbuilder系统为窗口对象提供了30多个函数,我们现在学习常用的几个函数。一、 打开窗口函数1.格式一open(窗口,父窗口)第一个参数是要打开的窗口名,可以是在窗口画板上定义的窗口,也可以是窗口实例。第二个参数是该窗口父窗口。什么是窗口实例?在窗口画笔中设计好窗口后,在某个事件处理程序中通过Open()函数打开窗口,此后运行程序时窗口才出现在屏幕上。建立应用时,有时我们希望显示几个结构相同但数值不同的窗口,例如,我们已经有了一个w_person窗口,它用于显示单个人员的信息,现在我们希望通过打开多个w_person窗口同时显示多个人员的信息。一个通常会想到的办法是,多执行几次Open(w_person)函数,试一试就会发现,屏幕上只有一个w_person窗口.例如:1 在窗口画板上定义了窗口w_person,open(w_person)2 在窗口画板上定义了窗口w_person(child!),w_main(main!),将w_person作为w_main的子窗口打开。Open(w_person, w_main)3 打开两个w_person窗口w_person w_1,w_2open(w_1)open(w_2)2格式二动态打开窗口,前一种格式我们在编译程序时已经知道要打开窗口的类型,当我们在写程序时不知道要打开窗口的类型时可以用第二种格式打开窗口。Open(窗口变量,窗口类型,父窗口)窗口变量与父窗口的含义与格式一相同,窗口类型是一个存放窗口类名的字符串(string)。例如:string window_typewindow w_open1,w_open2window_type=”w_person”open (w_open1,window_type)open(w_open2,window_type)二、 关闭窗口函数打开的窗口不再使用时,应该及时将其关闭,以释放系统资源。关闭窗口的工作由函数Close()实现,其语法格式为:close(窗口)使用窗口名:close(w_main)使用代词:close(parent)close(this)三、 得到窗口上当前鼠标的位置PointX(),PointY(),得到鼠标当前窗口的坐标。四、 改变窗口位置的函数1Move(int x,int y)将窗口移动到指定的位置。实际上是修改窗口属性的x,y2显示隐藏窗口show()显示窗口,实际上将窗口的visible属性设置为TRUEhide()隐藏窗口,实际上将窗口的visible属性设置为FALSE五、 触发事件函数TriggerEvent ()和PostEvent ( )。当我们为某个对象的某个事件编写了事件处理程序后,在其它地方(比如函数或其它事件处理程序)就可以调用该事件处理程序,完成这项工作的一个简便方法是使用对象函数TriggerEvent ()或PostEvent ( )。由于TriggerEvent ()函数立即触发相应事件,故将其称为事件触发函数,而PostEvent ( )函数将事件放置到消息队列的尾部,等待系统来处理,故将其称为事件邮寄函数,下面分别介绍这两个函数。1 事件触发函数TriggerEvent ()TriggerEvent ()函数TriggerEvent ()函数能够触发任何对象的事件,并立即执行该事件的事件处理程序,其语法格式为:objectname.TriggerEvent ( event ,word, long其中:objectname是对象或控件名称,将触发该对象或控件的某个事件;event是要触发的事件,其有效值既可以是标识PowerBuilder事件的TriggerEvent枚举类型值(比如Clicked!、Modified!、或DoubleClicked!等,也可以是表示事件名称的字符串(例如自定义事件cb_exit_request);word 和long是两个可选参数,触发事件后其值将分别保存到系统全局对象Message的WordParm和LongParm属性中。例如:语句: cb_OK.TriggerEvent(Clicked!)触发命令按钮cb_OK的单击事件(Clicked),并立即执行该事件的事件处理程序。语句:Parent.TriggerEvent(cb_exit_request)触发父窗口的自定义事件“cb_exit_request”,并立即执行该事件的事件处理程序。TriggerEvent ()很像函数调用,执行该函数时,程序进入被触发事件的事件处理程序中执行,执行完毕后返回到TriggerEvent ()语句下面一行语句继续执行2 邮寄函数PostEvent ( )函数PostEvent ( )的语法格式为:objectname.PostEvent ( event ,word, long)各参数的意义与TriggerEvent ()函数相同。虽然语法格式上PostEvent ( )与TriggerEvent ()相同,但PostEvent ( )函数只是邮寄一个事件,要求PowerBuilder在以后的某个时间执行邮寄事件的事件处理程序,具体时间由PowerBuilder决定,之后当前程序继续执行。TriggerEvent ()通常用做同步调用,因为它等待被调用者执行完毕后才继续运行,而PostEvent ( )通常用做异步调用,它在发出请求执行信号后就继续运行自己的程序段了。例子:在双击窗口w_1时,触发按钮cb_ok的clicked事件在w_1的doubleclicked事件中:cb_ok.triggerevent(clicked!)或cb_ok.postevent(clicked!)六、 在两个窗口之间传递参数在两个窗口之间传递参数是通过message对象作为媒介,来进行参数传递的。 1 带参数打开窗口有些窗口应用程序要反复使用,每次使用时都向窗口提供不同的参数,此时,利用带参数打开窗口函数OpenWithParm ( )既方便又简单。与Open()函数一样,OpenWithParm ( )函数也有两种语法格式:第一种格式打开一个设计程序时就已经知道其类类型的窗口对象,第二种格式打开一个程序运行时才知道其类类型的窗口对象。我们只介绍第一种。第一种语法格式为:OpenWithParm ( windowvar, parameter ,parent)其中,windowvar是你想显示的窗口的名称;parameter是希望传递的参数,该参数将被放置到系统缺省的全局对象Message中。parameter的数据类型只能是下述三种类型之一:(1) String,字符串 (2)Numeric,系统支持的所有数值数据类型,包括PowerBuilder的数值数据类型integer、long、decimal、real、double、UnsignedInteger以及当前数据库管理系统支持的数值数据类型。 (3)PowerObject,PowerBuilder系统对象的基类,实际上包括了PowerBuilder的所有对象。parent是个可选参数,未省略时,由该参数指定父窗口的名称,此时,被打开窗口作为子窗口形式出现。OpenWithParm()函数返回整型值1表示打开窗口成功,返回整型值-1表示打开失败。打开窗口时,OpenWithParm()函数把参数parameter保存到系统缺省的全局对象Message中,根据数据类型的不同,在被打开窗口的事件处理程序中,通过检查Message对象的相应属性得到打开函数传递来的参数值,参数类型及Message对象相应属性的对应关系如表。 parameter数据类型及其使用的Message属性parameter数据类型使用的Message属性NumericMessage.DoubleParmPowerObject(包括各种对象以及用户自定义结构)Message.PowerObjectParmStringMessage.StringParm在被打开窗口中,应该尽早地检查Message对象相应的属性,原因在于该对象是全局对象,其它程序完全可能为其它目的使用该对象。下面的语句打开窗口w_employee,并用w_employee引用该窗口,打开窗口的同时向窗口传递一个字符串型参数“李方”: OpenWithParm(w_employee, 李方)在窗口w_employee的Open事件中,可以用下述语句把OpenWithParm()传递来的参数显示在单行编辑框st_empname中: st_empname.Text = Message.StringParm2带参数关闭窗口在响应窗口(Response Window)中,我们可以使用CloseWithReturn ( )函数在关闭窗口的同时向打开该窗口的程序返回一个值。与OpenWi

温馨提示

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

评论

0/150

提交评论