PB高级经验点滴在线教程

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-03-16 22:42:09

Yield()函数的做用
Yield()是一个不常用到的PowerBuilder函数。可是,在一个大的循环过程中,如果用户想在执行到一半时通过单击按钮或菜单来退出的话,就一定要用到Yield()函数了,否则程序只会在执行完成整个循环后才会响应按钮或菜单的Click事件。将Yield()函数放在循环体的中间。那么在循环执行的过程中发现有新的事件消息在消息队列中就回立即去响应。
--------------------------------------------------------------------------------

PowerBuilder中如何同串口通讯
在应用中,有时需要通过COM口和外设通讯。用C编写相应的动态连接库(DLL)函数,然后在Power Builder中调用固然是一个好办法。可是,如果不熟悉C和Windows API的调用,就显得有些困难了。 PowerBuilder支持MS 的OCX控件,这样,我们可以利用VB4附带的MSCOMM32.OCX来实现同COM口的通讯。实现方法如下,先在窗口上加入OLE控件,选择MSCOMM32。编程举例如下:
ole_comm1.Object.CommPort = 1        //  ole_comm1是OLE控件的名称,CommPort是端口。             
ole_comm1.Object.Settings = "2400,N,8,1"    //设置通讯协议
ole_comm1.Object.InputLen = 0              //初始化Input
ole_comm1.Object.PortOpen = True       //打开COM口
ole_comm1.Object.Output = "a"       //向COM口发送字符
Do
    Yield()                                                  //一直等待,直到InBuffer有数据
LOOP Until ole_comm1.Object.InBufferCount >= 1
ls_Output = ole_comm1.Object.Input //取数据

--------------------------------------------------------------------------------

扩展PowerBuilder的功能
尽管PowerBuilder提供的大量函数可以满足大多数用户的需要,可是,在一些特殊的图形处理,科学计算等应用中,还是无法用PowerBuilder来实现,这就不得不借助外部函数了。PowerBuilder支持动态连接库(DLL)的调用。这样,我们就可以自己用C或Delphi编出我们需要的功能,将它编译成DLL,然后在PowerBuilder中调用。先在(Declare)菜单中选择(Global External Function...),打开定义外部函数对话框。在对话框中输入函数的定义。举例如下:function int max(int a,int b) linrary "mydll.dll" 。定义完之后,就可以象使用PowerBuilder的内部函数一样使用自己定义的外部函数了。
--------------------------------------------------------------------------------

客户机从服务器取得系统时间
PowerBuilder中有函数today()和函数time()分别返回当前机器的日期和时间。可是如果用户在使用的这台机器上任意的修改系统的日期和时间,那么在在应用系统中用today()和time()函数就得不到正确的当前日期和时间了。在客户服务器结构中,有一台机器是用做数据库服务器的,一般用户很难在上面修改时间,我们就可以在需要当前日期和时间的地方从服务器上取得时间。方法如下:以Sybase(或MS SQL Server)数据库为例,定义函数uf_getdate()返回datetime变量。
datetime d_today
select getdate() into :d_today from tablename;
return d_today
就可以得到服务器的系统时间了,其中getdate()是Sybase(或MS SQL Server)的系统函数,得到当前时间,返回datetime变量。在其他数据库上也应该有类似的函数
--------------------------------------------------------------------------------

小写金额转换成大写金额
在很多如打印发票的地方需要打印金额的中文大写,PowerBuilder没有提供这样一个数字转换成金额大写的函数。我就自己编了一个,在实际使用中效果良好。程序源代码如下:
int i,lendec,lenint
string numstr,a,b,c,d,bbak
numstr=string(aje,"#0.00")
lenint=len(mid(numstr,1,pos(numstr,'.') - 1))
if right(numstr,2)='00' then
lendec=0
else
lendec=2
end if
string dxint[13],dxdec[2],sz[13]
string dxstr="万仟佰拾亿仟佰拾万仟佰拾元"
string szstr="零壹贰叁肆伍陆柒捌玖"
for i=1 to 13
dxint[i]=mid(dxstr,26 - i*2+1,2)
if i<11 then
sz[i]=mid(szstr,i*2 - 1,2)
else
sz[i]=" "
end if
next
dxdec[1]="角"
dxdec[2]="分"
dxstr=" "
for i = 1 to lenint
a = mid(mid(numstr,1,lenint),i,1)
b = sz[integer(a)+1]
c = dxint[lenint - i +1]
if dxstr<>" " then
d = mid(dxstr,len(dxstr) - 1 ,2)
else
d = " "
end if
if b="零" and (d="零" or b=bbak or c="元" or c="万" or c="亿") then b=""
if a="0" and c<>"元" and c<>"万" and c<>"亿" then c=""
if (c="元" or c="万" or c="亿") and d="零" and a="0" then
dxstr=mid(dxstr,1,len(dxstr) - 2)
d = mid(dxstr,len(dxstr) - 1,2)
if (c="元" and d="万" or c="万"and d="亿") then c=""
end if
dxstr=dxstr + b + c
bbak = b
next
for i=1 to lendec
a = mid (mid(numstr,lenint+2,lendec),i,1)
if a="0" and dxdec[i]="分" then
b=""
else
b=sz[integer(a) + 1]
end if
if a<>"0" then
dxstr=dxstr+b+dxdec[i]
else
dxstr=dxstr+b
end if
next
if lendec=0 then dxstr=dxstr+"整"
return dxstr
--------------------------------------------------------------------------------

数据窗口中protect属性的用处
在数据窗口中如果要使其中一列的属性为只读,也就是不允许用户修改,那么只需简单地将这一列的Table Order 设置成0就可。然而,在有些情况下需要对这一列的某些行修改,而某些行不能修改,这就要用到这一列的protect属性了。打开列的属性中的Exdivssions,在protect中输入条件判别式。例如:允许用户修改新增加的记录,而检索出来的记录则不允许修改。条件判别式可以写成如下:
if(isRowNew(),0,1)
--------------------------------------------------------------------------------

进展条的使用
在很多Windows的应用程序中,当执行到一个要花费时间很长的任务时,往往会出现一个进展条,以表示当前任务执行到的位置,用图形形象地表示出来。在PowerBuilder中虽然没有这样的控件,可是在PowerBuilder所带的例子中有一用户对象uo_progress_bar能够完成所需要求。将用户对象拷贝到用户的应用所在的库,将它放置在用户的界面中需要出现的地方。然后在任务进展的时候,用对象的uf_set_position()函数指示当前任务的进展情况。
--------------------------------------------------------------------------------

5.0新增加的事件的参数
在PowerBuilder的5.0版本中,有很多对象的事件中都增加了参数,灵活地使用这些参数可以大大减少编程序的工作量,现举最常用到的例子说明。例如,在数据窗口的itemchenged事件中,以前如果需要得到改变的行的行号,列名和改变的内容,需要用到getrow()等函数来取得。而现在则可以通过事件所带的参数row,dwo,data直接取到了,既提高了运行速度,又减少了编程的工作。
--------------------------------------------------------------------------------

设置对象的缺省属性
在用户界面的设计中,每添加一个对象如按钮,文本框等,PowerBuilder都会用缺省的字体,大小,颜色等属性来定义对象。如果这不是我们所需要的属性,那么就需要逐个地去修改属性。可以通过将缺省的属性修改为所需要的来简化这一操作。打开应用画笔,在属性中可以将缺省的字体,大小,颜色等属性改成所需要的缺省属性。


Tags:

作者:佚名
分享到: 微信 更多