1

我有一个正在编写的 Windows 应用程序。我正在使用 10.1C 版本。我想在菜单中添加 MRU 功能,即我想在应用程序的文件菜单中添加、删除和修改菜单项,以按使用顺序显示用户最近的文件。我已经在许多其他语言中经常这样做了,这是一个非常常见的功能并且很容易做到。

但是如何在进行中做到这一点呢?在另一种语言中,我可以创建 10 个菜单项并简单地使未使用的菜单项不可见,但您不能在 Progress 中执行此操作。我无法想象为什么。

或者,我应该能够根据需要动态创建菜单项并将它们添加到文件菜单中 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 项目的创建与此处创建的退出菜单一样,只是我将句柄存储在临时表中。

结果是这样的菜单:

        文件
          新的
          打开
          --------
          打印设置
          打印
          --------
          1 个 Mru 项目
          2 Mru 项目
          3 Mru 项目
          --------
          出口
4

1 回答 1

2

创建静态菜单 MENU-BAR-C-Win。

添加静态子菜单“文件”m_file。

将静态菜单项(使用“>>”)“退出”(m_Exit)添加到 m_file。

定义.... 将变量 hMRU#1 定义为 HANDLE NO-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.

你会想以某种方式跟踪你的句柄(临时表?)。

于 2012-02-07T14:20:06.600 回答