PB 11第11章 自定义函数和结构
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常用函数

• RegistryKeys()
功能从系统注册库中得到指定键的有效子键。
语法RegistryKeys ( key, subkeys )
参数key:string类型,指定键名subkeys:字符串数组变量,用于保存各子键返回值Integer。函数执行成功时返回1,发生错误时返回-1。用法在subkeys参数中可以使用定长数组,也可以使用动态数组。使用动态数组时,数组的上界反映了能够得到的子键个数。当使用定长数组时,其数组元素个数必须足够多,保证能够容纳所有子键,但是,在具体得到子键之前,没有办法能够预先知道实际子键个数。为了唯一地标识某个键,在key参数中,可以从根键开始依次指定各级父键,各键之间使用反斜杠(\)分隔。
• RelativeDate()
功能得到指定日期前多少天或后多少天的日期。
语法RelativeDate(date,n)
参数date:Date类型,指定基准日期n:integer类型,指定天数返回值Date。当n的值大于0时返回参数date指定日期后第n天的日期;当n的值小于0时返回参数date指定日期前第n天的日期。如果任何参数的值为NULL,则RelativeDate()函数返回NULL。
________________________________________
• Hour()
功能得到时间值中的小时,采用24小时制。
语法Hour ( time )
参数time:time类型的值返回值Integer。函数执行成功时得到time参数中的小时(00到23之间)。如果time参数的值为NULL,则Hour()函数返回NULL。
PB之常用函数

Return1
//不允许关闭
EndChoose //用户所有的选择情况处理完毕
通过上面的脚本,可以为用户提供一个很健壮的数据处理窗口。即使直接关闭该窗口,在数据窗口中所做的数据修改也不会丢失,除非用户 自己想放弃。
另外,需要注意的是,在其他事件中调用或者触发(使用TriggerEvent函数、PostEvent函数或者是对象名称.Event 事件名称格式调用事 件)Close事件,都只是执行该事件中的脚本,并不真正关闭窗口。也就是说,应该区别事件和事件处理脚本,这两者虽然有很多的联系但 并不相同。 PB中的所有事件和事件处理脚本都是有区别的。
row:要设置数据的行,为long类型。
column:要设置数据的列,可以是string类型的列名称,也可以是integer类型的列号。
插入空行:insertrow(0) dw_name.insertrow(0) 通常配合插入行使用的是滚动行 dw_name.scrolltorow(dw_name.insertrow(0)) \\滚动到插入行 比如:int row
row = dw_1.insertrow(0)
//显示
dw_1.scrolltorow(row)
该函数有返回值,1,2,3对选择的按键。
基本写法事例: MessageBox('此处为标题,'此处为内容') 完整写法事例: if MessageBox('提示信息','是否删除?',&Question! ,OKCancel! , 1 ) = 1 then//选择确定 MessageBox('提示信息', '你选择了删除') else//选择取消
//使用
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、ScrollToRow() 使用方法:rtename .scrolltorow(row)Rtename超文本编辑框的名称。
如果row的值为0的话则就回滚到第一行,如果row的值大于超文本的行数则回滚到最后一行3、selectedColumn()返回插入点后第一个字符的位置rtename.selectedcolumn()4、setcloumn5、print() 以当前字体在打开的打印作业中打印一行或多行文本print(printjobnumber,{tabl},string{,tab2})tab1为文本开始打印的位置,以千分之一英寸为单位。
《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开始将事件和函 数同化,统称为方法。事件也可以带输入参数,并 有返回值。有时形式上难以区分事件和函数。不过, 函数一般是由用户调用,在编程时就已决定,而事 件除了可以由用户触发外,还可以由系统触发。大 多数的事件,都是由系统触发的。因此,事件比函 数更为灵活,应用范围更广
第11章 类

在面向对象程序设计中,算法与数据结构被捆绑成一个类。现实世界本 身就是一个对象的世界,任何对象都具有一定的属性和操作,也就总能用数 据结构与算法两者合一地描述,此时,程序定律再次改写: 对象=(算法+数据结构) 程序=(对象+对象+......)
【11.3 类的声明与定义成员函数】
类也是一种用户自定义数据类型。它不仅包含不同数据类型的变量,还可 以包含对这些变量数据进行操作的函数。 类是一组变量及其相关函数的组合。类中的变量称为类的成员变量或数据 成员;函数称为类的函数成员或方法。
类的定义举例
struct Savings { public: //可以省略 unsigned deposit(unsigned amount) { balance+=amount; return balance; } unsigned accountNumber; float balance; }; class Savings { public: unsigned deposit(unsigned amount) { balance+=amount; return balance; } private: unsigned accountNumber; float balance; };
注:1、关键字class表示类,Savings是类名,一般首字母大写,以示与对 象名的区别,关键字public和private表示存储控制。 2、C++中类与结构的唯一区别是:类定义中默认情况下的成员是private 的 ,而结构定义中默认情况下是public的;在C中,结构中不允许有成员函 数,而在C++中有成员函数。
在声明类时,一般来说应该把类的所有数据成员都声明为私有的,同时声明 公有成员函数来访问这些数据成员。 在类的声明中,关键字public、protected和private的出现顺序是任意的, 可以不出现或多次出现。类中的每个成员只能有一种特定的访问属性。
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 数据:
delphi11动态链接库

delphi11动态链接库第11章动态链接库本章讨论了Win32动态链接库,也就是DLL。
动态链接库(Dynamic Link Library,简称DLL)是⼀些编译过的可执⾏代码模块,后缀名为. DLL,可以在应⽤程序中或其它DLL中被调⽤。
在Windows环境中,DLL可以实现多个应⽤程序共享代码和资源。
DLL的⽤途⾮常⼴泛,是Windows程序设计中的⼀个⾮常重要的组成部分。
本章将从DLL的⼀些基础知识讲起,说明如何在Delphi开发环境中创建和使⽤DLL。
11.1 概述11.1.1 DLL的概念在开始介绍DLL的概念之前,先介绍⼀些有关DLL的⼀些术语如下:应⽤程序,⼀个扩展名为.exe的Windows程序。
可执⾏⽂件,⼀个包含可执⾏代码的⽂件,它包括.dll⽂件和.exe⽂件。
实例,当提到应⽤程序和DLL时,在内存中出现的可执⾏⽂件就是实例。
Win32系统通过实例句柄的⽅式来引⽤实例。
例如,如果⼀个应⽤程序运⾏两次,就会有应⽤程序的两个实例,同时就有两个实例句柄。
当⼀个DLL被调⼊时,实例及其相应的实例句柄同时产⽣。
应该注意的是,这⾥所提的实例与类的实例不能混淆。
模块,在32位Windows系统中,模块和实例可以说是同义的。
⽽在16位的Windows 系统中,是建⽴⼀个模块数据库来管理模块的,⼀个模块对应⼀个模块句柄。
在Win32中,应⽤程序的每⼀个实例都拥有⾃⼰的地址空间;所以,没有必要为模块单独指定标识符。
不过,微软仍然保留了它⾃⼰的术语。
注意⼀点,模块和实例是同⼀个概念。
任务,Windows是⼀个多任务(或任务切换)环境,所以它必须能够为运⾏的多个实例合理分配系统资源和时间。
于是,Windows建⽴⼀个任务数据库,这个数据库包括任务的实例句柄和其它必要信息,以此实现任务切换功能。
任务是Windows⽤来管理和分配资源与时间段的重要元素。
动态链接库是程序模块,它包括代码、数据或资源,能够被其它的Windows应⽤程序共享。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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_”作前缀。这些 规则清楚地表明了函数所在对象的类型,便于程序的维护。
图11-4 编辑函数代码
点击该图标,将显示/ 隐含函数属性定义
11.1.2修改自定义全局函数
在开发环境的主窗口中, 选 择 工 具 栏 的 Open 图 标或选择主菜单 File 的 子 菜 单 Open , 将 出 现 标题为“ Open” 的窗口, 在 ObjectType 下拉框中 选 择 Functions , 在 Object 中选择要打开的 4.选择要打 函数, 开的函数 双击或点击OK按钮,进 入全局函数的定义,如 前图 11-4所示。可以更 改函数返回值的类型、 参数名、个数及类型和 函数代码。
1.选择Functions 2. 选 择 要 修 改 的 函数 点击该图标, 将显 示 / 隐含函数属性定 义 ,可以更改返回 值类型及参数等
3. 输入或修 改代码
图11-10 修改对象函数11.2.3 Fra bibliotek除自定义对象函数
要删除自定义对象函数,首先打开自定义函数所在的对象,然后 选择主菜单View的子菜单Function List。
图11-3 增加、插入、删除参数
11.1.1创建自定义全局函数
函数名及参数定义好 后,在定义函数的下 面窗口内编辑代码。 或选择主窗口 View 菜 单 的 Script 子 菜 单 , 打开函数代码编辑窗 口。函数返回值的类 型、参数名、个数及 类型可以随时更改。 若函数有返回值,必 须立即输入代码,即 必 须 写 一 条 return 语 句,否则产生错误。 定义好的全局函数和 标准函数一样使用。
Object页的Function,双击Function项或点击OK按钮,进入全局函 数的定义。 在图中,Function Name项中输入函数名、Return Type下拉框中选择 函数返回值的类型、Argument Name中输入函数参数名、Argument Type下拉框中选择函数参数类型、PassBy下拉框中选择参数传递方 式。
第11章 自定义函数和结构
11.1 创建自定义全局函数 11.2 创建自定义对象函数 11.3 外部函数 11.4 结构
11.1.1创建自定义全局函数
在开发环境的主窗口中,选择工具栏的New图标或选择主菜单 File的子菜单New,将出现标题为“New”的窗口。
图11-1 定义全局函数
11.1.1创建自定义全局函数
点击该图标,将显 示/隐含函数属性定 义
图11-9编辑函数代码
11.2.2 修改自定义对象函数
打 开 自 定 义 函 数 所 在 的 对 象 , 打 开 Script 代 码 编 辑 窗 口 , 选 择 Functions,再选择要修改的函数。对象函数的返回值的类型、参数名、 个数及类型都能随时更改。系统会给出一个提示信息,以确认是否更 改。可以输入或更改函数代码。
点击该图标, 将显示/隐含 函数属性定义
图11-2定义全局函数的属性
11.1.1创建自定义全局函数
参数传递方式有三种: Value:值传递---将实际参数的值传递给函数参数 Reference:地址传递---把实际参数的地址传递给函数,此时,如果 函数修改了形式参数的值,那么实际参数的值也就被修改了。 Readonly:地址传递 --- 把实际参数的地址传递给函数,不过不允许 修改参数的值。 要 增 加 或 删 除 参 数 , 可 在 图 11-2 中 右 击 , 出 现 弹 出 式 菜 单 。 Add Parameter 增加参数, Insert Parameter 插入参数, Delete Parameter 删除参数
图11-6 删除自定义全局函数
11.2.1 创建自定义对象函数
可以为Application Object对象、窗口对象、用户对象创建自定义 函数,这种函数称为对象函数。 先打开要定义函数的对象,再打开 Script 代码编辑窗口,先选择 Functions,再选择New Function,将出现函数定义窗口。
图11-11 列出全部函数
11.2.3 删除自定义对象函数
选择 Function List 后将列出该对 象的全部函数,如图 11-12 ,右 击要删除的函数,出现一个弹出 式菜单,图11-13,选择Delete将 删除所选的对象函数。 注意:一旦选择 Delete 将立刻删 除所选的对象函数,系统对删除 操作不作提醒。 在图11-13中,选择弹出式菜单 中的Script,或双击所选的函数, 将打开Script代码编辑窗口,以 便查看与修改所选的对象函数, 包括函数返回值的类型、参数名、 参数个数、参数类型及函数代码 等。