PowerBuilder编程俱乐部
2000年已经到来,PowerBuilder编程俱乐部也在大家的关心下逐步发展壮大,在这里版主衷心地祝福各位新年快乐、学习进步!
一、问:下拉列表控件(DropDownListBox)中,当选中某一项后,我怎样才能返回当前选中项的索引号?(相当于VB中ComboBox的Index属性)
答:PowerBuilder中下拉列表控件没有Index属性,不能直接引用,得用其它方法实现。现给出两种方法:
1.设一long型实例变量il_index,在下拉列表的SelectionChanged事件中加入:
il_index = index
以后引用il_index即可。
2.假设下拉列表名为ddlb_1,则索引号:
li_index = ddlb_1.FindItem(ddlb_1.Text,1)
二、我用的数据库是 Sybase SQL Anywhere 5.0,数据库文件在本机能用,拷贝到别的机器却连接不上,是否还需其它配置?
答:假设数据库文件为hello.db,将hello.db与hello.log拷贝过去,再配置ODBC数据源。如果还连不上数据库,则须重新连接事务注册文件hello.log,方法如下:
1.进入MS_DOS模式。
2.进入Sybase SQL Anywhere5.0\win32目录,如:C:> cd C:\Program Files\Sybase\SQL Anywhere 5.0\Win32
3.运行命令(假设数据库文件拷贝到D盘根目录下):
dblog -t d:\hello.log d:\hello.db
三、问: 我在安装好PB6.5之后,连接示例Powersoft Demo DB V6数据库,打开DATABASE画板,出现Select Table对话框,选择Cancel。打开FILE菜单中只有:Close、Connect、Configure ODBC、PowerPanel、Print Setup、Exit等菜单项,却没有像书中所讲的Create Database选项,请问这是为什么?
答:这个问题的关键所在是在PowerBuilder所能找到的路径中,必须有dbtl50t.dll这个文件,PB才会出现建数据库的选项。这个文件包含在完整的SQL Anywhere之中,PB安装时只安装SQL Anywhere最基本的引擎部分,不安装这个文件。
解决方法:在PB光盘上有完整的SQL Anywhere 5.0,安装它即可。或者你也可以从其他机上将dbtl50t.dll拷贝到C:\Windows\System或\SQL Anywhere 5.0\Win32中。
(本题由网易PB版主ilike提供解答)
四、数据窗口中某列的编辑风格设为下拉数据窗口(DropDownDataWindow),用GetItemNumber()函数只能得到实际值。有什么办法能得到此列的显示值?
答:数据窗口中有一个内部函数LookupDisplay()可实现此功能,若列名为“currency”,取第1行的显示值的方法如下:
dw_1.Describe ( “Evaluate(′LookupDisplay(currency)′,1)” )
这种方法同样适用于编辑风格为下拉列表框(DropDownListBox)、单选钮(RadioButtons)等的列。
五、在数据窗口录入数据时,有的域要输英文,有的域要输中文,每次要手工切换,很麻烦,能不能在程序中自动控制切换中英文输入法?
答:可以用API函数实现:
声明API函数:
function boolean ImmSimulateHotKey (ULong hWnd,ULong dwHotKeyID) library “IMM32.dll”
function ulong GetKeyboardLayout(ulong dwLayout) LIBRARY “user32.dll”
function boolean ImmIsIME(uLong hklKeyboardLayout) library “IMM32.DLL”
定义变量:
constant int IME_THotKey_IME_NonIME_Toggle=112
ulong hklCurrent
ulong hnd
切换到英文输入法:
hklCurrent=GetKeyboardLayout(0)
if ImmIsIME(hklCurrent) then
hnd=Handle(parent)
ImmSimulateHotKey(hnd,IME_THotKey_IME_NonIME_Toggle)
end if
切换到中文输入法:
hklCurrent=GetKeyboardLayout(0)
if not ImmIsIME(hklCurrent) then
hnd=Handle(parent)
ImmSimulateHotKey(hnd,IME_THotKey_IME_NonIME_Toggle)
end if
可根据需要,触发两段不同的脚本以达到动态切换中英文输入法的目的。
六、问:在数据窗口对象画板中可以设定列的编辑风格为下拉数据窗口(DropDownDataWindow),请问在程序中可以动态实现这项功能吗?
答:可以的,假设所设定列为部门号“department_id”,相关连的子数据窗口为“d_dddw_dep”,显示列为部门名称“dept_name”,数据列为部门号“dept_id”,实现方法如下:
dw_1.Modify(“department_id.DDDW.Name=d_dddw_dep ”)
dw_1.Modify(“department_id.DDDW.DisplayColumn=′dept_name′ ”)
dw_1.Modify(“department_id.DDDW.DataColumn=′dept_id′ ”)
或:
dw_1.object.department_id. DDDW.name = “d_dddw_dep”
dw_1.object.department_id.DDDW.DisplayColumn = “dept_name” dw_1.object.department_id.DDDW.DataColumn = “dept_id”
注:PowerBuilder有一个小工具DWSyntax(程序名为:dwsyn60.exe),提供了获得及修改数据窗口、列等的各项属性值的语法,对编程非常有帮助。上述脚本在DWSyntax中都能找到。