Динамическое управление меню для создания MRU в приложении Windows в Progress. - PullRequest
1 голос
/ 07 февраля 2012

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

1 Ответ

2 голосов
/ 07 февраля 2012

создание статического меню 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.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...