编写行选择函数

来源:互联网 发布:阿里云挂载数据盘 编辑:程序博客网 时间:2024/06/04 18:15
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
上期我们介绍了使用自定义用户对象取代系统自身的数据窗口的技术,采用这种办法我们可以把对数据窗口经常做的操作编写成为对象函数,在数据窗口的祖先对象中进行定义,并将其封装起来,而不必在每一个使用数据窗口的窗口之中重复。在数据窗口中我们经常要使用对各条记录的选择操作,本期我们介绍如何将这一功能在对象函数中实现,以拓展数据窗口的基本功能。进行选择的不同方法
我们在数据窗口中需要进行行选择操作,如用户为了修改数据或看到更详细的内容而选择了某一行;在另一些情况下,用户可能要同时删除或修改多行,这时,我们需要有使用户在一个数据窗口中同时选择多行的功能。这在中是相当容易做到的,但是,如果在一个数据窗口祖先中没有标准的函数来处理这些,而在每个窗口中重复编程,就非常麻烦。
我们首先来看一看进行行选择的不同方法。
·所有行都不加亮通常情况下数据窗口不加亮任何行。这对于那些只允许用户进行滚动和查看的数据列表或那些单行的数据窗口是合适的。
·单行选择单行选择意味着用户在同一时间只能选择一行来执行一些动作,如删除或在主从关系的列表中显示详细信息,这是非常有用的。下面是实现单行选择功能的代码:
Event:RowFocusChangedifGetRow()>0then
SelectRow(0,FALSE)
SelectRow(GetRow(),TRUE)endif·多行的自动选择多行的自动选择表现为:当用户点击一个未加亮的行时,该行将变亮;反之,用户点击一个加亮行,该行将不加亮。为了实现上述功能,在RowFocusChanged事件中加入如下代码:
Event:RowFocusChangedObject:AnyDataWindowifGetRow()>0then
ifIsSelected(GetRow())then
SelectRow(GetRow(),FALSE)
else
SelectRow(GetRow(),TRUE)
endifendif或者简化成为下面的一行代码:
ifGetRow()>0thenSelectRow(GetRow(),NOTIsSelected(GetRow()))·shift、control或control+shift+鼠标的使用Windows的文件管理器或其它Windows程序中,您可以使用Shift、Control或Control+Shift这种键盘与鼠标的组合来选择。PowerBuilder在数据窗口中没有提供这样的能力,我们必须自己实现。
我们应当实现的组合功能是:
要建立这样的功能,数据窗口必须记录当前的起始行。我们声明这样一个实例变量:
protectedlongil_anchor_row当用户点击鼠标或进行了键盘操作时,我们要测试用户是否同时按下了Shift或Control键,方法是用KeyDown()函数,检查有没有KeyShift!和KeyControl!,如有这样的键按下则记录起始行。编写行选择函数
为了在用户点击鼠标或进行键盘操作时使上述行为发生作用,我们必须在Clicked事件和一个映射到Pbm_dwnkey事件的自定义用户事件中调用我们自己的行选择函数。这样,不管用户是点击鼠标还是击中键盘,选择行为都会发生。我们也可以将这个功能放入RowFocusChanged事件中。
为了使这个行选择功能可重用,这里我们建立两个函数。一个函数设置我们希望的选择行为类型,另外一个真正执行该选择行为。首先我们使用一个实例变量来设定选择行为的值:
protectedintegerii_select_behavior这个变量中将存放下面的一些值。
可能发生的选择行为
值 行为
0不允许选择行为
1只允许有一行选中
2自动实现多行选择
3允许使用鼠标和键盘组合选择
99不允许选择,将鼠标变成手型
如果使用的是保护变量或私有变量,这就意味着本对象以外的程序无法访问,因此必须为其他程序员建立对这些变量赋值和获取这些变量值的函数。
另外,还需要一些函数来执行基于该变量的过程。
函数:uf_SetSelect(Select_behavior)我们要写的第一个函数将允许程序员设置选择行为。
函数:publicintegeruf_SetSelect(integerai_select_behavior)/*本函数设置数据窗口的选择行为值1
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>