Динамическое управление меню для создания 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.
Вы будете хотеть следить за своими ручками (временная таблица?) кое-как.