版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PowerBuilder 概述概述金海华金海华2010年年12月月4日日一、概述概述概述关于 PowerBuilder PowerBuilder是Sybase公司推出的一个图形化的应用程序集成开发环境,最新版本为12 。虽然现在流行的开发工具并不是PB,比较其它专门工具而言,并不具有多大优势。但对于C/S结构的数据库应用,PB仍然是好的选择之一,使用PB可以比较容易地开发出和数据库打交道的应用程序。PowerBuilder运行原理开发支持库Pblib.dllPbcmp.dllPbudo.dllPbrtc.dll开发(PBLs)编译(Pcode,Mcode)应用(Application:DLL,
2、Exe,PBD)BugFixing运行支持库PBvm90.dllPBdwe90.dllLibjcc.dllPbo8470.dllPbrtc.dllYouOcx.OCXYouLIb.DLLDBMS发布(InstallShield)C/S模式图示DB ServersTCP/IP发送发送SQL语句语句到数据库服务器到数据库服务器返回返回SQL语句语句查询结果到客户机查询结果到客户机WinNT,Linux,UnixMicrosoft SQL ServerORACLESybase,DB2,InformixClientsServersClientsClients1、客户端运行自己的程序,向服务器发送SQL
3、请求及取回结果。2、服务器侦听网络,响应请求并返回处理结果。PowerBuilder开发界面脚本预览菜单工具条对象属性面板函数及事件状态条PowerBuilder开发界面说明:1、PB开发为标准的MDI方式,即对应不同的开发对象,有它不同的菜单及工具条,对应不同的功能;2、可以创建的对象包括8大类:对象(窗口、函数、结构、菜单)数据窗对象(Grid,Free Form,Tabular,Label,N-Up)数据库(Database Profile,Query,Pipeline)工程(Application,Proxy Library,COM CTS,OLE2,Java Proxy) 3、常用工
4、具Library,Editor,Class viewBrowser,DB Profile Editor,Debugger,DW Syntax等二、窗口Window窗口概述1、窗口(Window)是程序和用户进行交互的主要界面,在窗口上可以布置各种不同类型的控件以满足程序的要求,各控件间相互协作,完成预定功能2、一个窗口可以只被打开一次或者作为一个实例变量而被创建(实例化)然后打开多次。3、任何窗口的最底层基类都是windows,可以逐级继承,对于节省代码开支,界面一致性等非常有好处。4、数据窗作为标准控件可以直接嵌入到窗口中使用。窗口 - 1.创建有2种方式创建一个窗口:1.新建: 从菜单中选
5、择“file-new”,弹出新建向导,选择“PB Object-Window”,系统就自动创建一个标题为 Untitled 的空窗口。2.继承:菜单中选择“Inherit”,弹出可被继承的祖先清单,选择一个,系统自动从该祖先窗口继承,新窗口拥有祖先窗口的所有特性及脚本,并可以重载及覆盖这些属性或脚本。注意点: 基于继承的窗口,一旦祖先的属性修改,则该窗口中没有被重载或覆盖的部分即自动修改,实际上该窗口分为2部分:祖先和自己。窗口 - 2 窗口的基本属性窗口的属性非常多,仔细理解属性的具体用途及含义对用好窗口对象非常重要。常用属性:属性名称含义标题(Title):定义该窗口的标题栏;类型(Win
6、dow Type)定义该窗口的类型:Child! 由父窗口打开,并且只能在父窗口范围内存在Main! - 主窗口,常用方式MDI!,MDIhelp! - 多文档窗口Popup - 弹出式窗口,用来为其它窗口提供支持信息Response! -用于输入信息,模式窗口菜单(MenuName)对Main,MDI,mdihelp类型的窗口有效,设置该窗口的菜单名称外观属性外观:enabled,visible,titlebar,maxbox,minbox,resizeable,border,backcolor,mdiclientcolor,HscrollBar,VScrollBar等等位置:x,y,wid
7、th,height,pointer菜单: toolbarvisible,toolbaralignment,toolbarx,toolbarY,toolbarWidth,ToolbarHeight运行态属性(只读,描述性质)Control,menuid运行态属性bringtotop窗口 - 3.窗口支持的控件窗口支持以下常用标准控件1CommandButton命令按钮(cb_ok,cb_cancel)18HScrollBar水平滚动条2PictureButton图形按钮(pb_ok,pb_cancel)19VScrollBar垂直滚动条3CheckBox检查框(cbx_choice_1)20HT
8、rackBar 水平导轨4RadioButton收音机按钮(单选按钮)(rb_tes)21VTrackBar 垂直导轨5StaticText静态文本(st_notice)22HProgressBar 水平进度条6StaticHyperLink文本超级连接(shl_1)23VProgressBar 垂直进度条7Picture图形(p_1)24DropDownListBox下拉列表框(ddlb_8PictureHyperLink图形超级连接(phl_1)25DropDownPictureListBox下拉图形列表框(ddplb_9GroupBox分组框26ListBox列表框(lb_)10Line
9、线条27PictureListBox图形列表框11Oval椭圆28ListView列表视图12Rectangle矩形29TreeView树13RoundRectangle圆角矩形30Tab标签14SingleLineEdit单行编辑(sle_test)31DataWindow数据窗15EditMask掩码编辑(em_year)32Graph图表16MultiLineEdit多行编辑33OLEOLE2对象17RichTextEdit富文本编辑34UserObject用户自定义控件(对象)窗口 - 4.窗口常用事件事件是描述一个窗口或窗口中控件的行为的语法,只有在满足特定的条件时才会触发该事件,一
10、般一个事件反映了某种条件下的某一动作。也可以手工方式使系统满足这些条件从而触发这些事件。事件名称事件含义及用途Open当该窗口被用open()函数打开时触发该事件,一般作为该窗口进行初始化处理的入口Close当该窗口被关闭后消失前触发,可能被close()函数关闭,也可能是系统级关闭操作,一般用于收尾处理Resize当该窗口的大小调整时触发,一般用于调整界面控件的相对位置CloseQuery后于Close事件触发,当该窗口准备关闭前触发,可以替代close事件,并可以决定是否可以关闭Timer由窗口函数Timer()触发,到达指定秒数后触发该事件,一般用于控制。鼠标事件Clicked,doub
11、leclicked,mousedown,mousemove,mouseup,rbuttondown拖放事件Dragdrop,dragwithin,dragenter,dragleave键盘Key,systemkey其他DDE控制,Other,show,hide, ToolbarMoved,Help窗口 - 5.窗口常用函数 窗口函数一般用来控制窗口的行为,取得窗口信息,控制窗口的行为,触发特定事件等等函数名称函数含义及用途Open(),openSheet()系统级函数,用于打开某特定窗口,变参调用Close()系统级函数,用户关闭某窗口,变参调用PostEvent在当前脚本执行完毕后触发某事件
12、(后续某动作),变参TriggerEvent立刻触发某事件(嵌入某动作),变参Parentwindow()系统级函数,取该窗口或某对象的父窗口Timer(seconds)开始计时,如Timer(5,this)表示本窗口在5秒后触发Timer事件,变参Hide(),show()隐藏,显示,setredraw(false)大小及位置Move(x,y),resize(w,h),workspacewidth(),workspaceheight(),workspacex(),workspacey(),setposition鼠标Pointerx(),pointery()其他DDE控制系列函数窗口 - 6.
13、窗口控件操作(一)在界面设计中,往往用到非常多的控件放在同一窗口中,一般会有下列要求:1:对齐操作包括左、上、下、右,竖向、横向对齐等操作。以第一个选择的对象为基准2:大小操作包括宽度,高度:3:相对位置操作水平间距,竖向间距(三个以上对象选中时才有效)4:制表站(tab order)定义当运行时,用户按tab在各个控件上的移动顺序,一般以10进位如 10,20,301405:公用属性及特有属性指定字体、文本对齐方式、前景色、背景色、边框等:文本色(前景色)背景色边框窗口 - 7.窗口控件操作(二)其他按钮功能:保存剪切对象或文本复制对象或文本粘贴对象或文本撤销或重做上次的任意操作打开当前选中
14、对象的脚本属性面板切换到当前选中对象脚本工具按钮全选选中行及光标所在行标记为注释选中行及光标所在行标记为非注释查找和替换编译当前脚本粘贴各种语法或原型定义置于最前端置于最后端窗口 - 8.窗口控件的公用属性每个控件都有的属性共7个,这实际上是可视控件(Control)的最基本属性Name: 在窗口中唯一标记该控件的有效字符串Enabled :使某控件失效或使能,失效后用户无法操作,但是可以手工触发它的事件Visible:可视与否Foreground Color:前景色(按钮无效)BackgroundColor:背景色Tag:与系统无任何关系的一个公用属性,可以做任何事情Border:边框类型,
15、枚举值,有些控件指定了也无效是无效的。位置:在父对象中的定位(如x,y,width,height,x1,y1,x2,y2等,但属性名称不一致)关于颜色的算法:长整型(long) ,rgb颜色系统颜色值 = rgb(red,blue,green) = green * 65536 + blue * 256 + red如 红色( 255) = rgb(255,0,0) = 0 * 65536 + 0 * 256 + 255可以从下拉工具条中直接选取常用颜色及系统颜色窗口 - 9.窗口控件简介 命令按钮类型:Commandbuttom,PictureCommandButton 最常用属性:defaul
16、t : True时,当在窗口中的任意控件上按下回车键,就会触发它的clicked事件,同时边框加深;cancel : True时,当在窗口中的任意控件上按下Escape,就会触发它的clicked事件;text :现实的文本,如 “确定(&O)” 就是这样的:PictureCommandButton中PictureName,DisabledPictureName指定有效,失效时的图片,但因为不支持透明,故用的比较少。Htextalign,VtextAlign:制定水平,垂直方向的文本对齐方式事件:clicked:最主要事件,在用户按下并抬起鼠标后触发。其他事件: rbuttondown
17、,dragdrop,dragenter,dragwithin,dragleave,getfocus,lostfocus等等极少用,一般都在clicked事件中写脚本。函数:setfocus() :取得焦点,一般在别的控件中调用,如 cb_xxx.post setfocus()classname():取得名称,如 cb_test.classname() 就返回 “cb_test”hide(),show(),resize(),move()等较少用到。用途:到处都用,但一个界面上按钮不易太多,而且布置要合理,用图片按钮给用户比较直接的感觉,但是颜色就固定了。窗口 - 10.窗口控件简介 静态文本类型
18、:StaticText ,经常用,一般用做显示信息属性:text:显示的文本backcolor,textcolor,bordercolor:颜色属性(底色,前景色,边框色)事件:clicked,doubleclicked,极少对它写脚本函数:同 commandbutton,很少用窗口 - 11.窗口控件简介 可编辑类主要有:SingleLineEdit,MultiLineEdit,EditMask,RichTextEdit属性:SingleLineEdittext:可以修改,其他和statictext一致;MultiLineEdit全部SingleLineEdit属性和事件,可以折行EditM
19、ask和SingleLineEdit一致,可以制定输入的格式(mask属性),如日期型,则mask输入 yyyy-mm-ddRichTextEdit:类word文档处理控件,一般较少用到事件:modified:最常用事件,指明做了修改后执行什么操作。getfocus:取得焦点后执行的操作,一般用来选择文本,如: this.selecttext(1,len(this.text)其他事件很少用到函数:copy(),paste(),selecttext(),cut(),undo()等等,都是用于文本操作的。其他文本编辑控件都有这些函数,如sle_test.copy()表明将sle_test中选中的文
20、本复制到剪贴板。用途:除了数据窗以外的所有用户输入的口子都在这儿,因此用途非常广,结合数据窗,就可以完成用户输入部分的操作了。类型:HScrollBar,Vscrollbar:滚动条 HTrackBar,VTrackBar:导轨 HProgressBar,VProgressBar:进度条属性:minposition,maxposition,position:指定最小,最大值,当前值 如 hpb_1.position=87 /表明将进度条的位置移动到87处(不一定代表是 87%, 因为和maxposition有关)事件:TrackBar,ScrollBar moved:当移动按钮或导轨时触发函数
21、:TrackBar,ScrollBar setposition(),setrange(), OffsetPos():设置位置,范围,相对移动用途:这几个控件,一般Hprogressbar较常用,经常使用在需要进行常时间运行的程序中,显示当前运行的总体进度,以免用户以为死机而reset.(PB是单线程内核,即使可以通过yield()函数来进行后台处理,但一旦执行某运算,一般是很难终止的,而且此时cpu的占用会非常高,以至用户以为机器死了)窗口 - 12.窗口控件简介 显示及控制类窗口 - 13.窗口控件简介 下拉列表框类型:DropDownListBox(ddlb),DropDownPictur
22、eListBox(ddplb)属性:两者基本相似,ddplb多了一个图形显示及图形属性,图形处理函数而已,在实际使用中,基本上没有多少区别。Item:指定下拉列表中的项目,一般不能太多,否则就毫无意义。PictureName:按顺序指定图片名称,然后和item中的pictureindex对应Sorted:是否按item中的文本排序ShowList : =true,则永远显示下拉列表。一般很少用,本来就是想省地方,现在再占用一块地方,还不如用PictureListBox来的好。事件:selectionchanged当选中的对象改变时触发,一般都在这儿写脚本。可以通过事件的参数index来得到当前
23、选中的是哪一项。函数:DirList():可以直接将某目录下的文件名全部显示出来,配合Treeview,可以自己做一个目录及文件树DirSelect():取出由dirlist()生成的列表中当前选中的文件名或目录名;Additem(),Insertitem(),DeleteItem()增加,插入,删除 itemSelectItem():手工指定选中的itemTotalItems():一共有多少个itemReset():清除所有itemFindItem():查找符合条件的item用途:用在唯一需要确定某类型的时候,选项不要超过20个,否则很容易找不到,而且,20个图片堆在一起,很难确定那个是你真
24、正需要选择的。窗口 - 14.窗口控件简介 列表类类型:ListBox,PictureListBox属性、事件、函数:与下拉列表类基本类似,甚至函数、事件、都差不多,不过列表类支持多选因此也就多了有关于多选的其他函数,常用的有3个:state(),判断某个item是否为选中,setstate():设置某项的选中状态TotalSelected():一共选中了多少个用途:一般作为需要用户可以有多个选择余地的地方,但是item不能太多,5个里面挑一个好找,50个里面的话,只有眼花 _窗口 - 14.窗口控件简介 视图类类型:ListView,TreeView这是两个仅次于datawindow的复杂程
25、度和好用程度的两个控件,由于有比较丰富的属性和函数可调用,因此可以做出很多效果。属性:ListView : LargetPicture属性主要是用来显示为 LargeIcon!类型而设的。其他属性同PictureListBox但是可以指定多个列,而不是单个item。 TreeView一个item可以有3个图片:PictureIndex,selectedPictureIndex,StatePictureIndex每个Item不是单一的文本,而是特别的TreeViewItem,有自己的子属性如 data,label,pictureindex,selectedpictureindex,level等等
26、事件: SelectionChanged:选中项改变 RbuttonDown:鼠标右键,一般用来做弹出菜单:menu_xxx.popup(xpos,ypos)函数:图片类:addpicture(),deletepicture():主要用于动态形成视图 ListView:add,insert,delete等等,如 TreeView:AddStatePicture(),DeleteStatePicture():处理状态图片AddItem(),DeleteImte(),SetItem:增加,删除,修改某节点(Item)InsertItem():指定位置插入某ItemInsertItemLast():
27、在某节点下级最后增加下层ItemInsertItemFirst():在某节点下级最前插入下层ItemInsertItemSort():在某节点下级中按排序插入下层 ItemFindItem():相对查找,如同层、上层、下层Expanditem(),CollapseItem():展开、折叠指定节点SelectItem(),SetFirstVisible()选中某节点,使某节点第一个可见应用:非常广泛窗口 - 15.窗口控件简介 其他其它控件:图形控件,图表控件:Line,Oval,Rectangle,RoundRectangle,他们总是处于最底层而不可能覆盖在其他控件的上方,没有事件,一般仅做
28、装饰用。运行时修改它们的属性就可以实现各种效果。图表控件:Graph用来表示系列数据。一个图表控件可以有一个或多个数据系列。函数:AddCategory,将一个Category添加到控件中。AddSeries,在一个已经存在的Category中添加一个数据系列并返回一个值。AddData和InsertData,利用AddSeries的返回值在一个已经存在的数据系列中添加一个数据项。另外用户还可以直接在数据窗口中利用Graph风格来显示图形化的数据。菜单 -1菜单:Menu 应用程序中一般都有菜单,原因很简单。因为如果每项命令都有按钮完成,就会因为按钮过多而使得用户在使用起来找不到头绪。而下拉式
29、菜单不但具有占用空间小的优点,而且层次分明,每项功能都有相应的文字提示。所以对于一个复杂的应用程序来说,菜单绝对是必不可少的。PowerBuilder提供了一个菜单画板。用户可在菜单画板中定义自己需要的菜单项和每个菜单项相应的脚本。创建:文件-新建-对象-菜单即可进入菜单画板,或文件-继承,选择祖先菜单,然后也进入菜单画板。菜单 2属性:每个菜单有若干级联的菜单项构成,每项成为一个 menu item,每个item都具有菜单的所有属性,包括:普通属性:name:名称,如果从祖先继承,则不能修改text:菜单文字,如“文件(&F)”Microhelp:显示在MDI Help 框架窗口的状
30、态栏中的文字Visible,Enable:可见,使能shortcut:快捷键,如 CTRL + S,有下级菜单的菜单没有快捷键工具条属性:ToolbarItemText:工具条上的文字;ToolbarItemName:工具条图片;ToolbarItemDownName:工具条下压图片;ToolbarItemSpace:工具条前面的空格;ToolbarItemOrder:工具条顺序;ToolbarItemIndex:工具条所在的Dock顺序窗口 小结1 窗口是程序的核心界面,应用通过各个窗口,利用窗口中的各种控件和用户交互,完成数据的处理工作;2 一般应用都以MDI Frame作为框架程序,3
31、Sheet菜单从Frame菜单继承或没有菜单,保证框架界面的统一和完整;4 界面设计应遵循一定的原则,不是想怎么做就怎么做,必须考虑协同开发问题,用以保证整体性和一致性。5 脚本的编写、函数、事件的命名都必须考虑规范性的问题,从一开始养成良好的命名规范及编写习惯,对己对人都极有好处。三、数据窗口DatawindowDatawindow - 1.基础.1 数据窗口是用于查询、显示和维护来自关系数据库或其他数据源(如Excel文件或其他文件)数据的对象。在数据窗口中可以定义数据的显示格式、显示风格和其他数据属性,使数据对用户更加直观和更有意义。 数据窗口最初使用在PB的C/S结构中,为这种模式提供
32、了强有力的数据查询和数据维护功能。随着PB及其相关技术和产品的发展,PB已经不是单一的C/S应用开发工具,已经可以适应Web开发等各种需要。Datawindow - 1.基础.2nPowerBuilder数据窗口,作为在应用程序中的一个控件;nHTML数据窗口,用于web应用的瘦客户端数据窗口,提供了大部分的PB数据窗的数据维护和编程等功能;n数据窗口的ActiveX Web控件,在Powersite内部建立Web页面时使用的ActiveX控件;nJava版本的数据窗口:在PowerJ中建立Java应用使用的JavaBeans组件;nDesign-time控件,Powersite使用;n数据窗
33、口插件:在浏览器中显示PowerSoft PSR报表。Datawindow - 2.显示风格和数据源显示风格(Style)用于定义数据窗口的显示风格和外部特征。Tabular(列表):记录横置于页面,标题在所有列的顶端,可以多行数据;Freeform(自由格式):每列左侧有一个标签,一屏只显示一条记录;Grid(网格):如Excel的sheet格式;Label(标签):每页有几个标签,每个标签一行;N-UP(分栏):并列显示;Group(分组):在表头下按列分组的格式;Composite(组合):嵌套格式Graph(图表):数据的图形显示;Crosstab(交叉):行列格式的数据表示,列可动态
34、计算;RichText:多信息文本,文本段落中可以嵌入列;Ole:连接或嵌入到数据窗口的OLE对象于获取的数据关联。数据源(Data Source)定义数据窗口中数据的来源:Quick Select:来源于sql数据库的多表;SQL Select:定义完整的sql语法;Query:通过查询面板定义的查询对象作为数据源;Stored procedure:以存储过程作为数据源;External:通过文件输入或程序代码生成的数据。Datawindow - 3.如何使用数据窗.1使用数据窗主要包括以下两个步骤:一、在datawindow painter或datawindow Builder中创建或编辑
35、一个数据窗口对象;二、在开发环境中,将一个数据窗口控件或组件放在窗口或web页面中,并把数据窗口控件和数据窗口对象关联起来(指定数据窗的dataobject属性) 通过数据窗口控件,应用程序与在数据窗口画板中定义的数据窗口对象进行通讯,通过编写程序控制数据窗口控件和控件所包含的数据窗口对象。程序代码可以修改、查询数据,改变数据的表现形式、处理错误、共享数据窗口控件之间的数据等等。Datawindow - 4.如何使用数据窗.2关联:数据窗控件是一个对象容器。在窗口或其他对象中,指定某数据窗控件的dataobject到某存在的数据窗对象,就可以在窗口中使用该数据窗对象了。命名:dw前缀,如dw_
36、employee对象:d_employee引用:w_xxx.dw_employeeDatawindow - 4.数据访问数据访问如果某数据窗需要和数据库建立联系,则该数据窗必须指定到某事务对象,因此一般通过以下步骤来访问:1、创建并连接事务对象;2、为数据窗设置事务对象;3、获取、修改数据,保存到数据库;4、断开数据库连接其中,1,4一般在Application中的open和close事件中处理。2,3示例:dw_control.settransobject(sqlca);/连接事务dw_control.retrieve() /检索数据 .处理数据/更新数据if dw_control.upda
37、te(true,false) = 1 thencommit using sqlca; /提交数据dw_control.resetupdate()elserollback using sqlca; /回滚最近的提交end if加载外部数据:importClipboard,importfile,importstring函数提供了获取外部数据的方式Datawindow - 5.数据维护数据维护一个数据窗有三个缓冲区用来存放用户的数据:主缓冲区(Primary!):保存未被修改或删除或过滤出的数据;过滤缓冲区(Filted!):被过滤出的数据;删除缓冲区(Deleted!):被用户删除的数据PB通过这
38、三个缓冲区保留用户所有对检索出来的数据的操作,然后统一处理为与数据库打交道的sql语法,如insert,delete,update,实际上就是完成最终的这三种操作。数据存取提取:GetItemDate,GetitemDateTime,GetItemDecimal,GetItemNumber,GetItemString,GetItemTime,GetText写入:SetItemdw_control.getitemString(20,emp_name)即得到Primary!缓冲区中第20行的emp_name列的值。setitem(20,emp_name,刘建刚)即设置Primary!缓冲区中第20
39、行的emp_name为指定值。也可以用数据窗控件的对象属性来存取数据,如上述语法可以对应为:dw_control.object.emp_name20dw_control.object.emp_name20 = 刘建刚其他函数常用:Accepttext,DeleteRow,Filter,Getrow,InsertRow,Reset,RetrieveRowsCopy,RowsMove,RowsDiscard,RowCount,ModifiedCount,DeletedCount,FiltedCountScrollToRow,ScrollPriorPage,ScrollNextPage,Scroll
40、FirstPage,ScrollLastPageSelectRow,GetItemStatus,SetItemStatus ,SetFilter,SetSort,FindShareData,ShareDataOff,SaveAs,SaveAsAsciiUpdate,ResetUpdateDatawindow - 6.对象属性数据窗口对象属性主要用来存储控制数据窗口行为的有关信息,这些信息不是数据窗口控件的属性,而是在数据窗口控件(容器)中存在的数据窗口对象的属性。利用Describe和Modify函数可以用来提取和修改数据窗口对象属性。如:dw_control.describe(emp_nam
41、e.border)即取得emp_name的边框属性或 dw_control.object.emp_name.border 取出,返回:any类型dw_control.modify(emp_name.border=“2”)即将该边框设为0类型(无边框)PowerBuilder的数据窗对象提供了非常多,相当全面的属性描述,这些对象的有些属性可以修改,有些是只读的,如某数据列的编辑格式,一般制作完成后,在数据窗口控件中就不能再修改而只能取出他的具体编辑方式。理解这些属性并充分运用好这些属性,可以极大地扩展编程的灵活性和可扩展性,这也是数据窗对象学习的难点,一般难以在短时间内掌握,需要不断的磨练。Da
42、tawindow - 7.数据窗中的错误二种类型(控件中存在)1、DBError事件,在数据窗控件retrieve,update时出错时触发,描述该数据窗对象连接的事务返回的具体信息,如update时报告一致性错误,列错误等等,连接错误,共享错误等等。2、ItemError事件:当某列编辑不符合检验规则(validation)时触发该事件四、编程PowerScriptPowerScript 编程 任何程序的编制归根结底都需要由代码完成,虽然可视化编程为我们提供了极大的方便。但是如果没有完善的代码,程序就不可能有完善的功能。PowerScript是PowerBuilder的编程语言。我们在学习时
43、可能已经发现,PowerScript语言与传统的Basic语言有很多相似之处。PowerScript是一种自由格式的语言,在编写程序代码时,编译器忽略它的空格、缩进、空行等,在这方面它又与C语言有几分相近。在本章中,我们将介绍PowerScrpit的数据类型,变量及作用范围,程序结构,以及一些常用函数和语句,尤其是一些和数据库有关的操作,将是本章内容的重点。PowerScript -变量的类型和作用域 变量是指在程序运行过程中可以改变的量,变量在程序运行的过程中被赋值,在执行各种操作的时候,变量的值被不断传递,以实现程序员设定的各种操作。可以说,没有变量就没有程序可言,而灵活使用各种不同的变量
44、将使程序设计更为简洁、高效、安全,条理性也会更强。在变量声明时只需注意四点,一是必须以字母开头;二是标识符不能使用保留字;三是标识符长度必须小于40;各字符之间不允许有空格。另外还要注意连字符,因为连字符容易和减号混淆。 在Power-Builder中,所有变量都必须事先声明才能使用,而且类型固定,一旦声明之后就不能变化。变量的作用域是指某一变量的使用范围。早期的BASIC语言中,所有的变量都是全局变量,这样做有很大的危害,主要是因为过多的全局变量会引起程序的崩溃,同时也会限制为函数取名的个数。在PowerBuilder中,程序的变量分为四个层次,局部变量、实例变量、共享变量和全局变量,用户可
45、以充分利用局部变量和实例变量以使程序变的简洁和高效类型前缀说明示例局部变量Locall仅在某脚本范围内有效li_index实例变量Instancei依赖于某对象而存在,在一个对象范围内,并可以定义此变量对外部对象而言的存取权限,如:限定前缀Private和Protected,默认为Public, 可以再细化为 PrivateWrite、PrivateReadProtectedWrite ,ProtectedReadPUBLIC:is_user_namePRIVATE:is_my_name共享变量Shareds共享变量与实例变量相似,但有一点区别,那就是共享变量的值不因对象的关闭而改变。声明的方
46、法是Declare|Shared Variables。ss_window_type全局变量Globalg用户可以在任何地方访问它gu_ext_functionPowerScript 数组及使用 数组是任何一种程序化语言都必须有的一种数据结构,与集合和枚举类型的数据结构不同,它是一系列有序数据的集合。数组中的每一个元素都属于相同的数据类型,并且每一个元素都有相同数组名和不同的数组下标。数组的类型有两种:一种是一维数组,另一种是多维数组。多维数组必须有一个固定的大小,而一维数组的下标可以是固定的,也可以是可变的。用户在声明一个数组时首先必须声明的是一个数组的类型,然后是数组名,数组下标。 一维数组
47、定义: string ls_my_array_1 /不定长数组 string ls_my_array_2 10 / 从 ls_my_array1 到 ls_my_array10 共10个单元 string ls_my_array_3 5 to 24 / 从 ls_my_array5 到 ls_my_array 24 共10个单元 多维数组: string ls_my_2d_array1100,200 /定义一个 100 * 200 的数组,共20000个单元 string ls_my_2d_array21-100 , -2 to 97 / 定义一个 100 * 100 的数组。 数组及数组间的
48、操作: 上界及下界: UpperBound(ls_my_array_1) ,LowerBound(ls_my_array_3) 数组是否一致 =, 数组变量类型可以是任意类型,包括窗口,菜单,自定义对象,控件等等。 PowerScript 结构使用 一个结构是一个或几个相关变量的集合,它们有着相同或不同的数据类型,但都在同一个名字下。在有些语言中,例如Pascal和COBOL语言,集合又被叫做记录。集合允许将一些相关的数据项整合为一个整体而不是彼此独立。比如说,如果将用户的ID,地址,等级,照片组合为一个叫做user_struct的结构,就可以将这个变量的集合作为一个统一的user_struc
49、t结构来使用 结构按存取范围分为2类:全局结构:作为一个独立对象存放在 PBL 中,可以直接申明并引用。如通过winzard创建一个Structure对象,然后在脚本中就可以使用了。譬如已经做好了一个结构叫做 st_user_structure,则程序中应当如下使用: 一、申明一个变量(上述四种变量中的一种) 二、指定这个变量的类型为 st_user_structure 三、引用这个变量。譬如某事件中:st_user_structure lst_user_structurels_user_structure.user_id = asdfasdfls_user_structure.user_no
50、 = 20对象结构:依赖某对象而存在,只能在这个对象内存取,如某窗口内定义一个结构。在View -structure List中可以看到所有在这个对象中的结构,双击该结构可以进行详细定义。使用方式和全局结构一致对象内部的结构如果申明为Instance变量,则必需加入必需加入PrivatePrivate前缀前缀。PowerScript 常用程序结构IF 判断: 1if then else.end if 2 if thenelseif thenelseif thenelseend if 3 if then For 循环:For 起点 to 终点 Step 步长 . Next / 或 End For
51、如:For li_row = 1 to dw_1.rowcount()End forFor li_row = dw_1.rowcount() to 1 step 1dw_1.deleterow(li_Row)End forDo 循环/ 方式1DO UNTIL conditionstatementblockLOOP/方式2DO WHILE conditionstatementblockLOOP/ 方式3DOstatementblockLOOP UNTIL condition/ 方式4DOstatementblockLOOP WHILE conditionChoose Case CHOOSE CA
52、SE testexpressionCASE expressionlist statementblock CASE expressionlist statementblock . . .CASE expressionlist statementblock CASE ELSE statementblock END CHOOSEGOTOGOTO label.:labelPowerScript 代名词nThis指代当前Script所在的窗口、 用户对象、菜单、应用程序或控件nParent指代包含当前对象的对象nSuper指代当前类的直系父辈。PowerScript 常用函数和语句(一) - Messa
53、geboxMessageBox显示消息提示框,并得到用户的响应原型:MessageBox ( title, text , icon , button , default )中内容表示可选参数Title :标题Text : 文本,需要显示给用户看的消息,可以是 字符串,数字,逻辑型;Icon : 消息框中的图标,枚举类型,默认是 Information!,可以是如下枚举类型值:Information! (默认)StopSign! (错误终止)Exclamation! (惊叹号)Question! (问题)None! (没有图标)Button: 显示的按钮,枚举类型,默认是 确定ok! (默认),
54、确认按钮okcancel! - 确认 和 取消 按钮yesno! 是 和 否 按钮YesNoCancel 是 否 取消 按钮RetryCancel 重试 , 取消按钮AbortRetryIgnore 放弃,重试,忽略 按钮Default : 上述按钮中那个是默认的返回: 对应按钮的位置,如指定按钮为 okcancel!,用户按了 确认,则返回1,按了放弃 则返回2示例:Messagebox(Title,Hello,this is a test,Question!,Okcancel!,2)PowerScript 常用函数和语句(二) - IS函数系IS 族函数和转换函数以Is开头的函数有很多,例
55、如IsNumber、IsDate、IsTime等等,它们用来判断一个字符串是否符合某种数据类型的格式,它的返回值是一个布尔类型的值,当字符串符合类型要求时,返回值为True,否则返回值为False。诸如此类的函数统称为类型判断函数。之所以要用到这些函数是因为当我们用文本框输入数据时,需要用类型转换函数将输入的字符串转化为我们所需要的数据类型,如果该字符串与所要类型不匹配,转化时就会出现异常错误。比较好的解决方法是先用类型判断函数来检验输入的字符串,然后再进行类型转化。类型转化函数的作用是将某个字符串转化为另一种类型的数据格式。常见的类型转化函数有Integer(将字符串转化为整形),Long(
56、将字符串转化为长整形),Real(将字符串转化为实形),Double(将字符串转化为双精度形),Dec(将字符串转化为十进制数)。另外有String函数将各种不同的数据类型转化为字符串,并可以规定转化的格式。PowerScript 常用函数和语句(三) - 事件触发Trigger ,Post当使用Trigger来激活一个函数或事件时,它被立即执行。它的返回值可以在Script中使用。当用户使用Post来激活一个函数或事件时,它被加入到对象队列中并且按顺序执行。在大多数情况下,它在当前Script完成后被执行。但是如果在这段时间中其它系统事件发生了,那它可能在队列中被排到其它Script之后。它
57、的返回值不能被Script使用。因为Post使得返回值对调用者不可见,所以可以把它想象成将函数或事件调入一种状态。一般情况下,如果需要将所在Script执行完毕后再调用其它函数或事件,则应该使用Post而不是Trigger。TriggerEvent和PostEvent是PowerBuilder中的事件函数,被用来触发某一个特定事件。尽管它们的功能已经被Post和Trigger所取代并得到加强。但为了向后兼容,它们仍然被保留了下来。但是你不能在调用事件时传递参数。必须将数据通过消息对象传递给事件的数据。示例带参数的执行某个事件,并且从消息对象中反馈参数值。首先带参数的执行该事件:w_xxx.po
58、stevent(ue_myevent,0,this is a test)在窗口w_xxx的 ue_myevent 事件中接受参数:string ls_passed_stringls_passed_string = Message.stringparmPowerScript 常用函数和语句(三) -文件操作文件操作在程序设计中是不可缺少的。可以用文件函数来打开一个文本或Blob文件并对它进行读写操作。可以用流模式(Stream!) 或行(Line!) 模式打开一个文件。在行模式中,文件每次被一行行的读入,每行之间被回车符和换行符隔开,最后以EOF(文件结束)为结束标志。在流模式中,文件被整个读入
59、,并且换行符和回车符不被写入文件。用户一般用流模式将整个文件读入到MultilineEditor中,再整个写到文件中去。当打开文件时,PowerBuilder分给打开的文件一个独特的整数并且将指针放在文件中你所规定的地方。你可以用这个整数来标识文件以便读写或关闭文件。文件指针规定了下一次文件读写的起始位置并且在每次读写完成后由PowerBuilder自动更改。文件函数如下:FileClose : 关闭一个打开的文件FileDelete : 删除一个文件FileExists : 判断文件或目录是否存在FileLength : 得到文件长度FileOpen : 打开一个文件,如果不存在,则创建Fi
60、leWrite : 写入一个文件FileRead : 从某打开的文件中读取FileSeek : 移动文件中读写位置GetFileOpenName : 弹出标准文件打开对话框,得到一个需要打开的文件名;GetFileSaveName : 弹出标准文件保存对话况,得到一个需要保存的文件名;PowerScript 常用函数和语句(三) 其他RGB RGB 函数函数RGB (红,绿,兰) ,RGB(R,G,B)R : 0-255 , 红色G : 0-255 , 绿色B : 0-255 , 蓝色返回一个颜色值,长整形 B * 65526 + G * 256 + R如 rgb(255,0,0 ) = 255,红色常用颜色
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 防控期间免疫规划先进事迹(10篇)
- 医用产品购销协议(35篇)
- 食堂管理整改报告(3篇)
- 建筑工程一切保险条款(35篇)
- 文明校园创建的工作总结
- 计划生育药具工作计划
- DB12 3005-2017 建筑类涂料与胶粘剂挥发性有机化合物含量限值标准
- 江苏省淮安市(2024年-2025年小学五年级语文)统编版综合练习(上学期)试卷及答案
- 湖南省怀化市(2024年-2025年小学五年级语文)统编版专题练习(下学期)试卷及答案
- 2024年汽车内外饰件项目投资申请报告代可行性研究报告
- 2024年国家公务员考试行测真题卷行政执法答案和解析
- 《驼鹿消防员的一天》课件
- 小学思政课《爱国主义教育》
- 管线工程测量施工方案(雨污分流管网工程)
- 上海链家房地产经纪公司人员激励机制存在的问题与对策分析
- 医院基本建设存在的问题及对策
- 农机修理工培训大纲
- 钻井操作简答题资料
- 临床护理PBL教学(PPT课件)(精选干货)
- 新视野第三册网测习题和答案资料
- 新时代企业战略管理制度转变与创新
评论
0/150
提交评论