スクリプト6 (ダイアログなどを使う)


ここではメッセージボックスやダイアログを使ってみましょう。これらを使うことでより使いやすいスクリプトを組むことができます。


◆ メッセージボックス

メッセージボックスは「はい」ボタンや「いいえ」ボタンなどが付いたダイアログのことです。PowerProは6種類ほどのメッセージボックスを表示できます。

メッセージボックスを表示するには「MessageBox( )」というキーワード(関数)を使います。このMessageBoxの後に続く( )の中にメッセージのレイアウトや 表示する文字列などを設定します。構文は次のようになります。

MessageBox("layout", "text", "title")

まずlayoutにはメッセージボックスのボタンやアイコンを設定するレイアウトを指定します。 詳細は後ほど述べます。textにはメッセージボックスに表示する文字列を指定します。 titleにはメッセージボックスのタイトルバー(キャプション)の文字列を指定します。

メッセージボックスのボタンなどはlayoutで決まります。ここに書く文字列によってメッセージボックスの形が 変わってくるのです。layoutには2種類のキーワードを書くのが普通です。2種類というのは 「ボタンの種類」と「アイコンの種類」です。

「ボタンの種類」を決めるキーワードは、abortretryignore, okcancel, retrycancel, yesnocancel, yesno, ok の6種類です。 この中から一つ選び指定します。これらのキーワードに対し表示されるボタンは以下のようになります。

ボタンの種類表示されるボタン
abortretryignore中止、再試行、無視
okcancelOK、キャンセル
retrycancel再試行、キャンセル
yesnocancelはい、いいえ、キャンセル
yesnoはい、いいえ
okOK

「アイコンの種類」を決めるキーワードは、exclamation, warning, information, asterisk, stop, error, question の7種類です (同じアイコンを表示するものもあります)。

具体的にどのようにlayoutを設定するかというと、例えば「OK」ボタンと「キャンセル」ボタンを表示し、 アイコンは警告アイコンにしたいと思ったとすると次のようにします。

MessageBox("okcancel warning", "よろしいですか?", "確認")

「"okcnacel warning"」のように「ボタンの種類」と「アイコンの種類」のキーワードを並べます。これでレイアウトを決めます。 これを実行すると



のようになります。

しかしどのボタンが押されたかを知るにはどうすればいいのでしょうか。それはMessageBox( )が返してくる数字を調べるとわかります。 MessageBoxが返してくる数字は押されたボタンによって変わり次のように決められています。

押されたボタン返してくる数字
キャンセル0
OK1
中止3
再試行4
無視5
はい6
いいえ7

これらの数字を調べることでどのボタンが押されたかを知ることができます。この数字を調べるために、MessageBoxを使うときはMessageBoxの値を 変数に入れて使うのが普通です。例えば次のように変数ansにMessageBoxの結果を代入します。

ans = MessageBox("abortretryignore question", "中止しますか?", "確認")

If(ans == 3)do
    Debug 「中止」が押されました
Elseif(ans == 4)
    Debug 「再試行」が押されました
Elseif(ans == 5)
    Debug 「無視」が押されました
Endif

こうすると押されたボタンによって処理を変えることができます。



次に文字列が入力できるダイアログを使ってみましょう。PowerProのダイアログにはエディットボックス、コンボボックス、チェックボックスを 使えるものもあります。

◆ Input〜 ダイアログ

ここで説明するダイアログはエディットボックスしか持っていないダイアログです。このダイアログには3種類あり、どれも同じ形のダイアログなのですが 少しずつ違いがあります。

このダイアログを表示するとき使うキーワードは Input、InputCancel、InputDefault の3つです。 これらを実行するといずれも次のようなダイアログを表示します。



「Folder」や「File」ボタンを押すとフォルダやファイル選択ダイアログを表示してフォルダへのパスやファイルへのパスが入力できます。 3つのキーワードのどれを実行しても同じようなダイアログが表示されますが先に言ったとおり少しずつ違いがあります。

まずInputInputDefaultは、「Cancel」ボタンを押してもスクリプトを中止しませんがInputCancelは「Cancel」ボタンを押すと スクリプトをそこで中止します。またInputInputCancelは初期値が設定できませんがInputDefaultは初期値が設定できる、という 違いがあります。

つまり「キャンセルボタンを押すとスクリプトを中止するか」と「初期値が設定できるか」の違いを持っているだけです。状況にあわせて 使い分けてください。


使い方はInputとInputCancelは同じですがInputDefaultは少し違います。

◇ InputとInputCancelの場合

InputとInputCancelはこのキーワードの後にダイアログのタイトル(キャプション)を書くだけです。 例えばダイアログのキャプションに「ファイルを入力してください」と表示したいときは

Input "ファイルを入力してください"

InputCancel "ファイルを入力してください"

これを実行すると(実際はこれだけでは実行できません。後ほど述べます)



このようにキャプションに「ファイルを入力してください」と表示されていますね。


◇ InputDefaultの場合

InputDefaultの使い方はInputやInputCancelとは異なります。構文として次のようになります。

InputDefault("default", "title")

defaultがダイアログに最初から入力される初期値です。title はダイアログのキャプションです。例えば初期値として「C:\Program Files」、キャプションに「フォルダを入力」と表示したいとすると

InputDefault("C:\Program Files", "フォルダを入力")

とします。これを実行すると(これも実際にはこれだけでは実行できません)



のように最初から指定した文字列が入力された状態で表示されます。


さて、これらのダイアログのエディットボックスに入力した文字列を受け取れらなくてはなりません。 入力した文字列は使ったキーワード Input、InputCancel、InputDefault が返してきます。 つまり入力した文字列を処理するには次のように変数に代入すればいいのです。

Var = Input "ファイル名を入力"

このようにすると変数Varにダイアログに入力した文字列が入ることになります。ちなみにこれらのキーワードは このように変数に代入する形で書かないとエラーになります(今までInputなどだけでは実行できないと言ったのはそのためです)。 またこれまで言いませんでしたがこのダイアログのエディットボックスに日本語を入れると文字化けします。


あと入力できる文字数を制限することもできます。表示したいキャプションの前に「=制限したい文字数」 を書くことでできます。具体的には例えば文字数を15文字までに制限したいと思ったとすると

Var1 = Input "=15ファイル名を入力"

Var2 = InputDefault("Default.txt", "=15ファイル名を入力")

このように表示したいキャプションの前に「=15」を付けます。ちなみに日本語の1文字は2文字として扱われます。


◆ InputDialog

次にエディットボックスだけでなくコンボボックスやチェックボックスも使えるダイアログを使ってみましょう。これは複数の文字列などを まとめて指定できるようにしたいときに非常に便利なものです。ここではInputDialogというキーワードを使います。

InputDialogではアイテム(エディットボックスやコンボボックス、チェックボックス)をダイアログ上に最大6つまで置くことができます。 まず構文を見てみましょう。

InputDialog("var1=title1, var2=title2, var3=title3, var4=title4, var5=title5, var6=title6", "caption")

すこし複雑です。これを見ると var1=title1 みたいな形が6つ並んでいるのがわかると思います。 これら6つが一つ一つのエディットボックスなどに対応するものです。最大6つまでアイテムを作れるので6個あります。 var1〜6というのが文字列またはチェックボックスがチェックされているかを受け取る変数です。 title1〜6というのがそれぞれのアイテムのタイトル(説明)になります。 captionはダイアログのキャプションです。ダブルクォーテーションの位置などに注意してください。

ちょっとわかりにくいので実際に使ってみましょう。

InputDialog("var1=ファイルへのパス1, var2=ファイルへのパス2, var3=フォルダ名", "テストダイアログ")

これを実行すると次のようになります。



アイテムのタイトルには特に意味はないです(適当に考えました)。アイテムは最大6つ作れるのであって6つ作らなければならないというわけではありません。 必要な数だけで作ればいいです。例えば上の例では3つしか作ってません(変数なども3つですね)。 ちなみに「File」や「Folder」ボタンを押すとフォーカスのあるエディットボックスにファイルへのパスやフォルダへのパスを入力できます。

上のスクリプトではダイアログ上にエディットボックスしか作られてません。それでは次にチェックボックスを作ってみましょう。

チェックボックスを作るにはタイトルの後に二つの?マーク(??)を付けます。??マークが付けられたアイテムへの変数には、チェックボックスにチェックが入れられていれば 1を、入れられていなければ0が代入されます。0か1かでチェックボックスにチェックが入れられたかどうかを知るのです。

例えば「確認する」というタイトルのチェックボックスを作りたいと思ったとすると次のようにします。

InputDialog("var=確認する??", "テストダイアログ")

if(var == 1)do
    Debug チェックボックスはチェックされています
elseif(var == 0)
    Debug チェックボックスはチェックされていません
endif

タイトルの後に「??」が付けられていますね。これでチェックボックスが表示されます。また変数varでチェックボックスにチェックが入っているか 入ってないかを調べられます。


次はコンボボックスを使ってみましょう。コンボボックスの作り方はチェックボックスと同じようにタイトルの後に「??」をつけるのですが、さらに 続けてコンボボックスのドロップダウンリストに表示したいアイテム(文字列)を羅列します。「??」の後にアイテムを並べないとチェックボックスができてしまうので 注意してください。アイテムはパイプ(|)で区切ります。もちろんコンボボックスの変数には選択された文字列が入ります。エディットボックスに ドロップダウンリストが付くだけでエディットボックスとほとんど変わりありません。

例えばコンボボックスのアイテムとして「りんご」、「みかん」、「バナナ」を表示したいと思ったら次のようにします。

InputDialog("var=好きな果物を選択??りんご|みかん|バナナ", "好きな果物")

これを実行すると次のようになります。



日本語を選択すると文字化けしてしまいますが特に問題にはならないと思います。


さて、これまで説明しませんでしたがInputDialogは「Cancel」ボタンを押されてもスクリプトをそこで中止せずにそのまま後ろのスクリプトを実行します。 ときにはキャンセルボタンが押されたときそこでスクリプトを中止させたいと思うときがあると思います。そんなときはInputDialogが返してくる数字を調べます。 InputDialogは「Cancel」ボタンを押されると「0」を返し、「OK」ボタンが押されると「1」を返してきます。キャンセルを押されたときスクリプトを中止したいときは 次のようにするといいでしょう。

result = InputDialog("var=ファイル名を入力", "テストダイアログ")

if(result == 0)do
    Quit
endif

debug 「OK」が押されたときの処理

Quitはスクリプトをその時点で中止させるコマンドです。他にもいろいろ書き方があると思います。


◆ 変数の初期化

これは変数の話なのですが、変数に一度文字列を代入するとその文字列はPowerProが終了するまでずっと保持されたままになります。 以前スクリプトを実行したとき変数に何か文字列を代入していると次そのスクリプトを実行したときその文字列は変数に残ったままです。 注意してもらいたいのはダイアログを使っているときで、エディットボックスなどに割り当てられた変数に以前代入した文字列が入っているとその文字列がエディットボックスに 最初から表示されてしまいます。これは少し気持ち悪いですね。

そこでスクリプトの最後に変数を初期化するスクリプトを追加します。初期化するといっても単に空の文字を代入するだけです。 例えば次のようにです。

InputDialog("var=ファイル名を入力", "テストダイアログ")

;変数をクリア
var = ""

これでこのスクリプトを何回実行してもエディットボックスに最初から文字列が表示されるということはなくなります。 ためしに最後の初期化処理をなくしたものも実行して違いを比べてみてください。 (ローカル変数を使う方法もありますがややこしい話なのでとりあえずここでは説明しません。ちなみに普通の変数はグローバル変数として扱われます。)


スクリプト5へ  トップへ