Как определить цвета, которые будут использоваться в RPG для отображения подфайлов

Как я могу установить цвет для определенных записей в подфайле при выполнении некоторого условия? У меня есть файл отображения, в котором определены SFL и CTL. Куда я могу обратиться к индикаторам в файле DSP или использовать их в RPG для запуска соответствующей обработки.

Например:

       Name      Age       Location
      Rosell     26        Amsterdam
      Smarkon    31        London
      Jack       40        Chicago
      Jim        22        Mauritius

Теперь я хочу отображать записи в моем подфайле только тех, чей возраст больше 30. (возраст> 30) Я хочу, чтобы те записи, которые были получены, были другого цвета.


person techie    schedule 22.07.2012    source источник


Ответы (1)


Используйте пронумерованные индикаторы в файле дисплея для управления атрибутами ЦВЕТА следующим образом:

.....AAN01N02N03T.Name++++++RLen++TDpBLinPosFunctions+
                  S1AGE          3  0   5 12EDTCDE(Z)
    30                                  COLOR(BLU)

Эти числовые индикаторы в записях файла отображения передаются туда и обратно в вашу программу RPG в форматах записей файла отображения. Итак, в вашей RPG вы включаете или выключаете индикатор 30 в зависимости от значения возраста человека. (Примечание. Следующий пример относится к свободной ролевой игре.)

If S1AGE > 30;
  *IN30 = *On;
Else;
  *IN30 = *Off;
EndIf;

Или, если вам нравится лаконичный код в вашей RPG:

*IN30 = (S1Age > 30);
person Tracy Probst    schedule 23.07.2012
comment
Да, хотя обычно лучше наложить файл дисплея (с indds и infds) на тип DS, чтобы можно было называть переменные. Нет ничего лучше, чем работать с программой из 6000 строк, используя только цифры, чтобы сказать, включено ли что-то или выключено... - person Clockwork-Muse; 23.07.2012
comment
@Tracy Я пытался использовать AGE IFGT 30 SETON 13 ENDIF в своей программе RPG/400, я установил 13 в качестве индикатора цвета. Но это выдает ошибку компиляции: Записи факторов 1 и 2 не одного типаКак еще реализовать в rpg 400. - person techie; 23.07.2012
comment
@ X-Zero, это хороший момент, но я думаю, что он выходит за рамки этого ответа. - person Tracy Probst; 23.07.2012
comment
@techie, проверьте переменную AGE и убедитесь, что она числовая, а не буквенная. Если это альфа-поле, вы должны сначала преобразовать его в числовое. Если бы вы использовали RPG IV (ILE), вы могли бы использовать функцию %INT и поместить все это в блок MONITOR. - person Tracy Probst; 23.07.2012