1

進行中のWindowsアプリケーションがあります。私はバージョン10.1Cで作業しています。メニューにMRU機能を追加したい。つまり、アプリケーションの[ファイル]メニューのメニュー項目を追加、削除、および変更して、ユーザーの最新のファイルを使用された順序で表示したい。私はこれを他の多くの言語で十分頻繁に行ってきました。これはかなり一般的な機能であり、非常に簡単に実行できます。

しかし、これを進行中の方法で行うにはどうすればよいでしょうか。別の言語では、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アイテムは、ハンドルを一時テーブルに格納することを除いて、ここで[終了]メニューが作成されるのと同じように作成されます。

結果は次のようなメニューになります。

        ファイル
          新しい
          開ける
          --------
          印刷設定
          印刷
          --------
          1Mruアイテム
          2Mruアイテム
          3Mruアイテム
          --------
          出口
4

1 に答える 1

2

静的メニュー MENU-BAR-C-Win を作成します。

静的サブメニュー「ファイル」m_file を追加します。

静的メニュー項目 (">>" を使用) "Exit" (m_Exit) を m_file に追加します。

define.... DEFIN VARIABLE hMRU#1 AS 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.

何らかの方法でハンドル (temp-table?) を追跡する必要があります。

于 2012-02-07T14:20:06.600 に答える