6. 单击上面数据窗口中的垂直滚动条,焦点移动到下一行,如下图所示:
本方法的实现主要使用了“message”对象的“WordParm”属性,WordParm属性表明引发事件的操作。它具有如下五种取值:
? ? ? ? ?
0:向上滚动一行; 1:向下滚动一行; 2:向上滚动一页; 3:向下滚动一页; 4:上下移动。
用户可根据执行的不同操作编写不同的处理程序。
列表框可多选时,如何确定鼠标最后点中选项的索引号
本篇文章来源与时代朝阳数据库(原晓通数据库)培训部PowerBuilder 资料库。
列表框控制对象是PowerBuilder中的对象之一,它用来显示多个选项。它有自己的属性,通过对属性的设置,可确定背景颜色、是否可视、列表内容是否排序等等。
其中,当列表框的multi select属性设置为True时,可用鼠标选择列表框的多个选项,使多个选项同时高亮显示。
假设multi select属性设置为True,则可用鼠标选择多项,这时会出现下面的问题。有时由于应用的需求,需要知道鼠标最后一次点取列表框中的选项的索引号(无论是选中还是取消选中),但由于鼠标多次选中和取消列表框中的选项,从而无法确定最后一次点取的项目的索引号。
这里,我们通过下面的例子中使用的方法来解决上述问题。
在窗口中放置一个列表框(并定义其可以多选),一个单行编辑器(用来显示鼠标最后一次点取列表框中的选项的索引号)。运行窗口,如下图所示:
在窗口上定义实例变量:
integer idx
//用来表示鼠标最后一次点取列表框中的选项的索引号
在列表框的selectionchanged事件中编写以下处理程序:
idx = Send ( Handle (this), 1033, 0, 0)
idx = idx + 1
//idx为鼠标最后一次点取列表框中的选项的索引号
sle_1.text=string(idx)
//在单行编辑器中显示鼠标最后一次点取列表框中的选项的索引号
将Main类型或MDI类型的窗口固定在某一位置不能移动
本篇文章来源与时代朝阳数据库(原晓通数据库)培训部PowerBuilder资料库。
在应用运行中,Main类型的窗口和MDI类型的窗口都可通过用鼠标点中窗口标题栏来拖动窗口。
但有时用户不希望这两种类型的窗口被拖动,例如由于某种需要,窗口被设置到某一特定的位置后将不再改变其位置。这就需要在窗口的特定事件中编写程序来完成上述功能。
我们通过下面的例子来实现其功能。
先创建一个Main类型的窗口,预览如下:
运行该窗口,用鼠标点中窗口标题栏不放,拖动鼠标,则窗口随之被拖动。为使窗口不被拖动,我们为窗口定义一个自定义事件,事件名为syscommand,事件ID号为pbm_syscommand,这个事件处理程序为:
long i
i = message.wordparm
//得到对窗口的操作数,并赋给长整数i
if i = 61456 or i = 61458 then
message.processed = true
//不执行窗口的默认操作,在这里是不执行拖动窗口的操作
message.returnvalue = 0
end if
再次运行该窗口,用鼠标拖动标题栏,但窗口不被拖动。
在syscommand事件处理程序中,61456表示选中控制菜单中的移动选项,61458表示用鼠标点中标题栏,再放开鼠标。
上例对MDI类型的窗口也适用。
上例主要完成窗口不被拖动的功能。其关键是使用了message对象。首先得到用户对象的动作(i = message.wordparm),然后操作系统对该动作作出判断(if i = 61456 or i = 61458 )并作相应操作
(message.processed = true表示不执行窗口的默认操作,message.processed = false表示执行窗口的默认操作)。
高亮显示分组标题带或脚注带中的行
本篇文章来源与时代朝阳数据库(原晓通数据库)培训部PowerBuilder资料库。
我们经常在数据窗口的细目带中使用selectrow() 函数使带中的数据行高亮显示,但此函数不能实现分组的标题带及脚注带中数据的高亮显示。可通过使用getbandatpointer() 及modify() 函数实现分组的标题带及脚注带中数据行的高亮显示。下面举例说明其实现方法:
1. 创建包含一个数据窗口控制的窗口对象w_light,如下图所示:
2. 创建一个以article表为数据源,“grid”为显示风格的数据窗口d_article1后,选择数据窗口工作区中的Rows->create group菜单项,设以author_code(作家代码)分组,并在组的脚注带中添加统计每个作家的作品数量的计算列(表达式为count(article_code)) 及静态文本“作品数量”,在组的标题带中放置静态文本“统计作家作品数量”。创建完毕的数据窗口d_article1如下图所示:
3. 将数据窗口d_article1连接到窗口w_light中的数据窗口控制dw_1后,窗口w_light如下图所示:
4. 在窗口w_light中的“open”事件中编写下面程序:
settransobject(dw_1,sqlca) dw_1.retrieve()
5. 在窗口w_light中的数据窗口控制dw_1的“clicked”事件中编写下面程序:
string ls_syntax, ls_dwobject
/*得到用户击中带的名称,可能为标题带,细目带等*/ ls_dwobject=dw_1.GetBandAtPointer()
/*如果用户击中了组的标题带,改变其背景色为红色*/ if mid(ls_dwobject,1,6) = 'header' then ls_syntax=\end if
/*如果用户击中了组的脚注带,改变其背景色为绿色*/ if mid(ls_dwobject,1,7) = 'trailer' then ls_syntax=\end if
dw_1.Modify(ls_syntax)
6. 运行窗口w_light,分别点取数据窗口分组中的标题带及脚注带,则标题带中的行背景变红,脚注带中行背景变为绿色,如下图所示: