AS400 RPG DSPF角色关卡改色(解说)

AS400 RPG DSPF Character Level Color Change (explanation)

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

作者好像自己用评论回答了这个问题:

This question is resolved now. Not possible using DSPF but can change colors of specific character by inserting a blank before then and adding a hexadecimal value of colors.

我刚开始学习 as/400,但我找不到关于在程序的字段中添加空白的任何信息。

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

How do I add a blank in a field in a program and how do I insert a DSPART() hex value in my program?

您可以通过在引用的十六进制值(即 x'28')前放置一个 x 来添加一个十六进制值。使用您在单词之间添加的十六进制值,它会添加您所指的 "blank"。

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

这将在屏幕上生成为 'These word colors are: RED GREEN'。

If you can explain or point me to documentation that does, I would be grateful.

原来的回答有用link:DSPATR Hex Codes

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

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

我希望这能为您指明正确的方向。

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

你通过这样的方式插入一个空白:

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

然后 "blank" 在 name 的 'Bob' 部分和 'Marl' 部分之间。我猜你认为这是一个非常微不足道的解释,但说真的,这就是它的全部。 "insert" 和 "blank" 可以使用许多其他方法,但它们都归结为该基本思想。

至少,这就是那一小部分的全部内容。这就引出了更复杂的 5250 显示器字符级颜色控制问题。

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

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

但是,"field" 的基本定义可能会在某种程度上被程序代码操纵。考虑这段代码:

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

现在,我们在变量中间放入了一个十六进制值,而不是空白。如果 name 变量是一个显示字段并且上面的值在屏幕上,terminal/emulator 将把它解释为两个单独的字段。 'Bob' 部分将具有显示文件中为 name 字段定义的任何属性。但其余 'field' 将采用 x'32' 位模式表示的属性,即 'Marl' 字符将全部为黄色。

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

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

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

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

简而言之,如果您想要显示 'Bob Marl' 这样的值,以便每个字母都具有不同的颜色,您可以逃脱的最小值将扩展到 'B o b M a r l'。通过将不同的适当十六进制值放入每个空白点,每个字母都可以不同。

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

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

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