自己通过网上查阅整理了一些PB常用函数,方便自己使用,也和大家分享一下,希望对大家有用。使用的过程中如发现错误我会进行修正,也希望大家看出错误能慷慨指出
弹出窗口:messagebox()
基本写法:Messagebox('标题','内容')
完整写法: MessageBox ( '标题','内容',图标,按键,默认值)
(1)其中标题与内容为要显示的字符串,不可省略,但可以省略,即什么也不显示,例如Messagebox('','')这样也是正确的单里面的东西一样也不能少!
(2)图标可选值: Question!或None! 或Information!或 StopSign! 或 Exclamation!(默认图标)
(3)按键可选值: OK! (默认方式)或 OKCancel! 或 YesNo! 或YesNoCancel! 或RetryCancel! 或AbortRetryIgnore!
(4)默认值为可选: 1 (默认选择)或 2 或 3(即弹出消息框时的默认选择按钮)
该函数有返回值,1,2,3对选择的按键。
基本写法事例: MessageBox('此处为标题,'此处为内容')
完整写法事例:
if MessageBox('提示信息','是否删除?',&Question! ,OKCancel! , 1 ) = 1 then//选择确定
MessageBox('提示信息', '你选择了删除')
else//选择取消
MessageBox('提示信息','你选择了不删除')
end if
设置焦点:setfocus()
对象名.setfocus
sle_1.setfocus()
用format菜单下的tab order命令可以修改焦点顺序。把用户名和密码框分别设为10,20,确定按钮设为30就行了。也可以用控件的setfocus()方法设置焦点。
触发事件:triggerevent()
对象名.triggerevent()
(1)函数作用:触发指定对象的指定事件,并且立即执行该事件中的脚本。注意该函数和PostEvent的区别。PostEvent不是立即执行,TriggerEvent是立即执行触发事件的脚本。
(2)函数语法:objectname.TriggerEvent ( event{, word, long } )
z objectname:PB中任何对象或者控件,只要有可以触发的事件就可以。
z event:要触发的事件。可以是枚举类型或者String类型。PB提供的事件可以使用枚举或者String类型来表示,比如Clicked!或者‘Clicked’都可以代表Clicked事件;自定义的用户事件只能使用String来表示。需要注意的是,这里的事件应该提供了脚本。
z word:该参数不是必需的。当需要传递数据给被触发的事件时使用word和long参数。这两个参数都可以传递long类型的数据,但是参数long还可以传递string类型的数据,而该参数仅能传递long类型的。如果使用了该参数,在被触发的事件中使用Message.WordParm接收传递过去的数据。如果不使用该参数传递数据而是使用参数long进行传递,则将该参数设置为0。
z long:该参数也不是必须的,用来传递long或者string类型的数据。使用Message.LongParm接收传递的数据。当传递string类型的数据时,对象Message.LongParm中保存的是所传数据的存储地址,必须使用string(XX,’address’)来读取该地址中的string类型数据。
返回值:Integer类型。如果返回1,表示该函数执行成功;如果指定事件中没有脚本或者
函数执行错误,则返回-1。当任意参数为Null时,函数返回Null。
代码实例:
例子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数据:
w_main.TriggerEvent(‘ue_open’,100,0)
在用户自定义事件ue_open中接收数据:
long ll_msg
ll_msg = Message.WordParm
关闭窗口:Close()和CloseQuery()
这两个事件是比较重要的事件,尤其对于进行数据处理的窗口。在这两个事件中编写脚本可以避免用户因疏忽退出窗口而丢掉在数据窗口中的修改数据。
Close事件在触发Deconstructor之前所执行的最后一个事件,CloseQuery事件在Close事件触发之前发生。设置CloseQuery事件是为了增强可靠性。通常在CloseQuery事件中判断某些工作是否完成,并显示一个提示窗口询问用户,根据用户的确认,返回一个值来决定是否触发窗口的Close事件。返回值为1,表示取消关闭动作;返回值为0,表示继续执行Close事件。
比如,可以在CloseQuery事件中编写如下脚本,判断是否保存了数据窗口中的修改,并询问用户是否保存数据,根据用户的回答决定是否触发Close事件。在“关闭”按钮上编写脚本Close(parent),然后在CloseQuery中编写如下脚本:
Int li_flag
//如果数据窗口中没有修改,则允许执行Close,直接返回
If dw_1.ModifiedCount() <= 0 Anddw_1.DeletedCount() <= 0 Then Return 0
//如果数据窗口有修改,询问用户是否保存
li_flag = MessageBox("提示","数据已经修改,是否保存?",Question!,YesNoCancel!,1)
Choose Caseflag_i //根据用户选择执行
Case1 //用户选择要保存数据
Ifdw_1.Update() = 1 Then //如果修改数据成功
Commit; //提交
Return0 //继续执行Close事件
Else //修改数据不成功
rollback; //回退事务
li_flag= MessageBox("提示","数据错误,是否继续关闭!",&
Question!,YesNoCancel!,2) //显示错误
Ifli_flag = 1 Then
Return0 //允许关闭
Else
Return1 //不允许关闭
EndIf
EndIf
Case2 //用户选择不保存数据
Rollback; //回退事务
Return0 //允许执行Close事件
Case3 //用户选择取消
Return1 //不允许关闭
EndChoose //用户所有的选择情况处理完毕
通过上面的脚本,可以为用户提供一个很健壮的数据处理窗口。即使直接关闭该窗口,在数据窗口中所做的数据修改也不会丢失,除非用户自己想放弃。
另外,需要注意的是,在其他事件中调用或者触发(使用TriggerEvent函数、PostEvent函数或者是对象名称.Event 事件名称格式调用事件)Close事件,都只是执行该事件中的脚本,并不真正关闭窗口。也就是说,应该区别事件和事件处理脚本,这两者虽然有很多的联系但并不相同。 PB中的所有事件和事件处理脚本都是有区别的。
默认数据库链接变量:sqlca
dw_name.settransobject(sqlca)链接数据库
sqlca.sqlcode = 0 有数据\\ = 100 无数据
链接数据库
connect;一般用于程序open的时候,跟在数据库链接代码后面
打开窗口:open( )
open(windowname)
在Application中联上数据库。。
// Profile djerp1
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='DSN=djerp;UID=sa;PWD=djerp'"
connect;
if SQLCA.SQLCODE <> 0 then
MessageBox("提示","数据库连接错误!")
Return
Elseif SQLCA.sqlcode = 0 Then
Open(w_main) //打开主操作窗口
end if
关闭应用:halt close()
halt close
halt 直接结束应用程序
halt close 会执行application对象中的C