Okamoto's Homepage ShadeでAppleScript 事始め
「球のダイアログを表示する」の項目で,ダイアログの表示方法を書きましたが,そのダイアログにあるボタンは「OK」と「キャンセル」の二つでした。何も指定しない場合,その二つのボタンが表示されます。
AppleScriptでは,最大3つまでのボタンについて,それぞれのボタンの文字なども変更できます。それぞれのボタンが押された時に,どのような処理をするかを選択することができます。
例えば,円を作るスクリプトを考えてみましょう。円を側面図,上面図,正面図のどこに描くかを選択するダイアログを表示するスクリプトは次のようになります。
display dialog "どの平面に作りますか。" buttons {"側面図", "上面図", "正面図"}
これをスクリプト編集プログラムに入力して実行すると,下のようなダイアログがあらわれます。
つまり,「display dialog "●●"」の後に「buttons {"●●", "●●", "●●"}」を追加することで,ボタンをカスタマイズできるのです。「buttons {"●●", "●●", "●●"}」の{}内は,1〜3つならいくつでもかまいません。
上のダイアログで,クリックされたボタンによって,その後の処理を変えるには,「if〜else if〜end if」という構文を使います。「tell」ではじまり「end tell」で終わるのと同じように,「if」ではじまる構文は最後に「end if」で終わります。
例えば「側面図」をクリックすると,スクリプト編集プログラムの結果ウインドウには,「{button returned:"側面図"}」と表示されるはずです。クリックしたボタンによって処理を変えるには,次のようにします。
if button returned
of result is "側面図" then
--クリックしたボタンが「側面図」の場合の処理を処理を書く
else if button returned of result is "上面図"
then
--クリックしたボタンが「上面図」の場合の処理を処理を書く
else if button returned of result is "正面図"
then
--クリックしたボタンが「正面図」の場合の処理を処理を書く
end if
Shadeで円を作る命令は「create disk」です。たとえば側面図に円を描くときは
tell application
"Shade Personal R2 PPC"
activate
create disk axis 0
end tell
になります。「axis 0」の数字が1なら上面図,2なら正面図です(この辺は詳しくはCD-ROM内の「シェードスクリプト辞書.pdf」をみてください)。次のようにすれば,クリックしたボタンによって円を作成する面を変えることができます。
display dialog "どの平面に作りますか。" buttons {"側面図",
"上面図", "正面図"}
if button returned of result is "側面図" then
tell application "Shade Personal R2 PPC"
activate
create disk axis 0
end tell
else if button returned of result is "上面図"
then
tell application "Shade Personal R2 PPC"
activate
create disk axis 1
end tell
else if button returned of result is "正面図"
then
tell application "Shade Personal R2 PPC"
activate
create disk axis 2
end tell
end if
また,次のように一度変数におさめてもいいです。いろいろとやり方はあると思います。
display dialog "どの平面に作りますか。" buttons {"側面図",
"上面図", "正面図"}
if button returned of result is "側面図" then
set axisOfDisk to 0
else if button returned of result is "上面図"
then
set axisOfDisk to 1
else if button returned of result is "正面図"
then
set axisOfDisk to 2
end if
tell application
"Shade Personal R2 PPC"
activate
create disk r rOfDisk axis axisOfDisk
end tell