Hatena::ブログ(Diary)

ザリガニが見ていた...。 このページをアンテナに追加 RSSフィード

2011-06-22

display dialogとdisplay alertの違い

AppleScriptでユーザーと会話する手段の一つとして、display dialogdisplay alert という似通った二つのGUIが用意されている。(display dialogは遥か昔から存在していたが、display alertはたしかOSX 10.4の頃から登場したような気がする)

大差ない(と思っていた)ので、今までその時の気分で使い分けていた。ところが、最近 giving up afterでハマった。この機会に、どんな違いがあるのか詳細に調べてみることに。

基本

まずは、メッセージのみ指定した時のイメージの違い。

  • コメント部分は、デフォルトのオプション設定。
display dialog

 display dialog "display dialog 基本" --buttons {"キャンセル", "OK"} default button "OK" cancel button "キャンセル"

f:id:zariganitosh:20110621155042p:image:w357:h157

display alert

 display alert "display alert 基本" --buttons {"OK"} default button "OK" as informational

f:id:zariganitosh:20110621155041p:image

アイコン表示

with icon オプションを指定することで、アイコンも表示できる。

display dialog

 display dialog "with icon note(= with icon 1)" with icon note
 display dialog "with icon caution(= with icon 2)" with icon caution
 display dialog "with icon stop(= with icon 0)" with icon stop

f:id:zariganitosh:20110621160255p:image

f:id:zariganitosh:20110621160254p:image

f:id:zariganitosh:20110621160253p:image

  • 上記3つとアイコンなしの状態も含めて、4つのモードがある。
display alert

 display alert "as informational" as informational
 display alert "as warning" as warning
 display alert "as critical" as critical

f:id:zariganitosh:20110621160252p:image

f:id:zariganitosh:20110621160251p:image

f:id:zariganitosh:20110621160250p:image

  • アイコンは常に表示されるようなので、実質2つのモードしかない。

1行に入力可能な文字数

display dialogのアイコンあり・なし、display alertはメッセージのあり・なしで1行に入力可能な文字数が変化する。調べてみた。

display dialog

アイコンなし

 display dialog "1234567890123456789012345678901234567890" with title "123456789012345678901234567890123456789012"
 display dialog "1234567890123456789012345" with title "123456789012345678901234567"

  • 半角:タイトル42、メッセージ39

f:id:zariganitosh:20110621160259p:image

  • 全角:タイトル27、メッセージ24

f:id:zariganitosh:20110621160258p:image


アイコンあり

 display dialog "123456789012345678901234567890" with title "123456789012345678901234567890123456789012" with icon note
 display dialog "1234567890123456789" with title "123456789012345678901234567" with icon note

  • 半角:タイトル42、メッセージ29

f:id:zariganitosh:20110621160257p:image

  • 全角:タイトル27、メッセージ18

f:id:zariganitosh:20110621160256p:image

display alert

messageオプションなしでは、タイトルは標準フォント。

 display alert "123456789012345678901234567890123456789012"
 display alert "123456789012345678901234567"

  • 半角:タイトル41

f:id:zariganitosh:20110621161800p:image

  • 全角:タイトル26

f:id:zariganitosh:20110621161759p:image


messageオプション付きでは、タイトルは太字フォントになる。

 display alert "123456789012345678901234567890123456789012" message "123456789012345678901234567890123456789012345678901"
 display alert "1234567890123456789012345678" message "123456789012345678901234567890123"

  • 半角:タイトル41、メッセージ50

f:id:zariganitosh:20110621161802p:image

  • 全角:タイトル27、メッセージ32

f:id:zariganitosh:20110621161801p:image

表示しておく秒数を指定

giving up after オプションを指定することで、指定した秒数が経過すると、次の処理に進むようになる。(ボタンのクリックは不要)

とっても便利なんだけど、display dialogとdisplay alertで挙動が違うのが悩み。

display dialog
  • display dialogの挙動は素直に理解できる。giving up after 4 となっていれば、4秒間ダイアログを表示して、(OKボタンを押さなくても)次の処理に進む。

 set lap to {}
 
 set t0 to (current date)'s time
 display dialog "(1)giving up after 4" giving up after 4
 set lap's end to ((current date)'s time) - t0
 
 set t0 to (current date)'s time
 display dialog "(2)giving up after 4" giving up after 4
 set lap's end to ((current date)'s time) - t0
 
 set t0 to (current date)'s time
 display dialog "(3)giving up after 4" giving up after 4
 set lap's end to ((current date)'s time) - t0
 
 lap
 --結果:{4, 4, 4}

display alert
  • ところが、見てのとおりdisplay alertの挙動はトリッキー。1回目は4秒間表示されるが、2回目、3回目は1秒間しか表示されない。

 set lap to {}
 
 set t0 to (current date)'s time
 display alert "(1)giving up after 4" giving up after 4
 set lap's end to ((current date)'s time) - t0
 
 set t0 to (current date)'s time
 display alert "(2)giving up after 4" giving up after 4
 set lap's end to ((current date)'s time) - t0
 
 set t0 to (current date)'s time
 display alert "(3)giving up after 4" giving up after 4
 set lap's end to ((current date)'s time) - t0
 
 lap
 --結果:{5, 1, 1}


  • 何が起こっているのかは、以下のように4秒、8秒、12秒を指定してみると予測がつく。
  • つまり、display alertのgiving up afterは、前回までの経過秒数を引き継いでいるのだ。
  • どうしてこんな仕様なのか?非常に使いにくい。改善して欲しい。

OSX 10.9.4 Mavericksにおいて、display dialogと同じ挙動になっていることを確認した。

 set lap to {}
 
 set t0 to (current date)'s time
 display alert "(1)giving up after 4" giving up after 4
 set lap's end to ((current date)'s time) - t0
 
 set t0 to (current date)'s time
 display alert "(2)giving up after 8" giving up after 8
 set lap's end to ((current date)'s time) - t0
 
 set t0 to (current date)'s time
 display alert "(3)giving up after 12" giving up after 12
 set lap's end to ((current date)'s time) - t0
 
 lap
 --{結果:4, 4, 4}

入力した値を取得

default answer オプションを指定することで、テキストフィールドに値を入力して取得できるようになる。

但し、default answerはdisplay dialogだけのオプション。display alertでは使えない。

display dialog
  • default answerで指定した値がテキストフィールドに設定されて、入力待ちになる。
  • 空欄のテキストフィールドにしたければ、default answer ""とすればOK。

 display dialog "名前を入力してください。" default answer "例:山田"
 --{text returned:"例:山田", button returned:"OK"}

f:id:zariganitosh:20110621205249p:image

  • with hidden answerとすることで、入力した値が表示されないテキストフィールドになる。

 display dialog "パスワードを入力してください。" default answer "パスワード" with hidden answer
 --{text returned:"パスワード等", button returned:"OK"}

f:id:zariganitosh:20110621205248p:image


  • ちなみに、レコード形式の返り値のキーには、 text returned、button returned、gave up の3つが含まれる可能性がある。

 display dialog "名前を入力してください。" default answer "例:山田" giving up after 4
 --{text returned:"例:山田", button returned:"", gave up:true}

所感

  • giving up afterを使いたいなら、display dialogを使った方が良い。display alertでは苦労しそう。
  • 長い情報を1行で収めたいなら、display alert の message オプションを使うのが良さそう。
  • display alertのタイトルとメッセージに分かれた書式は、情報をわかり易く伝えられそう。
  • 特にこだわりがなければ、自分の場合は、基本的に display dialog を使うことにしよう。
    • キャンセルボタンもデフォルトで設定されているし、
    • アイコンも3種類を使い分けられるので。

MiczyMiczy 2014/07/13 22:12 display alertのgiving up after指定の問題はMac OS X Mavericksでは発生していないようです。

zariganitoshzariganitosh 2014/07/14 10:02 自分もMavericks環境で試してみると、おっしゃるとおり直っていました!(嬉しいですね)
情報ありがとうございました。
本文中にも追記しておきました。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/zariganitosh/20110622/display_dialog_vs_alert
リンク元