其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

PowerBuilder实用技巧八则(二)


发布日期:2024年04月19日
 
PowerBuilder实用技巧八则(二)

数据窗口中实现自动折行

有时为了界面的考虑需要将一些长字段折行显示但又不能确保在所有情况下都会出现长字段比如我们要求当客户地址超过个字符时将它分两行显示对于没满个字符的客户仍然按照正常格式显示

具体如下

在数据窗口中选择要自动折行的列Address

选择位置属性(Position)并选中Autosize Height选项

选择编辑属性(Edit)并去掉Auto Horz Scroll选项

选择数据窗口中细目带的属性Autosize Height选项注意是当你拖动细目栏时出现的属性

设置完毕后在左下角预览窗口中将显示图例的结果

在进行列自动折行显示的时候还要注意一点系统判断自动折行的断点是以空格或标点符号为依据的如果我们输入一长串字符且中间没有任何标点符号或空隔的话即使该字符串再长也无济于事因此我们一定要提醒用户在录入时适当的加入一些空格或回车

数据窗口中记录颜色的隔层显示

相信你一定见过这样的显示第一行记录的背景色是浅黄色第二行记录的背景色是白色第三行又是浅黄色第四行又是白色……依次类推

要想让显示的数据达到上述效果我们首先要知道的是这些数据存放在数据窗口中的什么地方很显然数据窗口中的所有数据是在细目带中列出的因此只要在细目带中设置一些数据属性就会影响到这个细目带中的所有内容具体实现如下

打开数据窗口单击细目带(Detail)注意是点击有Detail字的一栏不是它存放数据的地方点击它鼠标会出现上下小箭头

选择常规属性单击颜色属性(Color)旁边的一个带有红色图标的小按钮

在表达式一栏中输入

if ( Mod( GetRow() ) = RGB( RGB( ))

// RGB( 浅黄色

OK预栏一下效果不错大功告成

实现数据窗口的动态排序

在用到Windows的资源管理器的时候当我们需要按照文件的类型或名称排序的时候只要用鼠标点击一下相应的标题栏系统会按照升序或降序交替排序这完全取决于用户鼠标点击的奇偶数如此方便的操作何不用到我们的数据窗口中——实现按某列的动态排序

为了实现上述功能程序首先需要用到一个全局变量(相对于PB来说可以用窗体变量)用它来控制连续两次点击之间的排序方向因为字段的排序方向只有升序和降序两种所以我们可以用一个Boolean型本例中是Boolean ib_flag接着在数据窗口控件的Clicked事件中写上如下代码

/*****************************程序代码******************************/

String ls_column ls_sort

ls_column = thisGetObjectAtPointer() // 得到鼠标按下位置的对象名

ls_column = left(ls_column len(ls_column) ) // 得到列标题名字

if not Lower(right(ls_column )) = _t then return// 如果不是缺省的列标题即以_t结尾或鼠标根本没有点在列标题上则退出

ls_column = left(ls_column len(ls_column) ) // 去掉列标题末尾的_t得到有效的列标题名

// 进行升序和降序的切换

if ib_flag then

ls_sort = ls_column + A // 升序

else

ls_sort = ls_column + D // 降序

end if

ib_flag = not ib_flag // 为下一次排序准备

ls_sort = ls_sort

thissetsort(ls_sort)

thissort()

/*****************************结束******************************/

这里所叙述的数据窗口中列的动态排序是以系统默认的列标题名为前提即在标题栏中列标题名字是以_t结尾

设置系统时间

在开发具有数据服务器的应用软件时有时为了使所有计算机的时间都保持相同或者接近相同主要是为了避免数据录入时出现的时间差异通常我们会在客户机每次使用应用软件前将本地时间设置成跟服务器相同从而确保输入的数据在时间上具有较高的正确性要实现系统时间的设置下面就讲述一下实现的过程

本程序是通过调用外部函数SetSystemTime()实现系统时间的设置该函数返回布尔型查阅一下有关参考手册就会发现该函数需要一个表示系统时间结构(Struct)的数据类型作为参数此结构的定义如下

struct _SYSTEMTIME

{

INT iYear;

INT iMonth;

INT iDayOfWeek;

INT iDay;

INT iHour;

INT iMinute;

INT iSecond;

INT iMilliseconds; // 毫秒

} str_SystemTime;

要在程序中使用外部函数首先需要要进行外部函数声明可以根据函数的使用范围放在全局外部函数声明区或局部外部函数区声明具体声明如下

Function Boolean SetSystemTime(str_SystemTime str_MyTime) Library Kerneldll

声明之后就可以使用了下面代码实现将系统日期设置成

/*****************************程序代码******************************/

str_SystemTime str_MyTime

// 给结构赋值

str_MyTimeiYear = //

str_MyTimeimonth = / /

str_MyTimeiDay = //

// 设置系统日期

if SetSystemTime(ref str_MyTime)then

Beep(

MessageBox(提示系统日期设置成功!

else

Beep(

MessageBox(提示系统日期设置失败!

end if

/*****************************结束******************************/

注意如果只有日期没有时间的话系统会将时间设置成默认的上午点整设置系统的时间方法和设置日期类似只要将结构中的时秒分别设置成想要的就行了

上一篇:PowerBuilder实用技巧八则(一)

下一篇:深入了解PowerBuilder的数据窗口