《《数据库应用技术——PowerBuilder应用系统开发》-周建芳-电子教案 PB06》由会员分享,可在线阅读,更多相关《《数据库应用技术——PowerBuilder应用系统开发》-周建芳-电子教案 PB06(56页珍藏版)》请在金锄头文库上搜索。
1、第6章 用户界面窗口与菜单设计,本章要点: 窗口对象概述 窗口的基本操作 窗口事件 操作窗口的函数 菜单设计 家庭理财信息系统中的界面设计,6.1 窗口对象概述,窗口对象是一个可视对象,具有属性、方法和可以响应的事件,同时也是一个装载其他标准控件的载体,在窗口控件上可以放置其他标准控件。 PB提供的窗口类型有种: 主窗口(main!):独立于其他窗口的单独窗口,不依赖任何窗口而存在,是窗口的缺省类型。 弹出式窗口(popup!):弹出式窗口不能独立存在,它总是在另外一个窗口(也就是父窗口)中打开。 子窗口(child!):由主窗口或弹出式窗口打开。这种窗口被称为子窗口的父窗口。子窗口不能拥有菜
2、单,但可以有标题。,6.1 窗口对象概述,响应式窗口(response!):一般在其父窗口的某个事件被触发时打开,接受用户的请求信息。 MDI框架窗口(mdi!):MDI(多文档界面)框架窗口可以打开很多表单(sheet)子窗口,这些表单窗口在mdi窗口中可以任意地移动和切换。 带帮助的MDI窗口(mdihelp!):和MDI框架窗口基本一样,唯一的区别是带帮助的MDI框架的底部的状态行中显示简要的文本信息。,6.2 窗口的基本操作,6.2.1 新建窗口 PB提供了两种方式进行窗口的创建:向导式和继承式。 1向导式窗口创建 单击主菜单的File下的“New”子菜单项,或点击powerbar工具
3、条下的“新建” 图标,都会打开new窗口,选择“PB Object”标签,6.2 窗口的基本操作,6.2 窗口的基本操作,在File菜单下选择Save或在窗口画笔的工具栏点击“保存”图标,将窗口对象存放在应用库中。,6.2 窗口的基本操作,2继承式窗口创建 开发人员可以以一个已经存在的对象为祖先对象,在其基础上创建新的对象,使新对象既继承了祖先对象的属性、方法、变量、结构和控件,又可以覆盖或扩展祖先对象的事件处理程序。 优点: 只要对祖先对象进行修改,所有后代对象会跟着做相应修改,使用户不必逐一手工修改。 后代对象继承使用祖先地事件处理脚本,开发人员不必输入重复地脚本。,6.2 窗口的基本操作
4、,继承创建新窗口对象的方法如下: 选择主菜单的File|Inherit或在PowerBar工具栏中点击“继承” 按钮,打开Inherit from Object对话窗口,对象类型,6.2 窗口的基本操作,选择windows对象,通过继承的方式创建一个窗口,选择要继承的祖先窗口名,单击OK,打开窗口画笔,显示从祖先窗口继承的所有控件及属性和事件脚本的新窗口对象,和祖先窗口一样。 可以对继承来的后代窗口进行编辑和修改: 改变窗口和窗口上已有控件的属性; 添加新的控件并设置属性,编写脚本; 引用祖先对象的函数、事件和变量; 扩展从祖先窗口继承来的脚本。 不可以做的事情有: 删除继承的控件 在没有删除
5、后代对象前,不可以删除祖先对象。,6.2 窗口的基本操作,6.2.2 设置窗口属性,General标签中主要是对窗 口的常规属性设置 Scroll标签中主要设置与水 平和垂直滚动条有关的属性 在ToolBar标签中设置与工 具条有关的属性 在Other标签中设置与窗口 显示位置和大小的属性,6.3 窗口事件,应用程序运行时,是通过触发执行各事件的脚本来完成与具体应用环境有关的业务功能,这叫“事件驱动”。窗口设计的核心工作就是为各种事件编写处理脚本。 6.3.1 Open事件 触发该事件是在窗口打开之后,窗口及控件还没有显示之前。在窗口的Open事件中,一般进行一些窗口级的初始化工作: 设置窗口
6、属性; 设置窗口上标准控件的属性; 建立数据库连接; 将窗口中数据库窗口控件与事物对象关联起来。,6.3 窗口事件,6.3.2 close事件 窗口被关闭时触发该事件。在该事件中一般进行一些善后的工作如断开数据库连接,提示用户是否保存对数据库的修改操作等。 6.3.3 active事件 在窗口被激活前发生。该事件发生后,窗口成为激活窗口,窗口中跳转次序号最小的控件获得焦点。如果窗口中没有唯一的最小跳转次序号的控件,则窗口本身获得焦点。在该事件中,一般用于设置一些控件或菜单的有效性或可见性。,6.3 窗口事件,6.3.4 clicked事件 用户用鼠标单击窗口的空白区域时发生。该事件接受一个un
7、signedlong类型的参数flags,用于标识鼠标单击的方式,有四种: 鼠标左键单击,flags=0; 鼠标左右键同时单击,flags=2; 按住shift键的同时单击鼠标左键,flags=4; 按住ctrl键的同时单击鼠标左键,flags=8。,6.3 窗口事件,6.3.5 key事件 当用户在键盘上按下一个键而且插入点不在编辑区域(如单行编辑器,多行编辑器,掩码编辑器或数据窗口对象的编辑控件等)时发生。 该事件接受两个参数: key:枚举数据类型,用于标识用户按下的键。 keyflags:无符号长整型(UnsignedLong),用于判断在用户按下键盘上的键的同时,是否还按下了两个特殊
8、的键:Shift键和Ctrl键。,6.3 窗口事件,6.3.6 RButtonDown事件 用户在窗口客户区中任何未被有效控件占用的地方按下鼠标右键时会触发该事件。RbuttonDown事件接受三个参数: Flags:无符号长整型(UnsignedLong),用于判断用户的按键类型。 Xpos,Ypos:Integer类型,记录鼠标右键事件发生时光标相对于窗口左上角的坐标。,6.3 窗口事件,6.3.7 Timer事件 Timer事件是一个比较特殊的事件,需要和Timer()函数配合使用。Timer(n)函数的参数n是一个整型数据类型,表示的是一个时间间隔,计量单位为秒。从Timer函数被调用
9、开始,每隔一个指定的时间间隔就触发一次Timer事件,如果Timer事件中编写了脚本,在触发Timer事件时会执行该事件的脚本,实现相应的功能。,6.4 操作窗口的函数,6.4.1 打开窗口的函数 创建窗口后,操作的第一步就是在应用程序中打开窗口。PB提供了两个系统级的函数打开窗口:Open和OpenWithParm。 1Open函数 Open函数直接打开窗口,显示窗口和窗口上的所有控件,使得窗口和窗口上的控件的属性可以在脚本中进行设置。该函数的调用会触发窗口的Open事件。,6.4 操作窗口的函数,Open函数的两种语法格式: Open ( windowvar , parent ) Open
10、函数的这种格式用于打开一个确定类型的窗口。 Open ( windowvar, windowtype , parent ) Open函数的这种格式用于打开一个只有运行时才能确定窗口类型的窗口。,6.4 操作窗口的函数,2OpenWithParm函数 打开窗口的另一个函数是OpenWithParm。当有些窗口在应用程序运行过程中要反复打开,而且每次打开时父窗口向打开窗口传递的参数值都不同时,就需要用OpenWithParm函数来打开窗口。 和Open函数一样,OpenWithParm函数也有两种语法格式: OpenWithParm(windowvar,parameter,parent) Open
11、WithParm(windowvar,parameter,windowtype,parent),6.4 操作窗口的函数,6.4.2 关闭窗口 PB提供的用于关闭窗口的函数也有两个: 1Close函数 关闭窗口以释放被窗口和窗口上的控件占据的系统资源。语法格式为:close(windowname) 2CloseWithReturn函数 在关闭一个类型为响应窗口的窗口并返回一个信息给响应窗口的父窗口时,采用CloseWithReturn 函数来关闭窗口和释放资源。语法格式为: CloseWithReturn ( windowname, returnvalue ),6.4 操作窗口的函数,6.4.3
12、 隐藏窗口hide 如果窗口暂时不需要显示,可以将窗口隐藏起来。这是一个对象级函数,对象级函数又称为对象的方法。对象方法的调用通过小圆点操作符(.)来实现。 隐藏窗口的函数语法格式为:windowname.hide() 实现隐藏窗口功能的另一个途径是通过设置窗口的Visible属性为false:windowname.visible=false 二者在效果上完全等价。,6.4 操作窗口的函数,6.4.4 显示窗口show 和hide函数刚好相反,show函数的功能用于将驻留在内存但已经隐藏起来的窗口或对象显示出来。 语法格式如下:windowname.show() 实现显示窗口功能的另一个途径是
13、通过设置窗口的Visible属性为true:windowname.visible=true 二者在效果上完全等价。 无论是show还是hide函数,对象调用这两个函数的前提是窗口已经通过系统级函数Open打开,驻留在内存。,6.4 操作窗口的函数,6.4.5 移动窗口move Move是一个对象级的函数,用于在应用程序运行时移动窗口的相对位置。 调用move方法的语法格式如下:Objectname.move(x,y) x,y为integer型的变量,分别代表新位置的相对坐标。 对于窗口类型为主窗口、弹出式窗口和响应式窗口的坐标相对于屏幕的左上角,而对于子窗口,新位置的坐标相对于父窗口。 另一种
14、途径是设置对象的位置属性x和y。 例如,语句w_1.move(50,30)与 w_1.x=50完全等效: w_1.y=30,6.4 操作窗口的函数,6.4.6 改变窗口的大小resize resize是一个对象级函数,用于在应用程序运行时改变窗口的大小。 语法格式如下:Objectname.resize(width,height) 另一种途径是设置对象的尺寸属性width和height。 例如,语句w_1.resize(150,200)与 w_1.width=150 w_1.length=200 功能完全等效,6.4 操作窗口的函数,6.4.7 操作窗口事件的函数 PB提供了两个操作窗口的对象
15、级函数,使得事件的脚本在不通过鼠标或键盘触发事件的情况下就能自动执行。 1 TriggerEvent函数 功能:触发特定对象的事件,导致对象事件的脚本执行。 语法格式为:objectname.TriggerEvent(event,word,long) 参数event是一个枚举类型或字符串,表示对象要触发的事件。 TriggerEvent函数的触发方式是同步的,即一旦调用该函数触发了对象的事件,会引起该事件中断所有事情立即被执行。,6.4 操作窗口的函数,2PostEvent 函数 功能:向特定对象的事件队列尾部添加事件。 语法格式为:objectname.PostEvent(event,wor
16、d,long) PostEvent函数的触发方式是异步的,当调用该函数触发了对象的事件时,如果当时对象正在执行其他事件的脚本,它不会立即中断,而是将事件插入对象的事件队列尾部,等排在该触发事件前面的事件脚本执行完毕后再执行该事件对应的脚本。,6.4 操作窗口的函数,6.4.8 操作MDI窗口的函数 对于表单子窗口的打开、布局等操作必须调用专门的MDI窗口函数来实现。简单介绍如下: 1 OpenSheet函数 应用级函数,用于在MDI框架父窗口中打开表单子窗口,并在特定的菜单上为所打开的表单创建一个菜单项。 该函数的语法格式如下: OpenSheet(sheetrefvar,windowtype,mdiframe,position,arrangeopen),6.4 操作窗口的函数,2OpenSheetWithParm函数 也是一个应用级函数,MDI框架窗口中打开表单子窗口的同时向子窗口传递一个参数。 该函数的语法格式如下: OpenSheetWithPa