AS400 RPG DSPF字符级颜色变化(说明)

时间:2016-09-05 23:48:12

标签: ibm-midrange display

我在网站上发现了这个问题,我无法对此发表评论,所以我将其重新发布以进一步解释。 原文:AS400 RPG DSPF Character Level Color Change

作者似乎已经用评论回答了这个问题:

  

此问题现已解决。使用DSPF是不可能的,但可以改变   在此之前插入空白的特定字符的颜色   添加十六进制颜色值。

我是新手学习as / 400而我找不到任何关于在程序中添加空白的信息。

如何在程序的字段中添加空白,如何在程序中插入DSPATR()十六进制值?如果你能解释或指出我所做的文件,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

它很少有用,但它可以帮助理解基本显示终端输出的一些限制。

您可以通过以下方式插入空白:

name = 'Bob' + ' ' + 'Marl' ;

name 的'Bob'部分与'Marl'部分之间存在“空白”。我猜你认为这是一个非常微不足道的解释,但严重的是,这就是它的全部内容。可以使用任何数量的其他方法来“插入”“空白”,但它们都归结为这个基本想法。

至少,这就是那个小部分。这导致了5250显示器的字符级颜色控制的更复杂问题。

5250显示协议基于字符且基于字段。您可以在字段级别显示可打印字符和各种属性,例如颜色应用。也就是说,为了设置颜色,您必须将其设置为完整的显示字段,而不是字段中的每个字符。

实际上,每个字段必须将其属性保持在占据屏幕上单个位置的位模式中。检查任意数量的屏幕将显示在屏幕上的任何字段之前总是存在至少一个明显空白的屏幕位置(即使该位置位于前一行的右端)。因此,永远不会有两个直接相邻的字段在屏幕上同时具有不同的颜色。

然而,“字段”的基本定义可能会受到程序代码的某种程度的操纵。请考虑以下代码:

name = 'Bob' + x'32' + 'Marl' ;

现在,我们将十六进制值放在变量的中间,而不是空白。如果 name 变量是显示字段,并且屏幕上显示上述值,则终端/仿真器会将其解释为两个单独的字段。 “Bob”部分将具有 name 字段的显示文件中定义的任何属性。但是“字段”的其余部分将采用由x'32'位模式表示的属性,即“Marl”字符将全部为黄色。

显示屏上的字段后面还有另一个字符位置。这标志着该领域的结束。默认的十六进制值是x'20',但任何包含有效属性位模式的位置都将被解释为'end'。因此,该位置实际上可能包含下一个字段的属性。因此,只需要一个屏幕位置来标记一个字段的结尾和下一个字段的开头。 (这有点复杂,但我们可以忽略实际维护字段地址的方式。这里的相关部分是显示属性。)

好的,这显示了在某个开始屏幕地址控制颜色的一个基本部分。但它只暗示了如何操纵一个字段中的单个字符。这是丑陋的部分:

name = 'Bob' + x'32' + 'M' + x'20' + 'arl' ;

在该示例中,“Bob”部分将具有 name 字段定义的任何颜色。然后屏幕上会出现空白,然后是黄色的“S”,然后是屏幕上的另一个空白位置。之后,'arl'将显示“正常”显示属性。 (该“正常”部分与 name 字段定义为显示为无关的部分无关。但是,程序也可以控制字段级别的颜色,因此您的代码可以协调字段颜色< / em>使用您可能选择的任何属性值而不是x'20'。)

简而言之,如果您想要显示诸如“Bob Marl”之类的值,以便每个字母都有不同的颜色,那么您可以逃脱的最小值将延伸到“B o b M a r l”。通过在每个空白点中放置不同的适当十六进制值,每个字母可能不同。

不漂亮。这不是一个非常有吸引力的选择,既不是代码也不是屏幕上的效果。

换句话说,如果您希望单个角色拥有自己的颜色,则每个角色必须在屏幕前后都有一个位置显示为空白。

更好的选择是使用浏览器界面显示数据或任何其他允许完全控制客户端属性的方法。

答案 1 :(得分:1)

  

如何在程序的字段中添加空白,如何在程序中插入DSPART()十六进制值?

通过在引用的十六进制值(即x'28')前面加一个x来添加一个十六进制值。使用您在单词之间添加的十六进制值,它会添加您所指的“空白”。

displayLine = 'These word colors are:' + x'28' + 'RED' + x'20' + 'GREEN';

这将在屏幕上生成'这些单词颜色为:RED GREEN'。

  

如果您能解释或指出我所做的文档,我会的   荷。

原始答案有一个有用的链接:DSPATR Hex Codes

您可以使用这些十六进制代码为线条着色。

我建议您使用Screen Design Aid(SDA)来熟悉颜色和属性的工作原理(在SDA中按F1可以提供很多有用的信息)。只需在iSeries仿真器上的命令提示符下键入SDA即可。

我希望这能指出你正确的方向。