「
利用者:Sukemaru
」を編集中 (節単位)
ナビゲーションに移動
検索に移動
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、さまざまなメリットもあります。
スパム攻撃防止用のチェックです。 決して、ここには、値の入力は
しない
でください!
==== サブメニュー ==== サブメニューを組みこむ場合、通常はそれぞれの PopupMenu オブジェクトをあらかじめ宣言しておくものだが、[[マクロリファレンス:PopupMenu インターフェイス#AddPopup メソッド|PopupMenu.AddPopup() メソッド]] 内の第二引数で定義することもできる。 [[マクロリファレンス:PopupMenu インターフェイス#Add メソッド|PopupMenu.Add() メソッド]] が大量に並んでいる項目群の一部をサブメニュー化して整理したくなったときなどに、サブメニューオブジェクトの宣言行を用意しなくて済むので便利である。 サブメニューを多重に含むコードの場合、字下げ(インデント)を活用することで、メニューの階層構造を把握しやすくできる。 <syntaxhighlight lang="javascript"> var mainMenu = CreatePopupMenu(); mainMenu.Add( "アイテム1", 1 ); mainMenu.AddPopup( "サブメニュー1", subMenu1 = CreatePopupMenu() ); subMenu1.Add( "アイテム2", 2 ); subMenu1.AddPopup( "サブメニュー2", subMenu2 = CreatePopupMenu() ); subMenu2.Add( "アイテム3", 3 ); var r = mainMenu.Track( 0 ); Alert( r > 0 ? mainMenu.GetText( r ) : "キャンセル" ); </syntaxhighlight> * 配列やオブジェクトからポップアップメニューの生成をするときにサブメニューを利用する場合、あらかじめサブメニューのラベルや各要素の振り分け方が決まっていれば難しいことはないが、<span style="color:#c00;">要素が不定数の配列やオブジェクトを複数のサブメニューに振り分けるのは簡単ではない…。</span> : → 組み込み関数「[[ポップアップメニューを手軽に扱う]]」や「[[階層化マクロメニュー]]」マクロなどのソースコードを参考にして自力でコードを組むか、組み込み関数「[[ポップアップメニューを「n*十件ずつ」のサブメニューに自動分割する]]」で一定数ごとにサブメニュー項目を自動生成して要素を放り込むしかない。 : ※ 自動分割サブメニューのページに「[[ポップアップメニューを「n*十件ずつ」のサブメニューに自動分割する#サンプルコード2|サンプルコード2]] (簡易版)」を追加した。 : 「[[ポップアップメニューを「n*十件ずつ」のサブメニューに自動分割する#サンプルコード1|サンプルコード1]]」の組み込み関数ではサブメニューオブジェクト専用の配列 smArray を用意して <code>smArray.push( CreatePopupMenu() );</code> → <code>menu.AddPopup( label, smArray[ smId ] );</code> としているが、サンプルコード2のようにループ処理内で <code>subMenu = CreatePopupMenu();</code> を使いまわしするだけでも新規のサブメニューアイテムを生成できるようだ。 * [[マクロリファレンス:PopupMenu インターフェイス#AddPopup メソッド|PopupMenu.AddPopup() メソッド]] では [[マクロリファレンス:PopupMenu インターフェイス#Add メソッド|Add() メソッド]] の第三引数(''meMenuChecked, meMenuGrayed, meMenuSeparator'')は使用できない。 : サブメニュー内のすべてのアイテムが無効(グレーアウト)になる条件でも、サブメニュー見出しを無効化することはできないので、サブメニュー見出しが表示されなくなるように(またはグレーアウトされるように) <code>PopupMenu.AddPopup()</code> 周りを [https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Control_flow_and_error_handling#if...else_statement if() 文] で囲うしかない(※ メニューの階層構造が複雑な場合に、ソースコードが見づらくなってしまうが…)。 <syntaxhighlight lang="javascript"> // e.g. 編集モードが Text ならサブメニューを表示する // ※ Text 以外ならグレーアウトさせた "サブメニュー" アイテムを表示 var menu1 = CreatePopupMenu(); var menu2 = CreatePopupMenu(); if ( document.Mode == "Text" ) { menu1.AddPopup( "サブメニュー", menu2 ); menu2.Add( "アイテム2", 2 ); } else { menu1.Add( "サブメニュー", 0, meMenuGrayed ); } menu1.Add( "アイテム1", 1 ); var r = menu1.Track( mePosMouse ); </syntaxhighlight> : また、上出の「自動分割サブメニュー」の組み込み関数を制作するさい、チェックつきアイテムを含むサブメニュー見出しにもチェックを付けられるようにしたかったが、これも無理だった。 :: → サブメニューオブジェクトを <code>AddPopup()</code> する前に孫アイテムを <code>Add()</code> しておき、チェックつきアイテムを含むかどうかの条件文でサブメニューオブジェクトのラベルを生成(サブメニューラベルの先頭に "'''*'''\t" や "'''✔'''" などを付加)してから <code>AddPopup()</code> することはできるが、 ''meMenuChecked'' とおなじチェックマークをつけられるわけではないので、コードが煩雑になるわりにあまり報われない努力となる…。
編集内容の要約:
MeryWikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MeryWiki:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の数式を計算してその答えを欄に入力してください (
ヘルプ
):
いちたすには =
キャンセル
編集ヘルプ
(新しいウィンドウで開きます)
スポンサーリンク
ナビゲーション メニュー
個人用ツール
ログインしていません
トーク
投稿記録
アカウント作成
ログイン
名前空間
利用者ページ
議論
日本語
表示
閲覧
編集
履歴表示
その他
検索
スポンサーリンク
スポンサーリンク
案内
メインページ
ヘルプ
よくある質問
マクロリファレンス
マクロライブラリ
プラグインライブラリ
構文ファイル
テーマ
寄付・開発支援
練習用ページ
開発室
開発者のブログ
ツール
スポンサーリンク