MAXScript のメッセージ ボックスおよび問い合わせダイアログ ボックス

これらの関数を使用すると、MAXScript 内からメッセージ ボックスや「はい/いいえ」の問い合わせダイアログ ボックスを表示できます。

   

messageBox <message_string> [title:<window_title_string>] [beep:<boolean>] 	 

メッセージの文字列と[OK]ボタンを含むモーダル メッセージ ボックスを表示します。メッセージ ボックス ウィンドウのタイトルは、 title: キーワード パラメータで設定できます。 beep: キーワード パラメータを使用すると、ビープ音を鳴らすかどうかをコントロールできます。このパラメータの既定値は、 true です。

   

queryBox <message_string> [title:<window_title_string>] [beep:<boolean>]   

messageBox() 関数が作成するメッセージ ボックスに似たモーダル メッセージ ボックスを表示します。ただし、このモーダル メッセージ ボックスには、[はい](Yes)ボタンおよび[いいえ](No)ボタンが付いています。 queryBox() 関数は、このメッセージ ボックスで[はい](Yes)ボタンをクリックした場合は true 、[いいえ](No)ボタンをクリックした場合は false を返します。

   

yesNoCancelBox <message_string> [title:<window_title_string>] [beep:<boolean>] 

messageBox() 関数が作成するメッセージ ボックスに似たモーダル メッセージ ボックスを表示します。ただし、このモーダル メッセージ ボックスには、[はい](Yes)ボタン、[いいえ](No)ボタン、および[キャンセル](Cancel)ボタンが付いています。 yesNoCancelBox() 関数は、このメッセージ ボックスでクリックされたボタンによって #yes #no または #cancel のいずれかを返します。

例:

messageBox "You shouldn't have done that"
if queryBox "Do you want to continue?" beep:false then...

上記のダイアログ ボックス関数呼び出しを含むステートメントの後に発生する MAXScript ステートメントは、場合によって、実行されるべきタイミング以前に実行されることがあります。

たとえば、次のスクリプトを実行した場合を例にとります。

スクリプト:

for _t=0 to 3 do
(
messagebox "Press Me"
format "_t= %\n" _t
)
print "Should print last"

リスナーへの出力は次のとおりです。

_t= 0
"Should print last"
"Should print last"
_t= 1
_t= 2
_t= 3

メッセージ ボックスは、 _t の値がリスナーに出力される前に毎回(この例では 4 回)表示されます。

これは、バックグラウンド スレッドでコンパイルおよび実行する式をリスナーが検索するためです。上記の例には、 for ループ式と最後の print 式の 2 つがあります。 messageBox() 関数は、メイン UI スレッド内で UI イベントの発生と処理を待ち続けます。一方、コンパイラは既にコンパイルを行い、print "Should print last" の実行準備が整っています。

このような誤った順序での実行を防ぐには、スクリプトをカッコで囲む必要があります。こうすると、スクリプトは 2 つの式ではなく 1 つの式だけを含むことになり、正しい順序で実行されるようになります。