PB11第11章自定义函数和结构(精)

合集下载

PowerBuilder 10.5 11新功能概述(PDF)

PowerBuilder 10.5 11新功能概述(PDF)
AutoPostBack
PowerBuilder Web Forms
提高性能的使用建议
尽量使用只读的 DataWindows 使用Master-detail DataWindow
Master DataWindow is readonly Script callback
尽量不使用 Timer事件 尽量不使用 Yield 方法 不要同时打开很多 response windows 使用 Web style
PowerBuilder 10.5/11 新功能概述
Harry Zhang Senior Software Engineer, Sybase Asia Development Center.
议程
PowerBuilder 10.5新功能 PowerBuilder 11.0新功能 展望PowerBuilder的发展 Q&A
支持
Sybase ASE Oracle MS SQL Server
DBI 重构
DBI(Database Interface)->DSI(DataSource Interface)
WEBSERVICES增强
进一步增强了 Web Services 支持
更好的数据类型支持(Document/Literal/…) 进一步提高了和 WebService的交互性
不常做的工作 可能完成
通过PB与.NET的互操作性来完成
PowerBuilder for .NET概述
使用PowerBuilder 开发 .NET应用程序
编译PowerBuilder代码成为.NET assemblies 全新的.NET系统运行时库 (Managed PB Runtime)
基于.NET API,使用C#和Managed C++重新实现了PB .NET运行 时库 增强语言特性, 系统类和系统函数 应用程序类型支持

pb的基本函数

pb的基本函数

pb的基本函数1、Open 两种格式:一个是带参数的还有一个是不带参数的不带参数的是不确定具体的数据类型的2、Opensheet() opensheet(指定窗口名,{指定要打开的窗口的类型},指定要放置的工作表的框架窗口名,所打开的窗口是在第几个菜单下生产默认值为倒数第二个,打开方式arrangeopen。

) 打开方式分为三种:cascade、layered、original。

Cascade:向右下方偏移。

默认值如果缺少的话Layered:最大化Original:与cascade相同。

只是打开的时候与原来的一样大3、Close4、Setfocus() 将焦点设置到指定控件上Objectname.setfocus() 如果objectname是列表框的话则控件将指向列表框的第一列表项上。

5、SelectText()返回该控件所选的文本。

返回值为long Singlelineeditname.selecttext(start,length)6、GetColumn()和GetColumnname()两个都没有返回值:第一个是返回当前列的列好,第二个则是返回当前列名7、Update()8、DeleteRow()Dwcontrol.deleteRow(row) row表示要删除的行数,当该值为0时则表示删除该行1、insert row 在数据窗口控件指定行前面插入一行dwcontrol.insertrow(row) scrolltorow():使新插入的行成为当前行。

2、ScrollT oRow() 使用方法:rtename .scrolltorow(row)Rtename超文本编辑框的名称。

如果row的值为0的话则就回滚到第一行,如果row的值大于超文本的行数则回滚到最后一行3、selectedColumn()返回插入点后第一个字符的位置rtename.selectedcolumn()4、setcloumn5、print() 以当前字体在打开的打印作业中打印一行或多行文本print(printjobnumber,{tabl},string{,tab2})tab1为文本开始打印的位置,以千分之一英寸为单位。

PB教程

PB教程

POWERBUILDER教程第一章概述1.1特点1.事件驱动在事件驱动方式中,程序的运行没有固定的流程,程序的代码也是为各种可能发生的事件编写,当程序开始运行后,它可以接受来自系统、用户或其他应用程序触发的事件,然后执行事件代码。

建立窗口、控件和其他应用部件时都含有一组预定义的事件。

例如:clicked(单击),用户也可以定义自己的事件。

2.面向对象Windows应用程序中常见的窗口、菜单、控件在powerbuilder中都是一个个对象。

同时,也可以创建自己的用户对象。

每个对象都有自身的特征和行为(属性、事件和函数)。

Powerbuilder提供了基础类库PFC,它为应用程序开发提供了许多可重用的预定义类和对象,利用基本类库PFC可以快速开发高质量、重用好的应用程序。

3.Powerscript语言Powerbuilder中,所有的处理逻辑都是用powerscript语言编写,powerscript是PowerBuilder是专用语言。

4.强大的数据库窗口对象数据窗口对象是PowerBuilder中的一种对象类型,是专门为访问后台的数据库服务的,在数据窗口对象中可以定义数据的来源和数据的显示风格,这样在应用程序就可以把精力完全放在程序的流程控制上,而不用关心具体数据的来源。

如果需要使用数据库中不同的数据,也只要对数据窗口对象进行修改就可以。

5.其他特点支持internet、支持分布式应用、支持多平台、支持大多数关系型数据库(Sybase、MS SQLSERVER、ORACLE等等以及ODBC等其他数据源)等等1.2安装略注:升级至7.0111.3开发环境IDE1 菜单栏图标第一章库文件工具栏图标第二章对象编辑工具栏图标第三章库文件编辑区第四章对象编辑区第五章Datawindow编辑器1.4 预备知识一个PowerBuilder应用程序一般由若干个窗口组成,每个窗口有若干个控件(如按钮、菜单、文本等),每个对象或控件都有若干个事件(如按钮的单击或双击等),每个事件将对应一段程序。

PB编程规范

PB编程规范

编程规范(PB)1简介1.1简介这个文档描述了用于编写稳定、可靠的PowerBuilder应用程序的一些标准、约定和准则。

他们基于合理的,经过证实的一些使代码容易理解、维护和增强的软件工程的原则。

另外,遵循这些标准,你作为一个PowerBuilder程序员的生产力将有一个显著的提高。

一些经验证明,花时间在项目的开始写出高质量的代码,可以使在后来的开发过程中容易修改它,从而事半功倍。

最后,遵循这一系列编码规范,可以使一个开发团队更好地保持一致性,最终必将极大地提高团队的生产力。

1.2最初的准则和最终的准则当你无法找到一些你需要的原则或准则时,或者它们很明显地不适用,或者其它的一些情况下,请使用常识,按照一些基本的原理去作。

这个原则凌驾于其他原则。

2命名规范2.1一般性约定1.使用英文或汉语拼音的全称去准确地描述各种对象、变量例如,ls_UserName (用户名) ,ldc_GrandTotal(总计)等等。

尽管x1,y1这样的名称很容易拼写,因为它们很短,但是他们不可能明确地提示名称的含义,将导致代码难以理解、维护和改进。

2.使用大小写混合的方式命名3.以合适的方式使用缩写例如ll_RownNmber,简写为ll_RowNum是可以理解的,但是li_ReturnCode简写为li_rc就不一定被别人看懂,所以应该以尽量保守的态度使用缩写,在更多的时候使用全称,或者建立常用缩写的对照表。

4.避免太长的名称,尽量限制在15个字母以内长名称虽然很容易懂,但特别长将导致拼写时经常出错。

5.不要在第一个字母和最后一个字母使用下划线6.保持命名的一致性。

相关的东西应给以相关的名字,以说明他们的关系和差异2.2具体约定2.2.1对象命名规范<前缀>_名称注:名称为英文,新建对象必须加注释(菜单对象可例外)。

一般情况下,菜单对象的名称与其所属窗口的名称一致。

例子:w_master , m_master , d_cig_cdu_tvs is the TreeView visual user objectu_dw is the DataWindow visual user objectn_cst_dwsrv is the custom class user object for DataWindow servicesn_tr is the transaction standard class user object and is in the extension level2.2.2变量范围命名规范<范围><数据类型>_变量名范围:对于标准数据类型:例子:as_unitcode 表示事件或函数的输入参数,string类型idc_val 表示实例变量,decimal 类型li_row 表示局部变量,integer 类型gd_firstday 表示全局变量,date类型对于常用参照数据类型(reference variables):例子:datastore lds_unitDataWindowChild ldwc_cigwindow lw_code注:1) 尽量避免使用全局变量。

PB的小技巧

PB的小技巧

PB的小技巧1.如何使DataWindow中的数据只能追加新记录而不能修改。

利用Column 的Protect 属性可以很方便的做到这一点,方法如下:将每一列的Protect 属性设置为:If( IsRowNew(), 0, 1) )在PowerScript 中可以动态修改Protect 属性:dw_1.Modify("column_name_here.Protect='1~tIf(IsRowNew(),0,1)'")2. 允许从空的非字符字段跳离string ss = this.dwDescribe(this.GetColumnName()+".coltype")//s = this.dwDescribe("#"+String(this.GetColumn())+".coltype")CHOOSE CASE sCASE "number"IF Trim(this.GetText()) = "" THENint null_numSetNull(null_num)this.SetItem(this.GetRow(),this.GetColumn(),null_num)this.SetActionCode(3)END IFCASE "date"IF Trim(this.GetText()) = "" THENdate null_dateSetNull(null_date)this.SetItem(this.GetRow(),this.GetColumn(),null_date)this.SetActionCode(3)END IFCASE "time"IF Trim(this.GetText()) = "" THENtime null_timeSetNull(null_time)this.SetItem(this.GetRow(),this.GetColumn(),null_time)this.SetActionCode(3)END IFCASE "datetime"IF Trim(this.GetText()) = "" THENdate null_datetimeSetNull(null_datetime)this.SetItem(this.GetRow(),this.GetColumn(),null_datetime)this.SetActionCode(3)END IFEND CHOOSE3. 当我们为Datawindow的每一行显示行号时可以简单的放一个表达式为GetRow() -- 计算列。

PB日常学习笔记

PB日常学习笔记

PB笔记1、Datastore用法方法一:参照已存的DWstring ls_yhzllong ll_row,ll_row_countdatastore ds_yhzl//声明Datastore变量ds_yhzl = create datastore//将Datastore实例化ds_yhzl.dataobject = "dw_yhzl"//为datastore分配数据窗口对象ds_yhzl.settransobject(sqlca)//指定连接实例ds_yhzl.retrieve()//提取数据destroy ds_yhzl -----释放datastore方法二:自定义sqla.调用自定义函数gf_create_ds:datastore ds4s_cmdtxt=' select distinct pk_org from nc_zz_htdd_head where vdef19 ="'+is_dhhbm+'" and pk_org <>"0001A310000000002TDE" and LEN(pk_org)>3'ds4=uf_create_ds(ds4,s_cmdtxt)if ds4.rowcount()=0 thenmessagebox('提示:','因子公司客户未下单,所以不需操作此功能!')return 0end ifdestroy ds4b.直接定义string ls_syntaxstring ls_err//保存错误string ls_style = 'style(type=grid)'//数据窗口风格,具体查看SyntaxFromSQL函数的pb帮助string s_sqls_sql=’select….’Datastore dsls_syntax = SQLCA.SyntaxFromSQL( s_sql , ls_style , ls_err )if ls_err <> '' thenmessagebox( '出错' , '创建DATAStore出错!' + ls_err )return 0elseds = create datastoreds.create( ls_syntax , ls_err )if ls_err <> '' thenmessagebox( '出错','初始化DATAStore出错!' + ls_err )return 0elseds.SetTransObject( sqlca )ds.retrieve()end ifend if2.自动触发button按钮cb_1.TriggerEvent("Clicked")cb_1是你要触发的空间的名字,Clicked是你要触发那个事件窗口对象名称.控件名称.triggerevent(事件名称)关于事件名称:1.如果事件名称是控件自带的,如按钮的Clicked事件triggerevent(Clicked!)2.如果事件名称是用户为控件定义的,如你自己定义了一个abc事件triggerevent("abc")3.tab切换页时判断是否有数据未保存Tab的selectionchanging事件if dw_1.ModifiedCount() > 0 or dw_1.DeletedCount() > 0 thenmessagebox('提示','尚有操作未保存,请先进行保存操作!',Exclamation!)return 1end ifModifiedCount()和DeletedCount()就是用来检测有没有修改行和被删除行的。

《Rubu基础教程第五版》第十一章笔记块

《Rubu基础教程第五版》第⼗⼀章笔记块块(block)就是在调⽤⽅法时能与参数⼀期传递的多个处理的集合。

对象.⽅法名(参数列表) do |块变量|希望循环的处理end或者对象.⽅法名(参数列表) do { |块变量| 希望循环的处理}块的开头是块变量,块变量就是在执⾏块时,从⽅法传进来的参数12 3 4 5 6 7 8 9 10 11 12 13>> ary =("a".."c").to_a=> ["a", "b", "c"]>> ary.each{|obj| p obj}"a""b""c"=> ["a", "b", "c"]>> ary.each_with_index{|obj, index| p [obj, index]} ["a", 0]["b", 1]["c", 2]=> ["a", "b", "c"]>>块的使⽤⽅法在ruby中,我们常常使⽤块来实现循环。

在接收块的⽅法中,实现了循环处理的⽅法称为迭代器(iterator)。

each⽅法就是⼀个典型的迭代器,相当于Python中的iter1 2 3 4>> hash.each {|name| p name} [:a, "b"]=> {:a=>"b"}>>下⾯演⽰了each对hash的操作1 2 3 4 5 6 7sum=0outcome ={"参加费"=>1000, "挂号费"=>1000, "联欢费"=>4000} outcome.each do |pair|sum+=pair[1]endputs "合计: #{sum}"1 2 3 4 5 6 7sum=0outcome ={"参加费"=>1000, "挂号费"=>1000, "联欢费"=>4000} outcome.each do |item, price|sum+=priceendputs "合计: #{sum}"逐⾏读取⽂件1file=File.open("file_each.rb")23 4 5 6file.each_line do |line| print lineendfile.close隐藏常规处理这个有点像Python中的 with open as1 2 3 4 5File.open("file_open.rb") do |file| # 类型Python中的with open file.each_line do |line|print lineendend这个代码普通写法如下1 2 3 4 5 6 7 8file=File.open("file_open_no_block.rb") beginfile.each_line do |line|print lineendensurefile.closeend替换部分算法通过块的设置,指定sort规则Array#sort⽅法没有指定块时,会使⽤<=>运算符对各个元素进⾏⽐较,并根据⽐较后的结果进⾏排序。

《PB程序设计》第9章用户自定义事件


返回本节 录
9.4 触发用户事件
Static和Dynamic选项只能选择一个,缺省时为 Static。Static表示编译时指定事件必须存在,系统 要进行返回值类型检查;Dynamic表示编译时指定事 件可以不存在,系统把返回值类型检查推迟到应用 程序运行时进行。 Event是关键字,表示后面的Event Name是个事 件名而不是函数。Para list是事件的参数,有多个 参数时参数之间用逗号分隔。 如果用户事件定义了参数,只能使用上述格式触 发事件,而不能使用函数TriggerEvent()或 PostEvent()。
返回章目录
9.1用户自定义事件在应用中的作用
在下列情况下经常使用用户事件: (1)解决对象与窗口之间的通信问题。用 户事件可以通过参数进行信息传递。 (2)响应特殊操作。这些操作没有相应的 PowerBuilder预定义事件 (3)支持用户通过多种多样的方式完成同 一个功能
返回本节 录
返回本节 录
9.5 用户自定义事件应用实例
为了测试,我们在表中添加几条记录如图9ˉ12 所示
返回本节 录
9.5 用户自定义事件应用实例
运行程序:单击“显示记录”按钮,结果如图 9ˉ13所示
9.1用户自定义事件在应用中的作用
用户事件在许多地方与用户定义函数十分相似,用 户事件运用的灵活程度很大程度上反映出应用程序 的灵活性和适用性。PowerBuilder开始将事件和函 数同化,统称为方法。事件也可以带输入参数,并 有返回值。有时形式上难以区分事件和函数。不过, 函数一般是由用户调用,在编程时就已决定,而事 件除了可以由用户触发外,还可以由系统触发。大 多数的事件,都是由系统触发的。因此,事件比函 数更为灵活,应用范围更广

PB核心函数详解


Title:窗口标题,String 类型的数据。如果该参数取值为 Null,则不显示
提示窗口。
Text:窗口中要显示的内容,String 类型的数据。如果该参数取值为 Null,
则不显示提示窗口。这两个函数是必需的,使用更多的参数可以提供更多
的控制。
Icon:窗口中显示的图标的样式,为枚举类型的数据。可用的类型和对应
1. MessageBox 函数作用:显示一个信息提示窗口。该窗口中的标题、图标、内容和按钮都可以通过参数指
定。提示窗口的样式如图 1 所示。清楚了提示窗口的构成,非常有利于记忆该 函数的语法。
图 1 提示窗口样式
函数语法:MessageBox ( title, text {, icon {, button {, default } } } )
电话:010-81692157,13910229071 邮箱:gbl88@ QQ:123367042 Skype:PowerBuilders 本人所在公司:北京达通兴电脑科技开发有限公司
另外,我公司提供 PowerBuilder 系列培训,并且承接各种软件项目,欢迎合作。详细内 容请浏览网站:。
代码实例: 例子 1,触发缺省事件:
cb_1.TriggerEvent(Clicked!) 等价于:
cb_1.TriggerEvent(“Clicked”) 例子 2,触发用户自定义事件:
w_main.TriggerEvent(“ue_open”) 例子 3,传递信息和接收信息:
w_main.TriggerEvent(“ue_open”,0,’test’) 在用户自定义事件 ue_open 中接收数据:
string ls_msg
ls_msg = String(Message.LongParm,’address’) 例子 4,传递 long 数据:

PB 11第11章 自定义函数和结构


1.选择目标
2.选择pbl源文件
3. 在 ObjectType 中 选 择 Functions或All Objects
图11-5 打开自定义全局函数
11.1.3删除自定义全局函数
打开Library库管理器,打开要删除的自定义全局函数所在的PBL,选择 要删除的自定义全局函数,右击,出现弹出式菜单,选择Delete将删除 所选的自定义全局函数。
点击该图标,将显示 /隐 含函数属性定义
图11-8定义对象函数的属性
11.2.1 创建自定义对象函数
在定义函数的下面窗口内编辑代码。若函数有返回值,立即输入代码,即必须 写一条return语句,否则产生错误。 对象函数的返回值的类型、参数名、个数及类型能随时更改,系统会给出一个 提示信息,以确认是否更改。 在其它对象的程序中调用时,应在函数名前加上函数所在的对象名如 w_pipe.wf_error(num),当然w_pipe必须已被打开。
1.选择Functions 2.选择New Function
图11-7 定义对象函数
11.2.1 创建自定义对象函数
Access缺省值为“public” 。 访问属性Access有三个选择: l public:在整个程序中都可访问。 l private:只能在当前对象的程序中使用,不能在该对象的后代的程序中使用。 l protected:只能在当前对象的程序以及该对象的后代的程序中使用。 对象函数的命名规则一般与对象有关,如应用对象Application Object的函数一般 以“af_”作前缀,窗口对象Window的函数一般以“wf_”作前缀,菜单对象menu 的函数一般以“mf_”作前缀,用户自定义对象的函数一般以“uf_”作前缀。这些 规则清楚地表明了函数所在对象的类型,便于程序的维护。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.选择Functions 2. 选 择 要 修 改 的 函数 点击该图标, 将显 示 / 隐含函数属性定 义 ,可以更改返回 值类型及参数等
3. 输入或修 改代码
图11-10 修改对象函数
11.2.3 删除自定义对象函数
要删除自定义对象函数,首先打开自定义函数所在的对象,然后 选择主菜单View的子菜单Function List。
点击该图标,将显 示/隐含函数属性定 义
图11-9编辑函数代码
11.2.2 修改自定义对象函数
打 开 自 定 义 函 数 所 在 的 对 象 , 打 开 Script 代 码 编 辑 窗 口 , 选 择 Functions,再选择要修改的函数。对象函数的返回值的类型、参数名、 个数及类型都能随时更改。系统会给出一个提示信息,以确认是否更 改。可以输入或更改函数代码。
1.选择目标
2.选择pbl源文件
3. 在 ObjectType 中 选 择 Functions或All Objects
图11-5 打开自定义全局函数
11.1.3删除自定义全局函数
打开Library库管理器,打开要删除的自定义全局函数所在的PBL,选择 要删除的自定义全局函数,右击,出现弹出式菜单,选择Delete将删除 所选的自定义全局 Function
图11-7 定义对象函数
11.2.1 创建自定义对象函数
Access缺省值为“public” 。 访问属性Access有三个选择: l public:在整个程序中都可访问。 l private:只能在当前对象的程序中使用,不能在该对象的后代的程序中使用。 l protected:只能在当前对象的程序以及该对象的后代的程序中使用。 对象函数的命名规则一般与对象有关,如应用对象Application Object的函数一般 以“af_”作前缀,窗口对象Window的函数一般以“wf_”作前缀,菜单对象menu 的函数一般以“mf_”作前缀,用户自定义对象的函数一般以“uf_”作前缀。这些 规则清楚地表明了函数所在对象的类型,便于程序的维护。
点击该图标,将显示 /隐 含函数属性定义
图11-8定义对象函数的属性
11.2.1 创建自定义对象函数
在定义函数的下面窗口内编辑代码。若函数有返回值,立即输入代码,即必须 写一条return语句,否则产生错误。 对象函数的返回值的类型、参数名、个数及类型能随时更改,系统会给出一个 提示信息,以确认是否更改。 在其它对象的程序中调用时,应在函数名前加上函数所在的对象名如 w_pipe.wf_error(num),当然w_pipe必须已被打开。
点击该图标, 将显示/隐含 函数属性定义
图11-2定义全局函数的属性
11.1.1创建自定义全局函数
参数传递方式有三种: Value:值传递---将实际参数的值传递给函数参数 Reference:地址传递---把实际参数的地址传递给函数,此时,如果 函数修改了形式参数的值,那么实际参数的值也就被修改了。 Readonly:地址传递 --- 把实际参数的地址传递给函数,不过不允许 修改参数的值。 要 增 加 或 删 除 参 数 , 可 在 图 11-2 中 右 击 , 出 现 弹 出 式 菜 单 。 Add Parameter 增加参数, Insert Parameter 插入参数, Delete Parameter 删除参数
图11-4 编辑函数代码
点击该图标,将显示/ 隐含函数属性定义
11.1.2修改自定义全局函数
在开发环境的主窗口中, 选 择 工 具 栏 的 Open 图 标或选择主菜单 File 的 子 菜 单 Open , 将 出 现 标题为“ Open” 的窗口, 在 ObjectType 下拉框中 选 择 Functions , 在 Object 中选择要打开的 4.选择要打 函数, 开的函数 双击或点击OK按钮,进 入全局函数的定义,如 前图 11-4所示。可以更 改函数返回值的类型、 参数名、个数及类型和 函数代码。
Object页的Function,双击Function项或点击OK按钮,进入全局函 数的定义。 在图中,Function Name项中输入函数名、Return Type下拉框中选择 函数返回值的类型、Argument Name中输入函数参数名、Argument Type下拉框中选择函数参数类型、PassBy下拉框中选择参数传递方 式。
图11-11 列出全部函数
11.2.3 删除自定义对象函数
选择 Function List 后将列出该对 象的全部函数,如图 11-12 ,右 击要删除的函数,出现一个弹出 式菜单,图11-13,选择Delete将 删除所选的对象函数。 注意:一旦选择 Delete 将立刻删 除所选的对象函数,系统对删除 操作不作提醒。 在图11-13中,选择弹出式菜单 中的Script,或双击所选的函数, 将打开Script代码编辑窗口,以 便查看与修改所选的对象函数, 包括函数返回值的类型、参数名、 参数个数、参数类型及函数代码 等。
图11-3 增加、插入、删除参数
11.1.1创建自定义全局函数
函数名及参数定义好 后,在定义函数的下 面窗口内编辑代码。 或选择主窗口 View 菜 单 的 Script 子 菜 单 , 打开函数代码编辑窗 口。函数返回值的类 型、参数名、个数及 类型可以随时更改。 若函数有返回值,必 须立即输入代码,即 必 须 写 一 条 return 语 句,否则产生错误。 定义好的全局函数和 标准函数一样使用。
第11章 自定义函数和结构
11.1 创建自定义全局函数 11.2 创建自定义对象函数 11.3 外部函数 11.4 结构
11.1.1创建自定义全局函数
在开发环境的主窗口中,选择工具栏的New图标或选择主菜单 File的子菜单New,将出现标题为“New”的窗口。
图11-1 定义全局函数
11.1.1创建自定义全局函数
图11-6 删除自定义全局函数
11.2.1 创建自定义对象函数
可以为Application Object对象、窗口对象、用户对象创建自定义 函数,这种函数称为对象函数。 先打开要定义函数的对象,再打开 Script 代码编辑窗口,先选择 Functions,再选择New Function,将出现函数定义窗口。
相关文档
最新文档