多くの項目からの選択

display dialogを使う

 display dialog命令を使って、幾つかの項目から選択させるのが、一番簡単で一般的な方法です。
 この方法では、3つまでの選択項目をボタンに並べる事ができます。

display dialog "じゃんけんぽん!" buttons {"ぐー", "ちょき", "ぱー"}

 4種類以上の選択肢から選択させたい場合は、2回ダイアログを表示してボタンを2回押す事で対処できます。この場合3×3で最大9種類の選択肢を用意できます。

cascadeDialog()

on cascadeDialog()
	set theButton to button returned of (display dialog "選択して下さい" buttons {"魚類", "は虫類", "ほ乳類"})
	if theButton = "魚類" then
		set theButton to button returned of (display dialog "選択して下さい(魚類-" buttons {"かつお", "さば", "あゆ"})
	else if theButton = "は虫類" then
		set theButton to button returned of (display dialog "選択して下さい(は虫類-" buttons {"とかげ", "へび", "かめ"})
	else
		set theButton to button returned of (display dialog "選択して下さい(ほ乳類-" buttons {"ひと", "くま", "ねこ"})
	end if
	return theButton
end cascadeDialog

choose from listを使う

 さらに多くの選択肢を用意したい場合は、何度もダイアログを表示すればいいのですが、2回押すのすら面倒なのに、更に3回4回と押すのは面倒すぎます。
 そのような場合はchoose from list命令を利用する事ができます。

choose from list {"かつお", "さば", "あゆ","とかげ", "へび", "かめ","ひと", "くま", "ねこ"}

 引数を指定すれば、複数の項目の選択も可能になります。
 基本的には、多くの項目から選択させたい場合は、この命令を利用するのがいいでしょう。

属性を読んで動作する

 ファイル名やコメント、ラベル等のアプレットが持っている属性から値を取り込むようにすれば、無限とも言えるバリエーションを持たせる事ができます。
 初期設定テキストファイルを別に持つ方法よりも手軽に書き換えが可能なのも利点です。
 ただし、動作のたびに違う値を必要とするような処理には向きません。

tell application "Finder" to set theText to comment of (path to current application)
display dialog theText

複数のスクリプトに分ける

 選択肢ごとにアプレットを作って、アップルメニューから選択するなり、ポップアップウィンドウに並べるなどしておけば、擬似的に複数の選択肢から一つを選ぶ事が可能です。
 本体のスクリプトをスクリプトオブジェクトとして読み込んで使う事で、サイズの増加は、ある程度回避できます。
 まずは、各スクリプトには、以下のように書き、選択肢の数だけ用意します。

set display_ to load script (":main.scpt" as alias)
displayText("ねこ") of display_

 次に、以下のスクリプトを上のスクリプトと同階層に置きます。

on displayText(theText)
	display dialog theText
end displayText

 もちろん、システムフォルダの「スクリプト」フォルダなどに、スクリプトオブジェクトを置く場所を決めて、そこに置いてもかまいません。もちろんその場合は読み出し側も変えておく必要があります。詳しくは「スクリプトオブジェクトの定義」を参照して下さい。
 この程度なら、各スクリプトに書いても問題ないのですが、普通はメンテナンスが大変ですから、早め早めに別のスクリプトにしておく方がいいでしょう。
 以下のスクリプトは呼び出し側のバリエーションです。

set display_ to load script (":main.scr" as alias)
tell application "Finder" to set theText to name of (path to current application)
displayText(theText) of display_

 このように、先に紹介したアプレットが持っている属性から値を取り込む方法を使えば、簡単に選択肢の変更ができますし、呼び出し側のスクリプトも1種類で済みます。

外部に依託する

 FaceSpanやHyperCard、REALbasicなどの開発環境を使うのもいい手です。
 特にHyperCard 2.2 Lite-Jは無料で手に入れる事ができ、開発も非常に簡単なのでお勧めです。HYPERCARD PARKのスクールには、HyperCardにおけるAppleScriptの利用法の解説がありますので、参考にして下さい。
 あとは、Dialog Directorを利用するという手もあります。OSAXなので、起動に時間がかからずに使えるのが利点ですが、開発には慣れが必要です。


2000-05-29 -2001-07-25