これは RuntimeRevolution 1.1.1 のヘルプにある文書を邦訳したものです。この文書の文責はUDIにあり、またUDIはこの文書についての一切の債務を負いません。 間違いがありましたら eudio@chabashira.co.jp までお知らせ下さい。この文書は必要と思われる時に適宜アップデートされます。

Help -> Revolution Documantation -> Development Guide -> Menus -> About... menus and the menu bar


About menus and the menu bar
メニューとメニューバー
==============

参照:
--------------
About containers, variables, and sources of value, Menu Manager Tutorial, How to assign a keyboard equivalent to a menu item, How to create a separator line in a menu, How to show or hide the menu bar, How to simulate a menu choice, Why don't the menus appear when I open a stack?, Tools menu > Menu Manager, defaultMenubar property, disable menu command, editMenus property, enable menu command, lockMenus property, menubar property


 Revolution にはメニューというオブジェクトは無い。代わりにボタンやスタックを使ってメニューを作り、特別なコマンドでそれを表示するか、そのメニューをメニューバーに入れる。

 このトピックでは、メニューバーと、それ以外のメニュー(コンテクストメニューやポップアップメニュー、オプションメニュー)について、またチェックマークのような特殊な機能の使い方や、スタックをメニューとして表示する方法について解説する。

 Tools メニューの 'Menu Manager' を利用して、簡単にクロスプラットホーム対応のメニューバーを作ることが出来る。このトピックにあるメニューバーについての情報を必要とするのは、Menu Manager を使わないと決めた人や、Menu Manager にない機能を使いたい人や、メニューバーが作られる時に、その舞台裏で何が起こっているかを知りたいと考えている人である。

 このトピックを充分に理解するためには、ボタンの作り方と、グループオブジェクトと、スクリプトの書き方についての知識が必要である。もし 'Getting Started' チュートリアルが済んでいるなら、このトピックを読むための情報は得られている。


Contents:
Menu Types
Button Menus
Creating Cascading Menus
Special Effects in Menus
Menu Bars on Unix and Windows Systems
Menu Bars on Mac OS and OS X Systems
Stack Menus


Menu Types
メニューの種類
 Revolution は、プルダウンメニュー、オプションメニュー( Mac OS や OS X でポップアップメニューと呼ばれているもの)、ポップアップメニュー( Mac OS や OS X でコンテクストメニューと呼ばれているもの)、そしてコンボボックスと言った、様々なメニューをサポートしている。

 それぞれのメニューはボタンとして実装されている。ボタンの style プロパティを menu に設定してクリックすれば、メニューが現れる。どの種類のメニューとして表示するかはボタンの menuMode プロパティで設定する。

 メニューバーのメニューもそれぞれプルダウンメニューボタンとして作られており、これらのボタンをグループ化してひとつのメニューバーを作る。メニューバーは、スタックウィンドウ上部( Unix と Windows システムのメニューの位置)に置くことが出来る。 Mac OS と OS X の標準的な位置にメニューバーを表示するには、スタックの menubar プロパティにメニューグループの名前をセットする。メニューバーにそれぞれのボタン名が現れ、メニューを引き出すとボタンの内容がメニュー項目として現れる。


Button Menus
ボタンメニュー
 メニューを作る最も簡単な方法は、ボタンを作ることである。ボタンの style を 'menu' にして、どのタイプのメニューにするかをボタンの menuMode に設定する。これらのプロパティは、ボタンオブジェクトのプロパティパレットにある Button タブの Style で設定したり、スクリプトからも設定することができる。

 メニュー内の個々のメニュー項目は、メニュー項目ごとに改行したメニューの内容を、ボタンの text プロパティに入れて設定する。これはスクリプトから設定することも出来るし、オブジェクトのプロパティパレットの Button タブにある 'Create button menu with contents' と書かれたボックスに入力しても良い。

 ボタンをクリックすると、指定された種類のメニューが現れて、そのメニューボタンに入れたテキストが個々のメニュー項目として表示される。

 ティップス: メニューが表示されるタイミングでメニュー内容を動的に変更するには、そのボタンの mouseDown ハンドラの中に、ボタンにメニュー項目を入れるスクリプトを置く。このメニューは新しいメニュー項目を反映して表示される。

 オプションメニューやコンボボックスメニューでは、選ばれたメニュー項目のテキストがボタンの label プロパティに保持される。

Handling the menuPick message:
menuPick メッセージの扱い方:
 ユーザーがメニューからメニュー項目を選択すると、Revolution は、ボタンに menuPick メッセージを送る。メッセージのパラメータは選択されたメニュー項目の名前である。ユーザーがメニュー項目を選択した時にアクションを起こすには、ボタンのスクリプトにこのような menuPick ハンドラを入れる:

  on menuPick theMenuItem
    switch theMenuItem
      case "メニュー項目1の名前"
       -- メニュー項目1の処理
        break
      case "メニュー項目2の名前"
       -- メニュー項目2の処理
        break
      case "メニュー項目3の名前"
       -- メニュー項目3の処理
        break
    end switch
  end menuPick            
Changing the currently-chosen menu item:
「最後に選択されたメニュー項目」を変更する:
 オプションメニューやコンボボックスメニューでは、ボタンの label プロパティを変更して「最後に選択されたメニュー項目」を変更することが出来る。

 オプションメニューで「最後に選択されたメニュー項目」を変更するには、ボタンの menuHistory を新しい項目の行番号で置き換える方法も使うことが出来る。これによって、ユーザーがメニューをクリックした時に、新しく設定した「最後に選択したメニュー項目」が確実にマウスポインタの下に来るようになる。


Creating Cascading Menus
カスケードメニューを作る
 カスケードメニュー(サブメニュー、pull-right メニュー、階層メニューなどとも呼ばれる)を作るには、サブメニューに置きたいメニュー項目の先頭に tab 文字を入れる。例えばメニューボタンにこのテキストを置くと、2つのメニュー項目、サブメニューを持つ3つめのメニュー項目、そして4つめに普通のメニュー項目が作られる:
 最初の項目
 2番目の項目
 サブメニューを持つ3番目の項目
   サブメニューの最初の項目
   サブメニューの2番目の項目
 最後の項目
 サブメニューの深さはメニュー項目名の先頭にある tab 文字の数で決まる。サブメニューは、tab 文字が1つ少ない、直前の行のメニュー項目のサブメニューになる。

 これは、メニュー項目には tab 文字を含むことが出来ないことを意味する。そしてボタンテキストの各行は、前の行より1つ以上多い tab 文字を持つ可能性がある。

 注意!: カスケードの combo box を作ることは出来ない。またカスケードの option menu は全プラットホームでは動作しない。一般的に、カスケードメニューを作るときは、pulldown メニューの一部として作る必要がある。

Cascading menus and the menuPick message:
カスケードメニューと menuPick メッセージ:
 ユーザーがカスケードメニューのメニュー項目を選択した時、menuPick メッセージのパラメータには、垂直バー( | )で区切られた、メニュー項目名と、そのサブメニューの親項目名が入っている。例えばユーザーが先ほどの例の 'サブメニューの2番目の項目' を選択すると、menuPick メッセージのパラメータはこのようになる:

 サブメニューを持つ3番目の項目|サブメニューの2番目の項目


Special Effects in Menus
メニューの特殊機能
 ボタンの内容の各行の先頭にこれらの特殊キャラクタを入れることで、メニュー項目の動作を変えることが出来る:

 -  ダッシュを入れた行はそれ自体が区切り線になる
 !c メニュー項目にチェックを入れる
 !n メニュー項目のチェックを外す
 !r メニュー項目の先頭にダイアモンドマークを付ける
 !u ダイアモンドマークを外す
 (  メニュー項目を使用不可にする

 サブメニューの項目にこれらの特殊キャラクタを含める場合は、tab 文字よりも前、行の先頭に特殊キャラクタを置かなければならない。

 この他に、メニューの任意の位置に入れられる2つの特殊キャラクタがある:

* メニュー文字列の任意の位置に & を入れると、この文字の次のキャラクタは、Windows システム上でメニュー項目を選択するアクセスキー(キーボードニモニック)になる。

* メニュー文字列の任意の位置に / を入れると、この文字の次のキャラクタは、メニューを実行するためのショートカットキーになる。 / に続くキャラクタはメニュー名には現れない。

 メニュー項目名の中に & や / を入れたい場合は、 && や // のように、これらの文字を重ねて指定する。

 これらの特殊キャラクタは、メニューを選択した時に送られてくる menuPick メッセージのパラメータには含まれない。

 ティップス: ボタンメニューのフォントやカラーを設定するには、ボタンのフォントやカラープロパティを変更する。

Enabling and disabling menu items:
メニュー項目の有効と無効
 特殊キャラクタ '(' を加えたり削除したりすることで、メニュー項目の有効と無効をスクリプトから設定することが出来る。しかし一般的には enable menu コマンドと disable menu コマンドを使う:
  enable menuItem 3 of button "My Menu"
  disable menuItem 4 of me
 これらのコマンドは単に、ボタンの内容の行頭にある特殊キャラクタ '(' を加えたり削除したりする。


Menu Bars on Unix and Windows Systems
Unix システムと Windows システムのメニューバー
 メニューバーを作るには、menuMode を true にしたメニューボタンをグループ化する。 Menu Manager を使えば自動的にメニューバーを作ってくれる。 Menu Manager を使うには、Tools メニューの 'Menu Manager' を選択する。

 メニューバーを自分の手で作るには、各メニューのボタンを作り、そのボタンの style を menu に、menuMode を pulldown に設定する。また、これらのプロパティをハンドラから設定したり、或いは単に Object メニューの 'New Control' サブメニューにある 'Pulldown Menu' を選択することによっても作ることが出来る。

 次にメニュー項目をボタンの内容に加える。各ボタンのスクリプトには menuPick ハンドラを入れ、そのメニュー項目が選択された時に実行したいスクリプトをそこに置く。

 最後にこれらのボタンを選択して、グループ化してから、メニューの定位置であるウィンドウ上部に移動する。 Windows システムではグループの textFont を、Windows のメニューで標準的に使われる 'MS Sans Serif' に設定する。

 注意!: ボタンは重ねて置いてはいけない。重ねて置かれたボタンは、ユーザーがメニューを使おうとした時に予想外の挙動を引き起こす。


Menu Bars on Mac OS and OS X Systems
Mac OS と OS X システムのメニューバー
 Mac OS のメニューバーを作るには、まずこれまで述べた Unix や Windows のメニューバーの作り方と同じステップを踏む。つまり、menuMode プロパティを pulldown にしたボタンのグループを、スタックウィンドウの上部に置く。

 次にスタックの menubar プロパティに、そのグループの名前をセットする。するとそのメニューがスクリーン上部のメニューバーに現れ、メニューボタングループを隠すためにウィンドウが小さくなり、ウィンドウの内容が移動する。(メニューはメニューバーの中にあるので、メニューボタンがスタックウィンドウ上に見えている必要はない)

The default menu bar:
デフォルトのメニューバー:
 もし同じアプリケーション内にある他のスタックが自分のメニューバーを持っていない場合は、スタックの menubar プロパティにセットしたメニューグループ名を、defaultMenubar グローバルプロパティにもセットする。 defaultMenubar は、自分のメニューバーを持たないスタックが使用するメニューバーの名前である。

 ティップス: Revolution の開発環境上でカスタムメニューバーを使うためには、defaultMenubar にメニューグループ名を設定して、Revolution のメニューバーを上書きしなければならない。

The layer of menu buttons:
メニューボタンのレイヤー
 Mac OS と OS X システム上でメニューバーを正しく働かせるには、グループ内のメニューがレイヤー順に並んでいる必要がある。つまりファイルメニューは1番、エディットメニューが2番、という具合である。( Menu Manager はこれを自動的に行う。レイヤーについて注意が必要なのは、Menu Manager を使わずにメニューバーを作る時だけである)

The Help menu and the 'About This Application' menu item:
ヘルプメニューと 'About This Application' メニュー項目:
 Revolution は、Mac OS のメニューバーをセットアップする時、(ボタン名がそうなっていなくても)最後のボタンを自動的にヘルプメニューとして扱う。標準的な 'About Balloon Help' と 'Show Balloons' メニュー項目(訳注:日本語システムでは「バルーン表示」と「バルーンを隠す」)が自動的に挿入される。ヘルプメニューのボタンにこれらの項目を含める必要は無いし、またこれらをヘルプメニューから取り除く手段も無い。

 Revolution はヘルプメニューの最後のメニュー項目を 'About This Application' (訳注:日本語システムでは「〜について」)の位置、つまりアップルメニューの一番上に移動する。したがって、ヘルプメニューボタンの最後のメニュー項目は、'About' 項目として適切なものでなければならない。このメニュー項目の上には区切り線(ダッシュ: - )が必要で、区切り線の上には、ヘルプメニューに置くためのメニュー項目がひとつ以上必要である。

Changing menus dynamically:
メニューを動的に変更する:
 mouseDown ハンドラを使って、メニューが表示されるタイミングでメニュー内容を動的に変更するには、mouseDown ハンドラをグループスクリプトに置く必要がある。 Mac OS のメニューバーでメニューが開く時、mouseDown メッセージを受け取るのはボタンではなくグループである。

The editMenus property:
editMenus プロパティ
 スタックの menubar プロパティにグループの名前をセットすると、メニューボタンが見えなくなるように、ウィンドウをリサイズして内容を上にずらす。これを元に戻してメニューボタンを見たり、選択したり、編集出来るようにするには、editMenus プロパティを true にする。スタックウィンドウがボタンが見えるようにリサイズされ、Revolution の開発環境からこれらのメニューボタンを操作出来るようになる。

 再びスタックウィンドウを小さくしてメニューボタンが隠れるようにするには、editMenus プロパティを true に戻す。(訳注:おそらく原文の間違い。 false と思います)


Stack Menus
スタックメニュー
 ボタンメニューは標準的なメニューとして最も良く使われる。しかし、例えばテキストではなく絵を使ったポップアップメニューなど、ボタンメニューでは実現できないようなメニューを作りたいなら、スタックメニューが使えるかも知れない。

Displaying a stack menu:
スタックメニューを表示する:
 スタックメニューはボタンメニューと同じように、ボタンに関連付けることが出来る。しかしそのボタンをクリックした時に現れるメニューは、ボタンの内容ではなく、スタックである。

 スタックメニューは pulldown、popup、option コマンドを使って、ボタンと無関係に表示することも出来る。これらのコマンドを mouseDown ハンドラから実行すると、通常はマウスポインタの下からメニューが現れる:
  on mouseDown -- カードスクリプト
    popup stack "My Menu Panel"
  end mouseDown
Creating a stack menu:
スタックメニューを作る:
 スタックメニューを作るには、まずスタックを作り、そこにメニュー項目となるコントロールを配置する。スタックメニューは、スタックと、メニュー項目であるオブジェクトで構成されており、メニュー項目は mouseEnter、mouseLeave、mouseUp といったマウスメッセージを受け取る。

 ユーザーがスタックメニューの項目を選択した時、そのコントロールには mouseUp メッセージが送られる。選択されたメニュー項目が反応するためには、menuPick ではなく mouseUp をオブジェクトのスクリプトに置く。

 スタックメニューの作り方は標準的なメニューと似ていて、まず各メニュー項目のボタンをスタックに作る。これらのボタンの autoArm と armBorder プロパティは true にセットする。または、Object メニューの 'New Control' サブメニューにある 'Menu Item' を選択して、これらのプロパティが適切にセットされたボタンを作ることも出来る。

 気を付けなければならないのは、スタックの大きさを、メニューに適切なサイズにすることである。忘れてはならない。メニューを開いた時に現れるのは、スタックである。

 最後に、スタックの参照をボタンの menuName プロパティにセットするか、オブジェクトのスクリプトの mouseDown ハンドラの中で、pulldown、popup、option コマンドのいずれかを使う。ボタンやオブジェクトをクリックすれば、スタックメニューが現れる。(訳注: menuName プロパティを使った場合は、スタックウィンドウがそのまま現れるようです。コマンドを使って開いた場合は、タイトルバーが省略されてメニューらしい動作と外観になります)

邦訳/文責:UDI
2003.01.05
2003.01.10

inserted by FC2 system