マクロスクリプト ボタンを正しくチェック解除する方法はありますか。
 
 
 

MAXScript に関する質問と回答 > スクリプト UI の操作 > マクロスクリプト ボタンを正しくチェック解除する方法はありますか。

質問:

ダイアログ ボックスを開くマクロスクリプト ボタンがあるとします。isChecked ハンドラーを利用し、ダイアログ ボックスが開いているときはチェックされたボタンを表示し、再度このボタンが押されたとき (チェック解除されたとき) にダイアログ ボックスを閉じるようにしたいとします。ここまでは問題ありません。ここで、ユーザがインタフェースを[X]ボタンを使用して閉じた場合、もしくはこのマクロスクリプト ボタンを押す以外の何らかの手段で閉じたとします。この場合、このマクロスクリプト ボタンのチェック解除についてはどのように対処すればよいでしょうか。

回答:

この動作を実装する 1 つの例として、現在のオープン/クローズ状態を保持しておく「プライベート グローバル」変数 (マクロスクリプトのスコープにローカル) を使用する方法があります。

この変数を、ロールアウトの On Close() ハンドラー内で設定し、[X]がクリックされたときに、3ds Max GUI を強制的に更新して、ボタンのチェックを解除します。

これは、グローバル変数を使用して実行することもできます (その他のスクリプトでも、スクリプト/ダイアログ ボックスを強制的に閉じられるようにしたい場合)。 また、エラー チェックを追加してもよいでしょう。ただし、一般的な概念は以下のようになります。

例:

macroScript test category:"Tests"
(
  local isOpen = false --false に初期化します (クローズ状態)
  rollout myRollout "MyRollout"
  (
    label lbl_hello "hello world"
    on myRollout close do --閉じられたときに、false に設定して GUI を再描画します。
    (
      isOpen = false
      updateToolbarButtons()
    )
  )
  on execute do
  (
    if isOpen then --開いている場合は、閉じます。
    (
      destroyDialog myRollout
      isOpen = false--フラグを false に設定します。
    )
    else --閉じている場合は、開きます。
    (
      createDialog myRollout
      isOpen = true --フラグを true に設定します。
    )
  )
  on isChecked return isOpen --フラグを返します。
)
関連事項