У меня есть приложение для 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 создаются так же, как здесь создается меню «Выход», за исключением того, что я храню дескрипторы во временной таблице.
В результате получается такое меню:
File
New
Open
--------
Print Setup
Print
--------
1 Mru item
2 Mru Item
3 Mru Item
--------
Exit