Progress-4GL 有颜色常量吗?

Does Progress-4GL have color constants?

在我的应用程序中,我需要修改一个小部件的颜色。

当我查看我的应用程序时,我看到以下代码行:

BGCOLOR 25 FGCOLOR 24 .
BGCOLOR 21 FGCOLOR 20 .
BGCOLOR  8 FGCOLOR 24 .
... (and many more)

当然,这是非常难读的。

Progress-4GL 是否有任何颜色常量,如 clRedclGreen、...,出于可读性原因我可以使用?如果没有,请问网上有没有这门课的“作弊sheet”?

谢谢

不是真正的常量。但是颜色编号是指 progress.ini 或 Windows 注册表中的 RGB 值。

在 progress.ini 文件中,它位于 [颜色] 部分:

[Colors]
;******************************************************************************
; THE DEFINITION OF COLOR 0 THROUGH 15 IS PRIVATE TO THE PROGRESS ADE.  
; MODIFYING COLORS 0 THROUGH 15 MAY PREVENT THE PROGRESS ADE FROM RUNNING.
; The following color definitions correspond to the ADE standards.
;  0 to 15  - reserved
color0=0,0,0
color1=0,0,128
color2=0,128,0
color3=0,128,128
color4=128,0,0
color5=128,0,128
color6=128,128,0
color7=128,128,128
color8=192,192,192
color9=0,0,255
color10=0,255,0
color11=0,255,255
color12=255,0,0
color13=255,0,255
color14=255,255,0
color15=255,255,255

或在注册表中(例如 HKEY_CURRENT_USER\SOFTWARE\PROGRESS.7\Colors:

如果您的运行时使用 ini 或注册表基于启动参数 -basekey ini -ininame .

颜色 0 到 15 不应 修改。

为了便于阅读,请使用 enumpreprocessors 根据您在 ini 文件或注册表中定义颜色的方式来定义您想要的颜色。

// color.cls
enum color:

   define enum
      black       = 0
      dark-blue   = 1
      dark-green  = 2
      dark-cyan   = 3
      dark-red    = 4
      dark-purple = 5
      
      // ...      
      
      white = 15
      .

end enum.

不幸的是,当 fgcolor 需要时,枚举不会自动转换为其整数值:

define frame fr
with
   bgcolor integer( color:dark-purple )
   .
   
view frame fr.
wait-for close of frame fr.

有了预处理器,这会更简单一些:

// color.i
&global define color-black        0
...
&global define color-dark-purple  5
&global define color-white       15

然后使用它们:

{ color.i }

define frame fr
with
   bgcolor {&color-dark-purple}
   .
   
view frame fr.
wait-for close of frame fr.