コンテキストメニューのカスタマイズについて

【ご質問】
カスタマイズされたコンテキストメニューに
標準で右クリック時に表示されるコンテキストメニューの「印刷」と同等処理を行う
メニューを作成することは可能でしょうか?

また、特定コントロールのみを印刷するといった制御は可能でしょうか?

【回答】
print-graphicプロシージャを使用することで実現可能です。

★同等処理を行うには
print-graphicプロシージャに印刷対象として、
画面に表示されている全てのコンテンツを含むコンテナ(FrameやVBoxなど) を指定し、
「hstretch? = true」及び「ne-title = {get-base-url}」の2つのプロパティの設定を行います。
これにより、デフォルトの「印刷…」とほぼ同等の印刷を行うことができます。

{MenuAction
   label = “印刷…”,
    {on Action do
        {print-graphic
            contents,  ||画面に表示されている全コンテンツを含むFrameなど

          ||デフォルトの「印刷…」ボタンと同じスタイルで印刷する為に
          ||以下のプロパティを変更します。

             hstretch? = true,
             ne-title = {get-base-url}
         }
    }
}

★印刷対象の制御をするには
print-graphicプロシージャの印刷対象として、印刷したいコントロールを指定することによって、
特定のコントロールのみ印刷することが可能となります。

また、context-popupプロシージャの設定をする際に、
menu-pane-procのキーワード引数に対して、下記のように記述することにより、
コンテキストメニューを呼び出したコントロールの印刷を行うという設定もできます。 

menu-pane-proc =
{proc {vi:Visual}:MenuPane
    {return
        {MenuPane
            {MenuAction
                label = vi.name & “印刷”,
                {on Action do
                    {print-graphic
                    vi,
                    ne-title = {get-base-url}
                    }
                            }
                     }
              }
    }
}

この設定は、例えば、画面に表示されている全てのコントロールに対して、
そのコントロールのみの印刷を行うというコンテキストメニューを追加する場合などに使用できます。
(例えば、全てのコントロールを含むVBoxのchild-arrayを呼び、for文を使い、
その1つ1つのchildに対して、add-event-handlerで上記設定を行った
context-popupプロシージャを追加するという方法が考えられます。)