主题:[请教]请问在么该变数据窗口中选定行的颜色
gpyzcp
[专家分:170] 发布于 2006-08-04 11:58:00
系统默认选中行凸显的是蓝黑色不好看想换一个
数据窗口对象中的color又只是改变文本的
请问要怎么改啊
回复列表 (共6个回复)
沙发
潇洒老乌龟 [专家分:1050] 发布于 2006-08-04 16:10:00
0095 -- 数据窗口中的隔行颜色显示
http://www.51pb.com/viewthread.php?tid=950&extra=page%3D8
可以用下列表达式设置Detail节的背景颜色:
if(Mod(GetRow(),2) = 1 ,rgb(X,X,X),RGB(M,M,M))
其中:函数Mod是求余数,rgb是采用三基色设定颜色,顺序是红、绿、兰。
板凳
潇洒老乌龟 [专家分:1050] 发布于 2006-08-04 16:12:00
0125 -- 数据窗口的单双行显示颜色不同
http://www.51pb.com/viewthread.php?tid=980&extra=page%3D7
使DataWindow的单双行显示颜色不同,不仅仅可以使你的应用程序更显专业性,并使数据的可读性增强。先调出你需要改动的DataWindow,在Detail band按下右键选择Properties,选择Tab页中的Expressions,在color属性中输入下面内容:(注意是在Detail明细显示段按右键,而不是在Column上) IF(MOD(GETROW(),2)=0,RGB(192, 192, 192), RGB(255, 255, 255)) 马上Preview一下,看一看效果如何。
3 楼
潇洒老乌龟 [专家分:1050] 发布于 2006-08-04 16:13:00
0106 -- 依据条件改变数据颜色
http://www.51pb.com/viewthread.php?tid=961&extra=page%3D7
依据条件改变数据颜色是许多场合都要用到的重要功能,数据颜色的改变不仅引人注目,而且能起到暗示作用,清楚地告诉用户价位的涨跌或状态的改变等。大多数证券期货实时行情显示软件都提供了这种功能。在当前价位比其前一价位高时,当前价位数据颜色变红,表示价位上涨;反之,颜色变绿,表示价位下跌;若当前价位与其前一价位相等,则数据颜色不变。PowerBuilder没有提供解决这一问题的捷径,但我们仍可利用动态数据窗来实现。先考虑一下实现的步骤,在Retrieve前需要把有关列的数据先保存起来;Retrieve后我们获得了相应列的新数据;我们需要将上述二者作一比较,以确定颜色的变化。值得指出的是,由于动态数据窗函数dwModify()只能用描述数据窗的模式串作参数,不能接收变量作参数,故我们得想法把比较的结果传递给数据窗。为解决这个问题,可以在定义数据窗时多定义几个空列,这几列不与数据库表中的列相对应,它们作为存放比较结果的缓冲区。原则上若需要N列实时地变色,则需要N列缓冲区,就应该多定义N个空列。下面给出了一个例子具体说明。 这段程序写在某窗口的Timer事件中,该窗口内有数据窗dw_infor,其"buy"、"sell"列分别表示买价和卖价,需要实时地变颜色。为此,我们在数据窗dw_infor中多定义了"buybuf"和"sellbuf"两列,分别存放"buy"列和"sell"列Retrieve前后数据比较的结果。
//Red=255;Green=65280
int i,infor_rownum decimalbuy_old[],sell_old[],buy_new[],sell_new[]
dw_infor.SetRedraw(false)
infor_rownum=dw_infor.RowCount()
FOR i=1 To infor_rownum
buy_old=dw_infor.GetitemNumber(i,"buy")
sell_old=dw_infor.GetitemNumber(i,"sell")
NEXT
dw_infor.retrieve()
FOR i=1 TO infor_rownum
buy_new=dw_infor.GetitemNumber(i,"buy")
sell_new=dw_infor.GetitemNumber(i,"sell")
NEXT
FOR i=1 TO infor_rownum
dw_infor.Setitem(i,"buybuf",buy_new-buy_old)
dw_infor.Setitem(i,"sellbuf",sell_new-sell_old)
NEXT
dw_infor.dwModify("buy.color='0~tif(buybuf>0,255,if(buybuf<0,65280,0))'")
dw_infor.dwmodify("sell.color="0~tif(sellbuf>0,255,if(sellbuf<0,65280,0))'")
dw_infor.setredraw(true)
我们看到,程序在Retrieve前后分别将"buy"和"sell";列的数据写进与其类型匹配的数组中,然后将比较的结果分别写入"buybuf"和"sellbuf"列,最后用函数dwModify()改变有关列的颜色。记住在该窗口的Open事件中设置事务对象并激活Timer事件。此外,还有一些方法可以改变颜色,比如先在某些需要变颜色的行或列设置带颜色的长方形,同时将其上面的数据窗中的数据设置成透明的,当条件改变时,可以通过改变数据窗后的长方形的颜色来实现。
4 楼
潇洒老乌龟 [专家分:1050] 发布于 2006-08-04 16:15:00
在数据窗口中所有的列的textfond属性里面写:
if(getrow()=currentrow() , rgb(255,0,0) , rgb(0,0,255))
颜色自己改.
5 楼
gpyzcp [专家分:170] 发布于 2006-08-04 16:34:00
谢谢啦,但我想问的是凸显那条光带怎么改变颜色,而不是没一列的颜色的改变
6 楼
jiangsonghua [专家分:10] 发布于 2006-08-08 16:07:00
呵呵……
学习了,好方法!
[em2]
我来回复