У меня есть приложение Windows, написанное в Progress. Я работаю с версией 10.1C. Я хотел бы добавить функциональность MRU в меню, т. Е. Хочу добавить, удалить и изменить пункты меню в меню «Файл» приложения, чтобы показать самые последние файлы пользователя в том порядке, в котором они были использованы. Я делал это достаточно часто на нескольких других языках, это довольно распространенная функция и очень легко сделать.Динамическое управление меню для создания MRU в приложении Windows. Выполняется
Но как это сделать? На другом языке я мог бы создать 10 пунктов меню и просто сделать неиспользованные невидимыми, но вы не можете сделать это в процессе. Я не могу представить, почему.
В качестве альтернативы, я должен иметь возможность динамически создавать элементы меню по мере необходимости и добавлять их в конец списка MRU в меню «Файл», но я тоже не могу этого сделать: во-первых, я не могу указать, где в меню «Файл» элемент должен быть добавлен, он всегда добавляет его внизу, а во-вторых, я не могу добавить динамические меню в статические меню, поэтому я не могу добавить меню MRU в существующее меню «Файл». Я могу сделать это, если я сделаю все меню «Файл» динамичным (чего я действительно не хочу делать), но тогда я не могу добавить динамическое меню «Файл» в статическую панель меню. Это оставляет мне неприемлемую возможность сделать динамическую структуру всего меню.
Есть ли у кого-нибудь идеи?
Используя ответ ADE в ниже, вот краткий пример того, как я достиг. Изменение меток и значений пунктов 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 создаются так же, как здесь создается меню Exit, за исключением того, что я храню ручки в таблице temp.
В результате меню, как это:
File New Open -------- Print Setup Print -------- 1 Mru item 2 Mru Item 3 Mru Item -------- Exit
Спасибо Ade, но, как я упоминал в своем вопросе, это добавляет элементы меню в нижней части меню «Файл», которое выглядит неаккуратно и не соответствует стандартам GUI. Я не могу назвать это своими клиентами. Мне нужно, чтобы элементы MRU находились между двумя разделителями (ПРАВИЛАМИ) после печати и перед выходом. – RobertT
Я собираюсь предположить, что другого пути нет. Я могу работать с этим ответом, если я динамически создаю пункты меню «Правило и выход», поэтому я принимаю это как правильный ответ. Спасибо Аде! – RobertT