2012-02-07 7 views
1

У меня есть приложение 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 

ответ

2

создать статическое меню МЕНЮ-BAR-C-Win.

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

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

определить .... DEFINE VARIABLE hMRU # 1 КАК РУЧКА НЕТ-UNDO.

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

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. 

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

+0

Спасибо Ade, но, как я упоминал в своем вопросе, это добавляет элементы меню в нижней части меню «Файл», которое выглядит неаккуратно и не соответствует стандартам GUI. Я не могу назвать это своими клиентами. Мне нужно, чтобы элементы MRU находились между двумя разделителями (ПРАВИЛАМИ) после печати и перед выходом. – RobertT

+0

Я собираюсь предположить, что другого пути нет. Я могу работать с этим ответом, если я динамически создаю пункты меню «Правило и выход», поэтому я принимаю это как правильный ответ. Спасибо Аде! – RobertT