学院首页 软件应用 编程开发 创意设计 认证培训 软件论坛
ASP ASP.NET PHP JSP SQL MYSQL Java VB

您的位置:学院 >> 编程开发 >> PowerBuilder >> 经验点滴


经验点滴



PowerBuilder中如何同串口通讯

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

LOOP Until ole_comm1.Object.InBufferCount >= 1
ls_Output = ole_comm1.Object.Input file://取数据


扩展PowerBuilder的功能

尽管PowerBuilder提供的大量函数可以满足大多数用户的需要,可是,在一些特
殊的图形处理,科学计算等应用中,还是无法用PowerBuilder来实现,这就不得
不借助外部函数了。PowerBuilder支持动态连接库(DLL)的调用。这样,我们就可
以自己用C或Delphi编出我们需要的功能,将它编译成DLL,然后在PowerBuilder
中调用。先在(Declare)菜单中选择(Global External Function...),打开定义
外部函数对话框。在对话框中输入函数的定义。举例如下:function int max(i
nt 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属性了。打开
列的属性中的Expressions,在protect中输入条件判别式。例如:允许用户修改
新增加的记录,而检索出来的记录则不允许修改。条件判别式可以写成如下:
if(isRowNew(),0,1)


进展条的使用

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


Yield()函数的作用

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


5.0新增加的事件的参数

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


设置对象的缺省属性

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


PoweBuilder中的2000年问题

随着2000年的越来越临近,大大小小的计算机报刊上充满了关于2000年问题的报
道。那么用PowerBuilder编写的程序有没有2000年问题呢,试一试就知道了。做
一个输入框,输入"00-1-1",然后将输入的字符串用date()函数转换成日期型,发
现转换的结果是2000年1月1日。同时也就证明了PowerBuilder没有2000年问题。
那么,我们是不是就可以高枕无忧了呢,不是。原来,PowerBuilder将2位数的年
份00转换成了2000年,49转换成了2049,而50却成了1950年。问题就出来了,到了
2050年,如果输入的还是两位数的年份50,那么计算机将解释为1950。原来,Po
werBuilder的2000年问题还是存在的,只是把时间向后推迟了50年而已。事实上
,只要有2位数的年份输入,就一定回有2000年问题出现。现在起到2050年只有5
0多年时间了,要解决PowerBuilder中的2000年问题可要抓紧噢。:)
技术文章快速查找

栏目导航
软件应用
·操作系统 ·杀毒防黑 ·应用软件
·聊天软件 ·网络软件  
Web开发
·ASP ·JavaScript ·CGI
·JSP ·VbScript ·Web服务器
·PHP ·XML  
开发语言
·VB ·VC ·ASP.NET
·Java ·C/C++ ·Delphi
数据库开发
·MySQL ·SQL/Access ·PowerBuilder
·Oracle ·DB2  
网站设计
·Flash ·Dreamweaver ·HTML/CSS
·Fireworks ·FrontPage  
平面设计
·Photoshop ·CorelDraw ·AutoCAD
·FreeHand ·Illustrator ·3DsMAX
媒体动画
·Director ·Authorware ·Maya
·视频处理    


相关软件 产品库推荐
·笔记本 ·台式机 ·服务器
·数码相机 ·手机 ·GPS
·DV摄像机 ·MP3 ·MP4
·CPU ·硬盘 ·内存
·主板 ·显卡 ·显示器
·打印机 ·投影机 ·路由器

还没人留言,抢个先,哈哈!
对"经验点滴"的评论 - 快速回贴
内容:
  [完成后可按Ctrl+Enter发布]

百度中 经验点滴 相关内容
Google搜索中 经验点滴 相关内容
雅虎中 经验点滴 相关内容
Sogou搜索中 经验点滴 相关内容

相关软件 最新回复帖子:

·AutoCAD打造精致三维鸟笼实例详解
·Photoshop自定义水晶字特效样式
·AutoCAD三维基础实例教程
·PS为黑背景长发美女照片抠图换背
·用Photoshop自制个性摩托车贴花小经验
·轻松几步将美女照片处理为手工素描
·巧用Photoshop画笔轻松绘制创意特效
·用Photoshop通道将模糊肖像照片清晰化
·照片处理:Photoshop修复残破照片
·PS CS2新增形状模糊滤镜绘制花布图案


  相关软件 经验点滴相关文章
如何在POWER BUILDER中使用WINSOCK控件 在PowerBuilder中实现数据库的实时过滤
用Enter键来进行窗口上的各个控键的焦点转跳 PB5中如何实现诸如Ms word之类的启动画面
如何在数据窗口(Datawindow)中用Enter代替Tab在字段间移动 PB问题解答之一
PB问题解答之二 PB问答(-)
在PB中使用FoxPro数据库的方法 PB中窗口自动居中
PB 5.0由网络版改为单机版的技巧 在PB程序中如何删除只读文件
Pb中定制打印页长实现连续打印