Динамическое управление меню для создания MRU в приложении Windows в Progress.

У меня есть приложение для Windows, написанное на Progress. Я работаю с версией 10.1C. Я хотел бы добавить функциональность MRU в меню, т.е. я хочу добавлять, удалять и изменять пункты меню в меню "Файл" приложения, чтобы показывать самые последние файлы пользователя в том порядке, в котором они были использованы. Я делал это достаточно часто на многих других языках, это довольно распространенная функция, и ее очень легко сделать.

Но как сделать это в прогрессе? На другом языке я мог бы создать 10 пунктов меню и просто сделать неиспользуемые элементы невидимыми, но вы не можете сделать это в Progress. Я не могу представить почему.

Кроме того, я мог бы иметь возможность динамически создавать пункты меню по мере необходимости и добавлять их в конец списка MRU в меню "Файл", но я тоже не могу этого сделать: во-первых, я не могу указать, где в меню "Файл" элемент должен быть добавлен, он всегда добавляет его внизу, и, во-вторых, я не могу добавить динамические меню в статические меню, поэтому я не могу добавить свои меню MRU в существующее меню "Файл". Я могу сделать это, если я сделаю все меню "Файл" динамическим (что я действительно не хочу делать), но тогда я не смогу добавить динамическое меню "Файл" в статическую строку меню. Это оставляет меня с неприемлемым вариантом сделать всю структуру меню динамичной.

У кого-нибудь есть идеи?



Используя ответ Аде ниже, вот краткий пример того, как я достиг этого. Изменение меток и значений элементов MRU не требует никаких действий, просто установите соответствующие атрибуты, но для добавления новых элементов MRU необходимо удалить и заново создать пункт меню "Выход":

/* Remove the RULE and Exit menu items */
IF VALID-HANDLE(ghMenuRule) THEN DELETE OBJECT ghMenuRule.
IF VALID-HANDLE(ghMenuExit) THEN DELETE OBJECT ghMenuExit.

/*

...
Coding to add MRU items.
...

*/


/* Create the RULE and Exit menu items */
CREATE MENU-ITEM ghMenuRule
  ASSIGN
    SUBTYPE = "RULE"
    PARENT    = MENU m_File:HANDLE IN MENU MENU-BAR-C-Win.

CREATE MENU-ITEM ghMenuExit
  ASSIGN
    PARENT    = MENU m_File:HANDLE IN MENU MENU-BAR-C-Win
    LABEL     = "E&xit"
  TRIGGERS:
      ON CHOOSE PERSISTENT RUN ExitApp IN THIS-PROCEDURE.
  END TRIGGERS.

Фактические элементы MRU создаются точно так же, как здесь создается меню "Выход", за исключением того, что я храню дескрипторы во временной таблице.

В результате получается такое меню:

 файл
          новый
          открыто
          --------
          Настройка печати
          Распечатать
          --------
          1 мру предмет 
          2 мру предмет
          3 мру предмет
          --------
          Выход

1 ответ

Решение

Создать статическое меню MENU-BAR-C-Win.

добавить статическое подменю "Файл" m_file.

добавить статический пункт меню (используйте ">>") "Выход" (m_Exit) в m_file.

определить.... ОПРЕДЕЛИТЬ ПЕРЕМЕННОЙ hMRU#1, КАК РУЧКА НЕТ-ОТМЕНА.

создать кнопку для динамического...

  CREATE MENU-ITEM hMRU#1
  ASSIGN
    PARENT    = MENU m_File:HANDLE IN MENU MENU-BAR-C-Win
    LABEL     = "MRU#1"
  TRIGGERS:
      ON CHOOSE PERSISTENT RUN SomeThing IN THIS-PROCEDURE.
  END TRIGGERS.

Вы будете хотеть следить за своими ручками (временная таблица?) кое-как.

Другие вопросы по тегам