在Oracle的FORM中对不同的状态采取不同的颜色显示
例如:有一张工资单,当某个员工的工资超过5000时,用户需要系统能用红色来指示员工的姓名和工资.
实现方法:
我们新做一张form,按常规建好block和item并建一个visual attributes v1(background color=red).在相应的block level上新建一个post-query trigger并编写代码如下:
--如果工资(block.item1)大于5000
if :block.item1 > 5000 then
--指示出相应的员工姓名(block.item2)
set_item_instance_property('block.item2',To_Number(:SYSTEM.TRIGGER_RECORD),VISUAL_ATTRIBUTE,'v1');
--指示出相应的工资(block.item3)
set_item_instance_property('block.item3',To_Number(:SYSTEM.TRIGGER_RECORD),VISUAL_ATTRIBUTE,'v1');
end if;
-----总结如下:
set_item_instance_property,display_item两个子程序
1、set_item_instance_property,display_item
两个内置子程序都可以用来设置项中某行的
相关属性(同项中的其余行属性会保持原来的
属性不变),如颜色。
only changes the instance of that item that belongs
to the block's current record.
If you want to change all instances of an item in
a multi-record block, use SET_ITEM_PROPERTY .
2、二者区别:
a、display_item是较早版本中出现的,而
set_item_instance_property是较晚版本中才
有的(6i以后的应都有)。
b、display_item有一个特性,就是当通过其改变
后的属性,会延伸到与其同步的项上.即与
其同步的项也跟着变了.
但set_item_instance_property已取消了此特性.
DISPLAY_ITEM has the side-effect of also
changing the appearance of any items that
mirror the changed instance.
SET_ITEM_INSTANCE_PROPERTY does
not change mirror items.
(哦,原来mirror items 有同步项的意思)
c、如硬是还要找个区别的话,就是调用时所需
参数有所不同,一个需要提供记录号,一个不
用。
其实根据这点可以猜测到
set_item_instance_property比display_item可能可
以使用的地方要多要广!
至于到底哪些地方set_item_instance_property可
用而display_item不可用。这个留给自己或大家
有时间的时候再去研究下
3、另提一下set_item_property这个内置子程序。
通过这个内置子程序设置的是整个项(即某项的
所有记录)的属性。
另发现当利用此内置子程序改变颜色时,颜色值
应是r(红)、g(绿)、b(蓝)三原色的组合,而不是在属
性面版里直接选择颜色,
然后返回到颜色属性那栏里的值(即使看起来也
是rgb组合)。否则将发现设置不成功(但不报错)。
如:红色为:R255G0B0 (而不是RED) 酸橙色
为:R153G204B0。
具体要找某个颜色的rgb组合代码可借助于WORD
中的颜色自定义功能得出