UI・ダイアログ
MaxScript チートシート の章一覧
ユーザーとのやり取りです。一行の確認や入力は組み込み関数、本格的なツールパネルは rollout で作ります。
メッセージ・確認ダイアログ
messageBox "処理が完了しました" -- OK だけの通知
messageBox "失敗しました" title:"エラー" beep:true
queryBox "続行しますか?" -- Yes/No → true/false
yesNoCancelBox "保存しますか?" -- #yes / #no / #cancel を返す
queryBoxはtrue/false、yesNoCancelBoxは Name 値(#yes等)を返します。
一行の値入力
n = getKBValue prompt:"数値を入力" -- 数値入力(キャンセルで undefined)
s = getKBLine prompt:"文字を入力" -- 文字列入力
- ⚠️ どちらもキャンセルすると
undefined。使う前にチェックします。
プログレスバー
progressStart "処理中..."
for i in 1 to 100 do
(
-- ...何か処理...
progressUpdate i -- 0〜100 で進捗を更新
if getProgressCancel() then exit -- ユーザーがキャンセルしたら中断
)
progressEnd()
- ⚠️
progressStartとprogressEndは 必ずペア にします。途中で抜けるときもprogressEndを忘れないようにします。
rollout(ツールパネル)
rollout myTool "My Tool" width:200
(
spinner spnCount "個数:" range:[1,100,5] type:#integer
checkbox chk "ランダム配置" checked:false
dropdownlist ddl "並び方:" items:#("横一列", "円形")
edittext edt "接頭辞:" text:"Box"
button btnRun "実行"
label lblInfo "待機中"
on btnRun pressed do
(
lblInfo.text = "実行中..."
for i in 1 to spnCount.value do box pos:[i*20,0,0]
lblInfo.text = "完了"
)
)
createDialog myTool -- フローティングダイアログとして表示
-- destroyDialog myTool -- 閉じる
- ボタン押下などは
on <コントロール名> <イベント> do (...)で処理します。 - 主なコントロール:
buttonspinnercheckboxdropdownlistedittextlabelradiobuttonscolorpicker。 listbox/multilistbox/pickbuttonなど、コントロールごとの書き方とイベントは 「rollout コントロール」章 にまとめています。
rollout の値を読む / 書く
myTool.spnCount.value -- スピナの現在値
myTool.spnCount.value = 10 -- 値を設定
myTool.chk.checked -- チェックボックスの状態
myTool.ddl.selection -- ドロップダウンの選択インデックス
myTool.edt.text -- エディットボックスの文字列
- rollout の外(リスナーなど)からは
rollout名.コントロール名で参照します。rollout 定義内のイベントハンドラの中では名前だけで書けます。
落とし穴まとめ
- 入力系(
getKBValue等)はキャンセルでundefined。必ずチェックする。 progressStart/progressEndはペア。例外時も閉じる。- rollout のイベントは
on コントロール名 イベント do。コントロール名は一意にする。 - 重い処理中は
progressUpdateを呼ばないと UI が固まって見える。
関連
- コントロールごとの定義・プロパティ・イベント: 「rollout コントロール」章
- 入力値の整形・検証: 「文字列・配列」章
- 処理対象の選択: 「選択・取得」章