POPUP_MNU_RA: プチコンmkII用のポップアップメニュー
この関数の呼び出しは簡単で、基本は、メニューの表示項目とそれがクリックされたときに返すべき値のペアを連想配列 RA$[] に指定していくだけである。
RA$[0,0] = "Yes" RA$[0,1] = STR$(1) RA$[1,0] = "No" RA$[1,1] = STR$(0) RN = 2 R = -1: GOSUB @PUSH_R R = -1: GOSUB @PUSH_R GOSUB @POPUP_MNU_RA
上で -1 を二つ引数として渡している。ここの部分は本来、表示すべきコンソールウィンドウのサイズ W,H を指定すべきところだったが、開発の過程で @CON_PRINT の PRINT_SIZE_R を作り、エスケープシーケンスを含むような場合も、そういった指定なしで、ほぼ自動的にサイズを調整できるようになったため、自動で調節することを指定する -1 を入れて使うのが普通になった。
むしろ、ポップアップメニューのサイズ調整をしたければ、@POPUP_MNU_RA は @CON_PRINTで出てきた CLIP_C{X,Y,W,H} のクリッピング領域を認識して、位置やサイズを決めるので、そちらをいじっておくほうが、便利だろう。
なお、こういうポップアップメニューを使うとき特定のボタンに特定の項目を割り当てたいというのは、ニンテンドーDSがゲーム機である以上、当然の欲求だろう。
それは、メニュー表示項目に "\B[A]" などと指定することでできる。まぎらわしいが、これは @CON_PRINT の "\N[A]" とは違う。ただ "\B[A]" で指定しておいたのを、あとから指定するメニュー表示項目に "\N[A]" を含めてそのボタンが使えることを示すのがマナーというべきものだろう。
メニューの選択はタッチではなく、十字ボタンでもできる。はじめ選択されたところがない状態で、十字ボタンの上を押すと一番下が、下を押すと一番上が選択され「カーソル」が出る。「カーソル」があるところをタッチするか、そこで A ボタンを押すと、この関数は終了し、指定された文字列を返す。
その選択を最初から特定の項目にあるようにするのが、文頭の "\S" のエスケープシーケンスになる。
また、大事なこととして、B ボタンが押されるとキャンセル扱いとみなし、 RT$ に "NONE" の値が返る。これを防止したいときは "\B[B]" のメニュー項目を作っておけばよい。その値は "" を指定する。
メニュー項目中、値が "" のものは無視される。
以上を取り込んだ呼び出し例は次のようになる。キャンセルは認めず、Yes か No かを待つ。
RA$[0, 0] = "\N[Y]Yes" RA$[0, 1] = STR$(1) RA$[1, 0] = "\S\N[X]No" RA$[1, 1] = STR$(0) RA$[2, 0] = "\B[Y]" RA$[2, 1] = STR$(1) RA$[3, 0] = "\B[X]" RA$[3, 1] = STR$(0) RA$[4, 0] = "\B[B]" RA$[4, 1] = "" RN = 5 R = -1: GOSUB @PUSH_R R = -1: GOSUB @PUSH_R GOSUB @POPUP_MNU_RA PRINT R$
なお、連想配列を文字列化せず、そのまま渡すようにしているのは、メッセージの長さなどから、それらを連結すると往々にして 256 バイト制限に引っかかるからである。
■ |
仲間の関数
|
@POPUP_MNU_RA は、@MNU_CTRL_* という関数群を用いて実装している。この別系列として ctrllib.prg には @TCH_CTRL_* という関数群もあり、こちらはタッチセンス用に作られたもので、項目の長押し等にも対応したが、「ジェスチャ入力」などはできない。@MNU_CTRL_* のほうには @MNU_CTRL_* を使いながら @POPUP_MNU_RAを使えるよう専用のスタックがあり、コントローラを push pop して使えるが、それは @TCH_CTRL_* には対応していない(そもそも別管理なので @TCH_CTRL_* を使いながらポップアップは出せる)。
なお、項目の長押しを使うときは、それを最初のほうに登録しておかないと先に別の領域がセンスされることに注意を要する。
また、@MNU_CTRL_* はコンソール座標系で指定を行うが、@TCH_CTRL_* のほうはグラフィック座標系で行うというのも注意を要するところである。
■ |
配布物やライセンス、関連等
|
STACKLIBの記事をご参照ください。
更新: | 2013-02-22 |
初公開: | 2013年02月22日 18:17:34 |
最新版: | 2013年02月22日 19:08:24 |
2013-02-22 18:17:29 (JST) in プチコン | 固定リンク | コメント (0) | トラックバック (0)
トラックバック
他サイトなどからこの記事に自薦された関連記事(トラックバック)はまだありません。
» JRF のソフトウェア Tips:POPUP_MNU_RA: プチコンmkII用のポップアップメニュー (この記事)
コメント