Progress-4GL 有颜色常数吗?

问题描述

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

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

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

当然,这是非常不可读的。

Progress-4GL 是否有任何颜色常量,例如 clRedclGreen、...,出于可读性原因我可以使用?如果没有,是否有此主题的在线“备忘单”?

谢谢

解决方法

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

progress.ini 文件中的 [Colors] 部分:

[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
color1=0,128
color2=0,128,0
color3=0,128
color4=128,0
color5=128,128
color6=128,0
color7=128,128
color8=192,192,192
color9=0,255
color10=0,255,0
color11=0,255
color12=255,0
color13=255,255
color14=255,0
color15=255,255

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

enter image description here

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

颜色 0 到 15 不应该修改。

,

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

// 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.