既に解説した
ダイアログ は GUIライブラリ内においてMindのプログラムとして独自作成されたものでした。
本章で扱う”標準ダイアログ”はそれとは別で、OS標準のダイアログを起動するものです。見た目もWindowsの標準的なダイアログに近いです。
たとえば短いメッセージと共に応答用のボタンを配置し、ボタン押下で戻って来るタイプはどちらにもありますが、Mind版はダイアログの位置やフォント・色など細かな指定ができることに比べ、標準ダイアログ版は比較的限定された使い方となります。
逆に、標準ダイアログを使う利点は、見た目がOS標準であることの他、色選択のダイアログ、ファイル選択、ディレクトリ選択のダイアログなど、標準ダイアログにしかない機能が使えることです。用途によって使い分けてください。
■共通の手順
標準ダイアログにはいくつかのタイプがありますが、それらに共通する手順は以下のようになります。
構文=
(ステップ1)IDの取得
<親ウィジェット>と
(・・パラメータで・・) ←タイプにより指定有り
○○ダイアログのIDを取得 → ダイアログID
(ステップ2)属性の設定
・・パラメータ・・を <ダイアログID>に ○○を設定 → ・
(ステップ3)ダイアログを開く
<ダイアログID>で 標準ダイアログを開き → 結果(文字列)
■(共通の属性設定) 標準ダイアログのタイトルを設定
構文=
<テキスト>を <ダイアログID>に
標準ダイアログのタイトルを設定 → ・
ダイアログのタイトルを指定できます。
この指定は任意であり、省略した場合、Windows環境では以下のものが使われます。
−−−−−−−−−−−−−−−−−−−−−−−−−
ダイアログの種類 |省略時のタイトル
−−−−−−−−−−−−−−−−−−−−−−−−−
ファイル選択ダイアログ :「開く」
保存ファイル選択ダイアログ:「名前を付けて保存」
フォルダ選択ダイアログ :「フォルダーの選択」
色選択ダイアログ :「色の設定」
−−−−−−−−−−−−−−−−−−−−−−−−−
■標準ダイアログを開く
構文=
(方法1)
<ダイアログID>を 標準ダイアログを開く → 結果(文字列)
(方法2)
ユーザが確保した文字列実体変数
↓ ↓この送り仮名必須
<ダイアログID>を <文字列実体変数>をつかい
標準ダイアログを開く → 結果(文字列)
手順の最後にこの処理単語を実行することで実際にダイアログが開き、何らかの応対をすることで戻って来ます。
ダイアログの結果(文字列)の意味はそれぞれのダイアログの説明の中に記します。
■ダイアログが開く位置
標準ダイアログは開く位置を指定できません。
短いメッセージを表示し、ボタンを配置して応答を待つダイアログです。
■標準ダイアログのIDを取得
構文=
<親ウィジェット>と <ボタン構成>で
標準ダイアログのIDを取得 → ダイアログID
ボタン構成:以下のいずれかの単語名を指定してください
ボタン構成・ok
ボタン構成・okcancel
ボタン構成・yesno
ボタン構成・yesnocancel
ボタン構成・retrycancel
ボタン構成・abortretryignore
■標準ダイアログのメッセージを設定
構文=
<メッセージ1>を <ダイアログID>に
標準ダイアログのメッセージ1を設定 → ・
<メッセージ2>を <ダイアログID>に
標準ダイアログのメッセージ2を設定 → ・
注:メッセージ2の設定は任意
ダイアログのメッセージを指定します。「メッセージ1」が主たるもので、「メッセージ2」は補助的なメッセージとなります。メッセージ2の指定は任意で、もし指定すればメッセージ1の下に表示されます。
■標準ダイアログのアイコンを設定(任意)
構文=
<アイコンシンボル>を <ダイアログID>に
標準ダイアログのアイコンを設定 → ・
プログラム例:
ビットマップ・infoを ←ライブラリで用意したビットマップシンボル
ダイアログに 標準ダイアログのアイコンを設定する
ダイアログに表示されるアイコンはデフォルトのものが表示されますが、これを変更することができます。
アイコンシンボルは本ライブラリが扱うビットマップ形式です。ビットマップ形式の詳細は、
「ダイアログ」−「ダイアログのアイコンを設定」 を参照してください。
■標準ダイアログのデフォルトボタンを設定(任意)
構文=
<ボタンシンボル>を <ダイアログID>に
標準ダイアログのデフォルトボタンを設定 → ・
ボタンシンボル:以下のいずれかの単語を指定してください
ボタン要素・ok
ボタン要素・cancel
ボタン要素・yes
ボタン要素・no
ボタン要素・retry
ボタン要素・abort
ボタン要素・ignore
ダイアログが開いたときに最初にフォーカスが当たるボタンを指定でき、そのままEnterキーを押すとそのボタンが押されたことになります。
この指定は任意です。
プログラム例:
ボタン要素・okを
ダイアログに
標準ダイアログのデフォルトボタンを設定し
記: 本設定にかかわらず、ダイアログが開いている間はボタンにフォーカスが当たっているとき、左クリックの代わりにEnterキー打鍵でショートカット動作します
■標準ダイアログの戻値
ダイアログを開く処理単語は共通の「標準ダイアログを開く」ですが、戻値としてボタン名を文字列形式で返します。
ボタン名は先の「標準ダイアログのデフォルトボタンを設定」で解説したボタン要素名(たとえば「ボタン要素・yes」)の右側英字部分です。たとえば、
"ok"
"yes"
"cancel"
のようなボタン名が文字列として返されます。
ユーザが作成するプログラムでこの戻値を判定する際、たとえば、
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
○○とは
戻値は 文字列
標準ダイアログを開き 戻値に 入れ
戻値が "yes"に 等しい文字列 ←これでも良いが、
ならば ・・・
つぎに
\___________________________/
のように書いても良いのですが、できればシンボルを使い、
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
標準ダイアログを開き 戻値に 入れ
戻値が ボタン要素・yesに 等しい文字列 ←こちらを推奨
ならば ・・・
つぎに
\___________________________/
と書くことを推奨します。そうすることで、たとえば誤って「"ye"に 等しい文字列」という綴り間違いをして気が付かないことを避けられます。(シンボルであればコンパイル時に未定義エラーで検出できます)
ダイアログ中で、プログラム利用者がボタンを押さずに、ウィンドウごと閉じた場合の戻値は以下のようになります。
ボタン構成・ok → "ok"
ボタン構成・okcancel → "cancel"
ボタン構成・yesno (タスクバー右端に「×」が無いので閉じられない)
ボタン構成・yesnocancel → "cancel"
ボタン構成・retrycancel → "cancel"
ボタン構成・abortretryignore (タスクバー右端に「×」が無いので閉じられない)
記: ウィンドウごと閉じた場合、ボタン構成にcancelを含むものはcancelが返されるようです。
■標準ダイアログのサンプルプログラム
- stddialog-dialog.src
- さまざまなボタン配置を使った標準ダイアログの使い方が分かります。
(デフォルトボタンの指定も確認できます)
色を選択するダイアログを開きます。
■色選択ダイアログのIDを取得
構文=
<親ウィジェット>で 色選択ダイアログのIDを取得 → ダイアログID
■初期色を設定
構文=
<親ウィジェット>で 標準ダイアログの初期色を設定 → ダイアログID
ダイアログが開いた直後の色を指定します。
■色選択ダイアログダイアログの戻値
ダイアログを開くのは共通の「標準ダイアログを開く」ですが、戻値として色コードを文字列形式で返してきます。
ダイアログがキャンセルされた場合、色コードとして空列が返されます。
色コードについては、
「ウィジェットの属性指定」−「ウィジェットの文字色と背景色」 での「色指定」を参照してください。
■色選択ダイアログのサンプル
- stddialog-color.src
- 基礎的な色選択ダイアログの使い方が分かります
この系統には以下の種類があります。
- ファイル選択ダイアログ
- ファイル保存ダイアログ
- ディレクトリ選択ダイアログ
ファイル選択ダイアログ
■ファイル選択ダイアログのIDを取得
構文=
<親ウィジェット>で
ファイル選択ダイアログのIDを取得 → ダイアログID
上記形式により、まずIDを取得してください。
プログラム例:
○○とは
ダイアログは ID
メインウィンドウで ファイル選択ダイアログのIDを取得し
ダイアログに 入れ
・・必要な属性設定・・
ダイアログで 標準ダイアログを開き ファイル名に 入れ
上記例のように、必要な属性を設定した後に「標準ダイアログを開く」によってダイアログを開きます。
■初期ディレクトリを設定(任意)
構文=
<ディレクトリ>を <ダイアログID>に
標準ダイアログの初期ディレクトリを設定 → ・
プログラム例:
○○とは
ダイアログは ID
ファイル名は 文字列
メインウィンドウで ファイル選択ダイアログのIDを取得し
ダイアログに 入れ
"c:\temp"を ダイアログに 標準ダイアログの初期ディレクトリを設定し
ダイアログで 標準ダイアログを開き ファイル名に 入れ
ダイアログが開いた時、どのディレクトリで開始するかを指定します。
省略した場合は、アプリケーション(.exeファイル)の起動パスとなります。
相対ディレクトリも指定できます。アプリケーションの起動パスから相対計算されますが、戻値は常に絶対パスです。
(例)
"..\temp"を ダイアログに 標準ダイアログの初期ディレクトリを設定し
↑相対ディレクトリ
■拡張子情報を設定(必須)
構文=
<拡張子情報>を
<ダイアログID>に 標準ダイアログの拡張子情報を設定 → ・
注:ディレクトリ選択ダイアログでは使いません
この指定は必須です。
OSに備わっているファイル選択ダイアログでは、ダイアログの下方にファイルの種類を表示し、またどの拡張子についてのファイルを閲覧しているか選べるようになっていますが、そのような情報をこれによって指定します。
拡張子情報のフォーマットが多少複雑ですが以下のような文法です。
←−−−−−−−−−−−−−1本の文字列−−−−−−−−−−−−−→
{"拡張子の説明" ".EXT"} {"拡張子の説明" ".EXT"} {....} .. {....}
記:拡張子の説明 は自由に書けます
記:.EXT は拡張子を表します(例:".src")
拡張子問わずは、ピリオド無しで "*" と書きます
Mindのソースとして表現するなら以下のような書き方となります。
記: 以下のプログラム例2では文字列継続(続)の指示を使って複数行に渡っていますが、コンパイラによって連結され、最終的にソースは1行とみなされます。
プログラム例1:
「{"すべてのファイル" "*"}」を
ダイアログに 標準ダイアログの拡張子情報を設定する
プログラム例2:
「{"Mindソースファイル" ".src"}」続
「 {"テキストファイル" ".txt"}」続 ←2項目目以降は頭に空白を
「 {"すべてのファイル" "*"}」を ←2項目目以降は頭に空白を
ダイアログに 標準ダイアログの拡張子情報を設定する
■複数選択可を設定(任意)
構文=
<真偽値>を <ダイアログID>に 標準ダイアログの複数選択可を設定 → ・
注:ファイル選択ダイアログのみで有効です
ファイル保存ダイアログ、ディレクトリ選択
ダイアログでは使えません
プログラム例:
真を ダイアログに 標準ダイアログの複数選択可を設定する
ファイル選択ダイアログでのみ有効です。
真を指定した場合、ダイアログ中で複数のファイルが選択できるようになります。その場合、ダイアログの戻値が複数のファイル名を含むフォーマットになります。
注: 複数選択を許可した場合、「標準ダイアログを開き」の戻値が長くなる可能性があります。次の解説項目を参考にして対処してください
■ファイル選択ダイアログの戻値
ファイル選択ダイアログは共通の「標準ダイアログを開く」で開きます。戻値としてファイル名群を返してきます。(構文は 「
標準ダイアログを開く」 参照)
ダイアログがキャンセルされた場合は戻値が空列になるのでそれで判定してください。
返されるファイル名(群)ですが、必ず既存のファイルが返されると想定しないでください。ダイアログの中でファイル名を手動で入力することもできるため、存在しないファイル名を返す可能性があります。
ファイル名を表す文字列は、ライブラリ内部に設置した文字列実体を指す文字列情報であるため、この情報を消費しないうちに再度取得すると前回のデータが上書きされてしまいます。これを避けるためには、取得の都度消費してしまうか、あるいは、「
標準ダイアログを開く」 の構文の「方法2」で示すように、取得先の文字列実体変数を明示する形式で呼び出してください。
ライブラリ内部で結果を蓄えるデフォルトの文字列実体変数は長さが5200バイトであるため、非常に多数のファイルが全選択されるなどした時、戻値が長くなり、デフォルトの格納変数では収容しきれないことがあります。そのようなケースでも 「
標準ダイアログを開く」 の構文の「方法2」によって取得すれば問題を回避できます。
キャンセルではない場合の戻値のフォーマットは以下の通りです。
←−−−−−−−1本の文字列−−−−−− →
ファイル名 ファイル名 ファイル名 ファイル名
- 注
- ファイル選択ダイアログで 複数選択可を設定した場合、個々のファイル名ごとに、空白を含むものは { } で囲まれます。
そのような形式であるため、ダイアログから返されたファイル名群から1つのファイル名を取り出すのにMindの「単語切り出し」は使わず、専用の切り出し語である「ファイル名群からファイル名を得る」を使ってください。
(複数選択可を設定しない場合はそのような配慮は不要で、単に戻値をそのままお使いください)
■ファイル名群からファイル名を得る(ファイル選択のみ)(複数選択を使う時)
構文=
<ファイル名群>で ファイル名群からファイル名を得る
→ 残ファイル名群、ファイル名
プログラム例:
○○とは
ダイアログは ID
戻値は 文字列
ファイル名は 文字列
〜略〜
ダイアログで 標準ダイアログを開き 戻値に 入れ
戻値が 空列?
ならば ・・キャンセルされたときの処理し・・
終り
つぎに
戻値をつみ、 ←これをスタックに積んでループに入る
ここから
(Stack=残ファイル名群)
ファイル名群からファイル名を得て ファイル名に 入れ
(Stack=残ファイル名群)
ファイル名が 空列?
ならば 打ち切り
つぎに
ファイル名を ・・何らかの処理し・・
(Stack=残ファイル名群)
繰り返し
(Stack=残ファイル名群)
(残ファイル名群を) 捨て ←これを忘れないように
(Stack=空)
〜略〜
■ファイル選択ダイアログのサンプル
- stddialog-file.src
- 基礎的なファイル選択ダイアログ、ファイル保存ダイアログ、ディレクトリ選択ダイアログの使い方が分かります
- stddialog-file-simple.src
- ファイル選択ダイアログだけに機能を絞りソースコードを見やすくしたものです。特に拡張子情報の記述の仕方が参考になります
ファイル保存ダイアログ
データを書き込むためのファイル選択をおこないます。使い方は「ファイル選択ダイアログ」とほぼ同じです。
構文=
<親ウィジェット>で ファイル保存ダイアログのIDを取得
→ ダイアログID
プログラム例:
○○とは
ダイアログは ID
出力ファイル名は 文字列
(IDの取得)
メインウィンドウで ファイル保存ダイアログのIDを取得し
ダイアログに 入れ
(初期ディレクトリ)
"save"を ダイアログに 標準ダイアログの初期ディレクトリを設定し
(ダイアログを開く)
ダイアログを 標準ダイアログを開き 出力ファイル名に 入れ
■上書き確認(ファイル保存ダイアログのみ)
構文=
<真偽値>を <ダイアログID>に
標準ダイアログの上書き確認を設定 → ・
注:ファイル保存ダイアログのみで有効です
プログラム例:
真を ダイアログに 標準ダイアログの上書き確認を設定する
ファイル保存ダイアログでのみ有効です。
ダイアログ中で既存のファイルを指定した場合、上書きして良いかの確認がおこなわれます。
なお、上書き確認でOKを応答したからといって、ダイアログ機能がそのファイルに何らかの副作用を与えることはなく、単に確認するだけです。
■ファイル保存ダイアログの戻値
ダイアログがキャンセルされると空列を返します。
ファイル名を表す文字列は、ライブラリ内部に設置した文字列実体を指す文字列情報であるため、この情報を消費しないうちに再度取得すると前回のデータが上書きされてしまいます。これを避けるためには、取得の都度消費してしまうか、あるいは、「
標準ダイアログを開く」 の構文の「方法2」で示すように、取得先の文字列実体変数を明示する形式で呼び出してください。
ディレクトリ選択ダイアログ
ディレクトリを尋ねるダイアログです。
■ディレクトリ選択ダイアログのIDを取得
構文=
<親ウィジェット>で ディレクトリ選択ダイアログのIDを取得
→ ダイアログID
プログラム例:
○○とは
ダイアログは ID
ディレクトリ名は 文字列
(IDの取得)
メインウィンドウで ディレクトリ選択ダイアログのIDを取得し
ダイアログに 入れ
(初期ディレクトリ)
"c:\temp"を ダイアログに 標準ダイアログの初期ディレクトリを設定し
(ダイアログを開く)
ダイアログを 標準ダイアログを開き ディレクトリ名に 入れ
■ディレクトリ選択ダイアログの戻値
ダイアログがキャンセルされると空列を返します。
ファイル名を表す文字列は、ライブラリ内部に設置した文字列実体を指す文字列情報であるため、この情報を消費しないうちに再度取得すると前回のデータが上書きされてしまいます。これを避けるためには、取得の都度消費してしまうか、あるいは、「
標準ダイアログを開く」 の構文の「方法2」で示すように、取得先の文字列実体変数を明示する形式で呼び出してください。
ダイアログが返すディレクトリ名ですが、既存のディレクトリが返されると想定しないでください。ダイアログの中でディレクトリ名を手で入力することもできるため、存在しないディレクトリ名を返す可能性があります。