大家都知道,在选择数据窗口中的某一行时,如果使用pb提供的选择函数SelectRow(),那么的外观真是不能恭维,单调而古板的蓝色背景,可能和您的漂亮而生动的应用程序格格不入。有没有办法改变呢?当然有啰,请听我慢慢道来。
改变某一行的背景比较简单,改变每一列的背景属性(backgroundcolor)即可,可要根据鼠标选择情况自动改变,并可以返回被选中的行可能还需要一定的技巧。下面分单行选择和多行选择分辨说明。
单行选择
单行选择比较简单,我们只要将所有字段的背景色的表达式改为:
if(GetRow()=CurrentRow(),RGB(255,126,0),RGB(0,0,0))
其中第一个颜色为被选中的颜色,第二个颜色未被选中的颜色。然后用GetRow()代替GetSelectedRow()函数来得到被选中的行。
多行选择
多行选择比较复杂,如果单纯依靠改变数据窗口的属性没法实现,我们必须使用数据窗口属性和代码结合起来才能实现
首先,改变数据窗口的SQL语句,增加一个计算字段:0 as flag,Select 语句改为:
Select col1,col2 ,1 as flag from tablename where .....,
当返回数据窗口painter时,您就会发现多了一个字段flag,我们就是利用这个字段保存行被选中的信息。
其次,修改各个字段的背景颜色属性,设置为:if(flag=1,RGB(255,126,0),RGB(255,255,255))
第三:在数据窗口控件中,增加对clicked 事件的处理,代码如下:
if row<1 then return // setredraw(false)
if this.o b j e c t.flag[row]=1 then //如果该行被选中,撤销选择,否则选中该行
this.Object.flag[row]=0
else
this.Object.flag[row]=1
end if
setredraw(true)
您还可以定制本选中行的字体,文本属性等等。原理相同,不再赘述。
改变某一行的背景比较简单,改变每一列的背景属性(backgroundcolor)即可,可要根据鼠标选择情况自动改变,并可以返回被选中的行可能还需要一定的技巧。下面分单行选择和多行选择分辨说明。
单行选择
单行选择比较简单,我们只要将所有字段的背景色的表达式改为:
if(GetRow()=CurrentRow(),RGB(255,126,0),RGB(0,0,0))
其中第一个颜色为被选中的颜色,第二个颜色未被选中的颜色。然后用GetRow()代替GetSelectedRow()函数来得到被选中的行。
多行选择
多行选择比较复杂,如果单纯依靠改变数据窗口的属性没法实现,我们必须使用数据窗口属性和代码结合起来才能实现
首先,改变数据窗口的SQL语句,增加一个计算字段:0 as flag,Select 语句改为:
Select col1,col2 ,1 as flag from tablename where .....,
当返回数据窗口painter时,您就会发现多了一个字段flag,我们就是利用这个字段保存行被选中的信息。
其次,修改各个字段的背景颜色属性,设置为:if(flag=1,RGB(255,126,0),RGB(255,255,255))
第三:在数据窗口控件中,增加对clicked 事件的处理,代码如下:
if row<1 then return // setredraw(false)
if this.o b j e c t.flag[row]=1 then //如果该行被选中,撤销选择,否则选中该行
this.Object.flag[row]=0
else
this.Object.flag[row]=1
end if
setredraw(true)
您还可以定制本选中行的字体,文本属性等等。原理相同,不再赘述。