ダイアログ
ダイアログを使うことで、画面に臨時の情報を表示したり、ユーザに値の入力を求めることができます。また、デバッグ目的に使うこともできます。
■ダイアログを開いて表示
ダイアログのグループでは最も簡単に使えるものです。
何らかの情報を一時的にポップアップで表示するのに使えます。OKボタンを押せばダイアログが閉じて元の画面に戻ります。
簡易的な情報表示のほか、プログラムのところどころで変数の内容などを表示させればデバッグ目的にも使えます。
機能的には「ちょっと表示」と似ていますが、こちらは情報を長い間表示できる(「ちょっと表示」は短時間で自動的に消える)点が異なります。
文法
<タイトル>と <メッセージ>を ダイアログを開いて表示 → ・
記述例
※ファイル名 Dialog/SpDgInfo.src
ボタンクリック処理は 本定義 (ボタンID → 戻値)
_ボタンIDは ID ※←使わない
_日時文字列は 文字列
_ボタンIDに 入れ
日時を値で得て "Y年M月D日 h時m分"で スタンプを日時文字列に変換 _日時文字列に 入れ
「現在の日時」と _日時文字列を ダイアログを開いて表示し
0を 返し。
メインとは (・ → ・)
_ボタン1は ID
ボタンビューを生成し _ボタン1に 入れ
20を _ボタン1に 文字のサイズを設定し
「時刻を表示する」を
_ボタン1に 文字を設定し
_ボタン1を ビューをアクティビティに追加し
_ボタン1に クリックリスナーを登録する。
トップ画面でテストボタンをタップ
ダイアログが開いた
先に示した「ダイアログを開いて表示」は簡易的なダイアログ表示なので別格とすると、その他のすべての種類のダイアログについては共通の文法があります。(注:確認ダイアログだけでなく、リストダイアログ、ラジオボタンダイアログなど、全てのダイアログについて以下の項目については共通です)
文法
(ボタンが押されたときのイベント処理・・全ダイアログ共通・・)
○○ダイアログクリック処理とは (ID、ボタン番号 → 戻値)
↑単語名は自由
〜
〜。
(ダイアログを開く処理・・全ダイアログ共通・・)
○○ダイアログクリック処理の Mコードで ダイアログを生成 → ID
<タイトル>を <ID>に ダイアログタイトルを設定 → ・
<メッセージ>を <ID>に ダイアロググメッセージを設定 → ・
確認ダイアログのみで使えます
<真/偽>を <ID>に ダイアログに戻るボタン有効を設定 → ・
確認ダイアログのみで使えます
<ボタンラベル>を <ID>の <ボタン番号>に ダイアログボタンを設定 → ・
ボタン番号として以下のシンボルが利用できます
「Yesボタン番号」 数値 −1
「Noボタン番号」 数値 −3 ←確認ダイアログのみ
「Cancelボタン番号」 数値 −2
<ID>で ダイアログを開く → ・
情報を表示してユーザにその後どうするかの確認(Yes, No, Cancelなど)を求めるもので、多目的に使えるダイアログです。
(注:エラーメッセージの表示など単なる情報表示で応対を尋ねる必要がないのであれば本章はじめに解説した「ダイアログを開いて表示」のほうが簡単です)
文法
○○ダイアログクリック処理とは 本定義 (ID、ボタン番号 → 戻値)
↑単語名は自由
〜
〜。
○○ダイアログクリック処理の Mコードで ダイアログを生成 → ID
<タイトル>を <ID>に ダイアログタイトルを設定 → ・
<メッセージ>を <ID>に ダイアロググメッセージを設定 → ・
<真/偽>を <ID>に ダイアログに戻るボタン有効を設定 → ・
<ボタンラベル1>を <ID>の Yesボタン番号に ダイアログボタンを設定 → ・
<ボタンラベル2>を <ID>の Noボタン番号に ダイアログボタンを設定 → ・ (任意)
<ボタンラベル3>を <ID>の Cancelボタン番号に ダイアログボタンを設定 → ・ (任意)
<ID>を ダイアログを開く → ・
記述例
※ファイル名 Dialog/SpDgYesNo.src
確認ダイアログクリック時の処理とは (ID、ボタン番号 → 戻値)
_IDは ID
_ボタン番は 変数
_IDと _ボタン番に 入れ
_ボタン番で
事例をとる
Yesボタン番号なら 「Yesの」をつみ
Noボタン番号なら 「Noの」をつみ
Cancelボタン番号なら 「Cancelの」をつみ
例外なら 「不明な」をつみ
事例終り
「ボタンが押されました」を 合成し ちょっと表示し
_IDを ダイアログのIDを抹消し
0を 返す。
確認ダイアログを開くとは (・ → ・)
_IDは ID
確認ダイアログクリック時の処理の Mコードで
ダイアログを生成し
_IDに 入れ
「デザートの確認」を _IDに ダイアログタイトルを設定し
「ランチにデザートを付けますか?」を _IDに ダイアログメッセージを設定し
真を _IDに ダイアログに戻るボタン有効を設定し
「Yes」を _IDの Yesボタン番号に ダイアログボタンを設定し
「No」を _IDの Noボタン番号に ダイアログボタンを設定し
「Cancel」を _IDの Cancelボタン番号に ダイアログボタンを設定し
_IDで ダイアログを開く。
ボタンクリック処理は 本定義 (ボタンID → 戻値)
_ボタンIDは ID ※←使わない
_ボタンIDに 入れ
確認ダイアログを開き
0を 返し。
メインとは (・ → ・)
_ボタン1は ID
ボタンビューを生成し _ボタン1に 入れ
20を _ボタン1に 文字のサイズを設定し
「確認ダイアログのテスト」を
_ボタン1に 文字を設定し
_ボタン1を ビューをアクティビティに追加し
_ボタン1に クリックリスナーを登録する。
トップ画面でテストボタンをタップ
ダイアログが開いた
ダイアログを閉じた後の情報表示

上記を解説します。
処理単語「確認ダイアログクリック時の処理」
ダイアログのボタンがタップされたときの対応処理を記述します。
ボタン番号で判定し、対応する処理をおこなうことになりますが、数値で比較するのではなく、上記プログラム例のようにボタン番号のシンボル(「Yesボタン番号」「Noボタン番号」「Cancelボタン番号」)を使うと分かりやすいプログラムになります。
処理の最後で「ダイアログのIDを抹消」を呼び出し、生成したダイアログIDを抹消しておきます(これをしないと複数回ダイアログを開くときにIDを無駄に消費してしまいます)。
処理単語「確認ダイアログを開く」
まず「ダイアログを生成」によって新しいダイアログのIDを得て、以後、そのIDに対してタイトルの設定などをおこないます。「ダイアログを生成」にはダイアログクリック時の処理をおこなう処理単語のMコードを渡します。上記サンプルでは、
確認ダイアログクリック時の処理の Mコードで
ダイアログを生成し
_IDに 入れ
のように記述しています。
ボタンの機能を割り当てる処理単語「ダイアログボタンを設定」ですが、「Yes」ボタンだけ設置してもいいし(その場合はラベル表示は「OK」のほうが似合うでしょう)、上記例のように「Yes」「No」「Cancel」と3つ設定することもできます。
処理単語「ダイアログに戻るボタン有効を設定」はダイアログが表示されているときにAndroid標準の戻るボタンでダイアログをキャンセルできるかを指定するものです。この記述は任意で、書かなければ「戻る」ボタンではダイアログが閉じません。また戻るボタンでダイアログを閉じた場合は最初からダイアログが無かったかのような動作をするためイベントは発生せず、この点がCancelボタンのタップとは異なります。
(注:「ダイアログに戻るボタン有効を設定」は確認ダイアログのみで機能し、他のダイアログではこれを指定しなくても戻るボタンは有効です)
処理単語「ボタンクリック処理」
主画面に配置された「確認ダイアログのテスト」のボタンが押されたときのイベント処理です。
全体の流れ
主画面で「確認ダイアログのテスト」のボタンが押されると「ボタンクリック処理」に入るのですぐに「確認ダイアログを開く」を呼び出してダイアログを表示します。
ダイアログ内でいずれかのボタンが押されると「確認ダイアログクリック時の処理」が呼び出されます。ここにに入ったときスタックにはIDとボタン番号が積まれています。スタックTOPの「ボタン番号」は押されたボタンを識別する整数です。特別に予約されている、Yes, No, Cancel の3ボタンについては負の値(-1, -2, -3)が対応します。ボタン番号を判断して分岐するのに、-1 などと書くと意味が分かりにくいため、定数「Yesボタン番号」などのシンボルを使うことを薦めます。
このサンプルではボタンの種類が判明したあと、単にボタンの種類を表示しているだけですが、実用的なアプリではここからさらにイベント発生させるため何らかの有用な戻値を積んで終了します。たとえば、OKボタンが押されたら次におこなうべきイベントを発生させることになります。
本章のすべてのダイアログのサンプルアプリにおいては、ダイアログクリック処理の定義の最後で処理単語「ダイアログのIDの抹消」を呼び出しています。ダイアログはたとえば OKボタンのタップなどで表示上は消えるのですが「ダイアログを生成」によって割り当てられたIDはMindのライブラリ内には残るため、このIDの解放のため本処理単語の呼び出しが必要です。1回のダイアログの利用の最後でその都度IDを抹消してください。
ほとんどの場合はダイアログクリック処理の最後で本処理単語を呼び出せば良いのですが、Androidの戻るボタンでダイアログを閉じた場合はイベントが発生しないためそのタイミングでは抹消することができません。
対策の一つはは、ダイアログを開くときにIDを大域変数に記憶しておき、次に同じダイアログを開くときにその変数を見て値が入っていれば前回IDを抹消して同時に変数もクリアしておく・・などの工夫が必要になります。
なるべく戻るボタンでダイアログを閉じさせないよう、すべてのダイアログに Cancelボタンを配置しておき、なるべくCancelボタンタップで閉じさせるよう誘導することを勧めます。
複数のリストを表示し、そのうち1つを選択するものです。
文法
(以下は全ダイアログ共通)
(注:「ダイアロググメッセージを設定」はリストダイアログでは使えません)
○○ダイアログクリック処理とは (ID、ボタン番号 → 戻値)
↑単語名は自由
〜
〜。
○○ダイアログクリック処理の Mコードで ダイアログを生成 → ID
<タイトル>を <ID>に ダイアログタイトルを設定 → ・
<ボタンラベル>を <ID>の Cancelボタン番号に ダイアログボタンを設定 → ・ (任意)
<ID>を ダイアログを開く → ・
(以下はリストダイアログ向け)
<連結項目>を <ID>に ダイアログにリスト項目を設定 → ・
記述例
※ファイル名 Dialog/SpDgList.src
項目配列は 文字列定数配列
「りんご」 「バナナ」 「みかん」 「イチゴ」。
選択項目をダンプとは (ボタン番号 → ・)
_ボタン番は 変数
_ボタン番に 入れ
_ボタン番が 1より 小さい
ならば 「Cancelされました」を
さもなければ
項目配列(_ボタン番)と 「が選択されました」を 合成したものを
つぎに
ちょっと表示する。
リストダイアログクリック時の処理とは (ID、ボタン番号 → 戻値)
_IDは ID
_ボタン番は 変数
_IDと _ボタン番に 入れ
_ボタン番で 選択項目をダンプし
_IDを ダイアログのIDを抹消し
0を 返す。
リストダイアログを開くとは (・ → ・)
_IDは ID
_タイトルは 文字列定数 「好きなくだもの」
_項目区切りは 定数 '/'
_連結項目は 文字列実体 長さ 128桁
(項目配列の全要素を連結して1本の文字列にする)
(→例:「/りんご/バナナ/みかん/イチゴ」) ※注:連結の先頭は区切り文字であること
_連結項目を クリアし
項目配列の 要素数を
回数指定し
_項目区切りを _連結項目に 一文字追加し
項目配列(回数)を _連結項目に 追加し
繰り返し
(ダイアログを開く)
リストダイアログクリック時の処理の Mコードで
ダイアログを生成し
_IDに 入れ
_タイトルを _IDに ダイアログタイトルを設定し
_連結項目を _IDに ダイアログにリスト項目を設定し
「Cancel」を _IDの Cancelボタン番号に ダイアログボタンを設定し
_IDで ダイアログを開く。
ボタンクリック処理は 本定義 (ボタンID → 戻値)
_ボタンIDは ID ※←使わない
_ボタンIDに 入れ
リストダイアログを開き
0を 返し。
メインとは (・ → ・)
_ボタン1は ID
ボタンビューを生成し _ボタン1に 入れ
18を _ボタン1に 文字のサイズを設定し
「リストダイアログのテスト」を
_ボタン1に 文字を設定し
_ボタン1を ビューをアクティビティに追加し
_ボタン1に クリックリスナーを登録する。
トップ画面でテストボタンをタップ
リストダイアログが開いたら「みかん」をタップ
選択結果がモニタ表示された

処理単語「リストダイアログを開く」
まずリストの項目群(りんご、バナナ、・・・)はソースコード冒頭にある文字列定数配列「項目配列」で定義されていますが、これを元にして項目配列の全要素を連結して1本の文字列を作っています(変数「_連結項目に格納)。このサンプルアプリで作成した1本化文字列は以下のような内容となります。
↓区切り記号
/りんご/バナナ/みかん/イチゴ
↑項目1 ↑項目2 ↑項目3 ↑項目4
上記文字列は先頭に '/' を置いています。このあと続く項目群の区切り記号が '/' であることを表します。区切り記号は何でも構いませんが、項目自体に使われない文字である必要があります。'/' のほかには ','(カンマ)なども良いでしょう。
ダイアログ中へのボタンの設置ですが、リストダイアログでは項目をタップした時点で自動的に閉じるため、「OK」ボタンを置くのは意味がありません。置くとしたらCancelボタンのみとなるでしょう。
またダイアログが開いているときにAndroid標準の戻るボタンは有効でダイアログが閉じます。効果としてはダイアログは最初から無かったかのように振舞うため(イベントは発生しない)Cancelボタンのタップとは異なります。
処理単語「リストダイアログクリック時の処理」
ダイアログが開いたあと、たとえば3項目目の「みかん」をタップするとイベントが発生しこの処理単語が呼び出されます。このときボタン番号=3が渡されます。
ボタン番号はリストにN個の表示をした場合には1〜Nの整数となります(1番から数えます)。そのほかに、Cancelボタンを配置した場合には負の値も返されるのでそのケースにも対応してください。このサンプルアプリでは、
_ボタン番が 1より 小さい
ならば 「Cancelされました」を
さもなければ
項目配列(_ボタン番)と 「が選択されました」を 合成したものを
つぎに
ちょっと表示する。
のようにして処理を分岐しています(このサンプルではボタン番号=0が返されることはないため、「_ボタン番号が 負? ならば ・・」でも構いません)。
複数のラジオボタンを表示し、そのうち1つをタップするものです。
リストダイアログと似ていますが、リストダイアログが項目タップで直ちにダイアログを終了するのに比べ、ラジオボタンダイアログは項目タップではまだ閉じず、最後にOKボタンをタップすることで確定する点が異なります。
文法
(以下は全ダイアログ共通)
○○ダイアログクリック処理とは (ID、ボタン番号 → 戻値)
↑単語名は自由
〜
〜。
○○ダイアログクリック処理の Mコードで ダイアログを生成 → ID
<タイトル>を <ID>に ダイアログタイトルを設定 → ・
<ボタンラベル1>を <ID>の Yesボタン番号に ダイアログボタンを設定 → ・
<ボタンラベル3>を <ID>の Cancelボタン番号に ダイアログボタンを設定 → ・ (任意)
<ID>を ダイアログを開く → ・
(以下はラジオボタンダイアログ向け)
<連結項目>と <デフォルト位置>を <ID>に ダイアログにラジオボタン項目を設定 → ・
記述例
※ファイル名 Dialog/SpDgRadio.src
項目配列は 文字列定数配列
「りんご」 「バナナ」 「みかん」 「イチゴ」。
確定項目をダンプとは (ボタン番号 → ・)
_ボタン番は 変数
_ボタン番に 入れ
_ボタン番が ゼロ?
ならば 「項目は未確定です」を ちょっと表示し
さもなければ
項目配列(_ボタン番)と 「 で確定しました」を ちょっと表示2し
つぎに
。
前回の項目位置は 変数。 ※←二度目以降のダイアログを開くときのデフォルト位置に使う
ラジオボタンダイアログクリック時の処理とは (ID、ボタン番号 → 戻値)
_IDは ID
_ボタン番は 変数
_タイプ通番は 変数
_番号は 変数
_IDと _ボタン番に 入れ
_ボタン番が 0 以上
ならば ※ 項目のクリック ※
_ボタン番を 前回の項目位置に 入れ
_ボタン番で 確定項目をダンプし
さもなければ
※ 確定ボタン ※
_ボタン番が Yesボタン番号 等しい
ならば 「?Yesボタンが押された?」を ちょっと表示し
さもなければ
_ボタン番が Cancelボタン番号 等しい
ならば 「Cancelしました」を ちょっと表示し
さもなければ
「不明なボタンが押されました」を ちょっと表示し
つぎに
つぎに
つぎに
_IDで ダイアログのIDを抹消し
0を 返す。
ラジオボタンダイアログを開くとは (・ → ・)
_IDは ID
_タイトルは 文字列定数 「好きなくだもの」
_項目区切りは 定数 '/'
_連結項目は 文字列実体 長さ 128桁
_初期デフォルト位置は 数値 1
_デフォルト位置は 変数
本体とは
(項目配列の全要素を連結して1本の文字列にする)
(→例:「/りんご/バナナ/みかん/イチゴ」) ※注:連結の先頭は区切り文字であること
_連結項目を クリアし
項目配列の 要素数を
回数指定し
_項目区切りを _連結項目に 一文字追加し
項目配列(回数)を _連結項目に 追加し
繰り返し
(ダイアログを開く)
前回の項目位置が 真?
ならば 前回の項目位置をつみ
さもなければ
_初期デフォルト位置をつみ
つぎに
_デフォルト位置に 入れ
ラジオボタンダイアログクリック時の処理の Mコードで
ダイアログを生成し
_IDに 入れ
_タイトルを _IDに ダイアログタイトルを設定し
_連結項目と _デフォルト位置を
_IDに ダイアログにラジオボタン項目を設定し
「OK」を _IDの Yesボタン番号に ダイアログボタンを設定し
「Cancel」を _IDの Cancelボタン番号に ダイアログボタンを設定し
_IDで ダイアログを開く。
ボタンクリック処理は 本定義 (ボタンID → 戻値)
_ボタンIDは ID ※←使わない
_ボタンIDに 入れ
ラジオボタンダイアログを開き
0を 返し。
メインとは (・ → ・)
_ボタン1は ID
ボタンビューを生成し _ボタン1に 入れ
20を _ボタン1に 文字のサイズを設定し
「ラジオボタンダイアログのテスト」を
_ボタン1に 文字を設定し
_ボタン1を ビューをアクティビティに追加し
_ボタン1に クリックリスナーを登録する。
トップ画面でテストボタンをタップ
ダイアログが出たら「みかん」をタップ

最後に「OK」ボタンをタップタップ
確定項目がが示された

処理単語「ラジオボタンダイアログを開く」
まずラジオボタンの項目群(りんご、バナナ、・・・)はソースコード冒頭にある文字列定数配列「項目配列」で定義されていますが、これを元にして項目配列の全要素を連結して1本の文字列を作っています(変数「_連結項目に格納)。このサンプルアプリで作成した1本化文字列は以下のような内容となります。
↓区切り記号
/りんご/バナナ/みかん/イチゴ
↑項目1 ↑項目2 ↑項目3 ↑項目4
上記文字列は先頭に '/' を置いています。このあと続く項目群の区切り記号が '/' であることを表します。区切り記号は何でも構いませんが、項目自体に使われない文字である必要があります。'/' のほかには ','(カンマ)なども良いでしょう。
次にデフォルト位置を計算しています。このサンプルアプリでは2度目以降にダイアログを開いたときに前回確定の項目をデフォルトとするよう少し凝った記述をしています。
前回の確定項目位置が 真?
ならば 前回の確定項目位置を
さもなければ
_初期デフォルト位置を
つぎに
_デフォルト位置に 入れ
という箇所がそれです。2度目にラジオボタンのダイアログを開いたとき、前回の選択にかかわらずデフォルト選択が1番に戻ってしまう(またはすべてノーチェック)のはかなり違和感があるためこのように実装することを薦めます。
上記プログラムではもし前回の確定項目が記憶されていればそれをデフォルト位置とし、そうでなければ(初回のダイアログ)1番目の項目をデフォルト位置としています。
ちなみにダイアログが開いた段階で全項目ノーチェックにするにはデフォルト位置として0を指定してください。(Android API では-1ですがMindでは0です)
処理単語「ラジオボタンダイアログクリック時の処理」
Cancel/OK ボタンをクリックするとイベントが発生してこれが呼び出されます。
この時渡されるボタン番号は以下のような値をとります。
- 0以上の値なら‥
- OKボタンがタップされた時、1〜Nの項目番号あるいは0が返されます
(注:OKボタン番号は項目番号にすり替わります)-
- 負の値なら‥
- Cancelボタンのタップ
-
上記を補足します。
ボタン番号=0 となることもあります。ダイアログを開くときにデフォルト項目に0を指定し(ダイアログが開いたときどの項目もノーチェック)、かつ、そのままOKボタンをタップしたときです。この場合は特別に項目未定として0が返されます。ゼロ以外のデフォルト項目でダイアログを開いた場合には0が返されることはありません。
端末から文字列を入力するものです。
文法
(以下は全ダイアログ共通)
○○ダイアログクリック処理とは (ID、ボタン番号 → 戻値)
↑単語名は自由
〜
〜。
○○ダイアログクリック処理の Mコードで ダイアログを生成 → ID
<タイトル>を <ID>に ダイアログタイトルを設定 → ・
<ボタンラベル1>を <ID>の Yesボタン番号に ダイアログボタンを設定 → ・
<ボタンラベル2>を <ID>の Cancelボタン番号に ダイアログボタンを設定 → ・
<ID>を ダイアログを開く → ・
(以下はエディットテキストダイアログ向け) (最初の5つは通常のビュー操作と同じ)
エディットテキストビューを生成 → <viewID>
<大きさ>を <viewID>に 文字のサイズ設定 → ・ (任意)
<色コード>を <viewID>に 文字の色設定 → ・ (任意)
<色コード>を <viewID>に 背景色設定 → ・ (任意)
<文字列>を <viewID>に 文字を設定 → ・
<viewID>を <ID>に ダイアログにビューを設定 → ・
記述例
※ファイル名 Dialog/SpDgEdit.src
入力ビュー記憶は 変数。
エディットテキストダイアログクリック時の処理とは (ID、ボタン番号 → 戻値)
_IDは ID
_ボタン番は 変数
_取得文字列は 文字列
_IDと _ボタン番に 入れ
_ボタン番が Cancelボタン番号に 等しい
ならば 「Cancelされました」を ちょっと表示し
さもなければ
_ボタン番が OKボタン番号に 等しい
ならば 入力ビュー記憶を 文字を取得し _取得文字列に 入れ
「テキスト=」と _取得文字列を 合成し ちょっと表示し
つぎに
つぎに
_IDを ダイアログのIDを抹消し
0を 返す。
エディットテキストダイアログを開くとは (・ → ・)
_IDは ID
_入力ビューは 変数
エディットテキストダイアログクリック時の処理の Mコードで
ダイアログを生成し
_IDに 入れ
「お名前」を _IDに ダイアログタイトルを設定し
(エディットテキストを配置)
エディットテキストビューを生成し _入力ビューに 入れ
18を _入力ビューに 文字のサイズを設定し
黒色を _入力ビューに 文字の色を設定し
白色を _入力ビューに 背景色を設定し
「」を _入力ビューに 文字を設定し
_入力ビューを _IDに ダイアログにビューを設定し
_入力ビューを 入力ビュー記憶に 入れ
(ボタンを配置)
「OK」を _IDの Yesボタン番号に ダイアログボタンを設定し
「Cancel」を _IDの Cancelボタン番号に ダイアログボタンを設定し
_IDで ダイアログを開く。
ボタンクリック処理は 本定義 (ボタンID → 戻値)
_ボタンIDは ID ※←使わない
_ボタンIDに 入れ
エディットテキストダイアログを開き
0を 返し。
メインとは (・ → ・)
_ボタン1は ID
ボタンビューを生成し _ボタン1に 入れ
20を _ボタン1に 文字のサイズを設定し
「エディットテキストダイアログのテスト」を
_ボタン1に 文字を設定し
_ボタン1を ビューをアクティビティに追加し
_ボタン1に クリックリスナーを登録する。
トップ画面でテストボタンをタップ
ダイアログが開いたら「山田太郎」を入力
「OK」をタップすると結果が表示される
Copyright(C) 2000 Scripts Lab. Inc.