CreateDialog

CreateDialog 関数を使うと、既存のロールアウト定義をフロータのダイアログに返すことができます。

1 つ以上のロールアウトのコンテナである RolloutFloater を除き、ダイアログはロールアウト自身の特殊な表示形式です。

これは、モーダル表示オプション、バックグラウンド ビットマップ表示およびマウスの各イベント ハンドラといった拡張機能を提供します。

ダイアログ作成の構文は次に示すとおりです。

CreateDialog <Rollout> [<width> <height> <position_x> <position_y>]\
[pos:<Point2>] [width:<integer>] [height:<integer>] \
[bgcolor:<color>] [fgcolor:<color>] \
[bitmap:<bitmap>] {bmpstyle:<bmpstyle> \
[menu:<RCMenu>] [style:<array>] [modal:<boolean>] \
[escapeEnable:<boolean>] [lockHeight:<boolean>] [lockWidth:<boolean>] \
[autoLayoutOnResize:<boolean>] [parent:<HWND>]    

オプションの modal: キーワードを True に設定していると、ダイアログ ボックスは、そのダイアログ ボックス内以外のすべてのユーザ インタラクションを無視します。

ダイアログ ボックスを閉じる場合は、DestroyDialog() を呼び出します。通常この関数は、スクリプトを記述された[OK]ボタンに関連付けます。

escapeEnable キーワードが False に設定されているか、または指定されていない場合、ユーザは[Esc]キーを押して、スクリプト モーダル ダイアログ ボックスを閉じることもできます。

オプションの escapeEnable キーワードを True に設定すると、ダイアログ ボックスで MAXScript エスケープ チェッカが無効になり、Interrupted のメッセージは表示されません。

オプションの lockHeight キーワードが True の場合、ダイアログ ボックスの高さをインタラクティブに変更することはできません。

オプションの lockWidth キーワードが True の場合、ダイアログ ボックスの幅をインタラクティブに変更することはできません。

パラメータ

<Rollout>

ダイアログ ボックスの作成元のロールアウト定義。

pos:<Point2> -- default:dialog will center within MAX.     

ダイアログ ボックスの左上隅が画面の左上隅に対応するように配置します。

width:<integer> -- default:200   

ダイアログ ボックスの幅。

height:<integer> -- default:dynamic on control extents

ダイアログ ボックスの高さ。

bgcolor:<color> -- default:(<system button color>)

ダイアログ ボックスのバックグラウンド色。

fgcolor:<color> -- default:(color 0 0 0)

ダイアログ ボックスの前景カラー(固定テキスト カラー)

bitmap:<bitmap> -- default:undefined

ダイアログ ボックスの背景ビットマップ。

bmpstyle:<key> -- default:#bmp_center

背景ビットマップを表示する方法は、

引数には次のいずれかを使用できます。

#bmp_center #bmp_tile #bmp_stretch
menu:<RCMenu> -- default:undefined

ダイアログ ボックスのタイトル バー領域に表示されるメニュー。

style:<array> -- default:#(#style_titlebar, #style_border, #style_sysmenu)

スタイル フラグの配列は、次の 1 つまたは複数になります。

#style_border: 2 重境界線を持ち、タイトルのないウィンドウを作成します。

#style_titlebar: タイトル バーを持つダイアログ ボックスを作成します。

#style_toolwindow: ツール ウィンドウを作成します。 このウィンドウにはタイトル バーがあり、浮動ツールバーとして使用できます。ツール ウィンドウには、通常のタイトル バーより小さなタイトル バーがあり、フォントを小さくしてウィンドウのタイトルを表示します。

#style_resizing: ウィンドウのサイズ変更に使用できる太い枠を持つウィンドウを作成します。

#style_minimizebox: 最小化ボタンを持つウィンドウを作成します。

#style_maximizebox: 最大化ボタンを持つウィンドウを作成します。

#style_sysmenu: ウィンドウ メニューがタイトル バーに表示されるウィンドウを作成します。

#style_sunkenedge: ウィンドウが、境界線のエッジがくぼんだ形式の 3D の形状になるように指定します。

注: スタイル キーワード パラメータを指定していない場合は、#style_titlebar#style_border#style_sysmenu が既定のスタイルとして使用されます。
autoLayoutOnResize:<boolean>]

true に設定されている場合に、UI またはスクリプトでダイアログ ボックスのサイズを変更すると、ロールアウトに対して autoLayoutOnResize:true も指定されているときは、このロールアウト内のコントロールのレイアウトが更新されます。3ds Max 2019 以降で使用可能です。

既定値は false です。

parent:<HWND> -- default:<MAX_HWND>

指定したウィンドウをダイアログの親にします。

指定しない場合、親は 3ds Max のウィンドウ ハンドルに設定され、ダイアログは 3ds Max の UI とともに最小化/最大化されます。

有効な HWND に設定した場合は、ダイアログは指定した親の子ダイアログになり、親とともに最小化/復元されます。また、親にフォーカスがあるときにも常に親の前面に表示されます。

ロールアウト クラスには .hwnd プロパティが用意されているため、簡単にダイアログを別のダイアログの親にすることができます。

例:

    rollout parent_dialog "Parent" --define a rollout and create a dialog
    (
        label lbl_test "Parent"
        on parent_dialog close do print "PARENT Closed!"
    )

    createDialog parent_dialog pos:[100,100] style:#(#style_titlebar, #style_border, #style_sysmenu, #style_minimizebox)

    rollout child_dialog "Test2" --define another rollout
    (
        label lbl_test "Child"
        on child_dialog close do print "CHILD Closed!"
    )
    --Create a dialog from the second rollout and pass the .HWND of the first dialog as the parent: argument:
    createDialog child_dialog pos:[200,130] parent:parent_dialog.hwnd style:#(#style_titlebar, #style_border, #style_sysmenu, #style_minimizebox)
    setFocus parent_dialog --set focus on the Parent dialog - the Child will still be drawn in front of it!

この時点で、親ダイアログを最小化および復元すると、子ダイアログがそれに従います。親ダイアログが最小化されると、子はまったく表示されなくなります。

親ダイアログを閉じると自動的に子が閉じますが、この場合は子ダイアログの on close do ハンドラは呼び出されません

注: .parent プロパティはありません。パラメータのみです。作成済みのダイアログの親を動的に再指定することはできません。

例:

    (
    sme.Open() --Open the SME
    theParent = windows.getChildHWND 0 "Slate Material Editor" --get the HWND of the SME
    rollout sme_toolbox_rollout "SME Toolbox"
    (
        button btn_nextMap "UP One Level" width:150
        on btn_nextMap pressed do
        (
            theObj = sme.GetMtlInParamEditor() --get the node from the parameter panel
            if theObj != undefined do --if there is a valid node, get its dependents
            (
                local theDeps = for m in refs.dependents theObj where isKindOf m TextureMap or isKindOf m Material collect m
                if theDeps.count > 0 do sme.SetMtlInParamEditor theDeps[1]    --if there were any, select the first one    
            )
        )
    )
    createDialog sme_toolbox_rollout parent:theParent[1] --create a dialog as child of the SME
    )

新しいダイアログは SME の前面に表示され、SME とともに最小化/復元されますが、SME が閉じられてもダイアログは閉じられません。

イベント

on <Rollout> open do

ダイアログ ボックスが開いているときに呼び出されます。

on <Rollout> close do

ダイアログ ボックスが閉じているときに呼び出されます。

on <Rollout> moved <Point2> do

ダイアログ ボックスを移動しているときに呼び出されます。

on <Rollout> resized <Point2> do

ダイアログ ボックスのサイズを変更しているときに呼び出されます。

on <Rollout> mousemove <Point2> do

ダイアログ ボックスのクライアント領域内でマウスを動かしているときに呼び出されます。

on <Rollout> lbuttondown <Point2> do

ダイアログ ボックス内でマウスの左ボタンを押したときに呼び出されます。

on <Rollout> lbuttonup <Point2> do

左のマウス ボタンが解放されたときに呼び出されます。

on <Rollout> lbuttondblclk <Point2> do

ダイアログ ボックス内でマウスの左ボタンをダブルクリックしたときに呼び出されます。

on <Rollout> mbuttondown <Point2> do

ダイアログ ボックス内でマウスの中央ボタンを押したときに呼び出されます。

on <Rollout> mbuttonup <Point2> do

マウスの中央ボタンを離したときに呼び出されます。

on <Rollout> mbuttondblclk <Point2> do

ダイアログ ボックス内でマウスの中央ボタンをダブルクリックしたときに呼び出されます。

on <Rollout> rbuttondown <Point2> do

ダイアログ ボックス内でマウスの右ボタンを押したときに呼び出されます。

on <Rollout> rbuttonup <Point2> do

マウスの右ボタンを離したときに呼び出されます。

on <Rollout> rbuttondblclk <Point2> do

ダイアログ ボックス内でマウスの右ボタンをダブルクリックしたときに呼び出されます。

注:

イベント ハンドラに渡された <Point2> 値は、ダイアログ ボックスのクライアント ウィンドウ内でのマウスの位置です。[0,0] の値は、クライアント ウィンドウの左上隅に対応します。

関連するメソッド

<Point2>GetDialogPos <Rollout> [removeUIScaling: <boolean>]
<Point2>GetDialogSize <Rollout>  [removeUIScaling: <boolean>]

ロールアウトで作成したダイアログ ボックスの、画面の左上からの相対的な位置またはサイズを Point2 形式で返します。

removeUIScaling の場合は、高 DPI ディスプレイによって適用される UI のスケールを削除します。既定値は true です。

SetDialogPos <Rollout> <Point2> [applyUIScaling: <boolean>]

ロールアウトから作成されたダイアログ ボックスの位置を設定します。位置は、画面の左上隅に対する相対的な位置です。

<Rollout>: ダイアログ作成時、位置の設定に使用するロールアウト。

<Point2>: ダイアログ ボックスに適用される位置です。

applyUIScaling: true の場合は、高 DPI ディスプレイの位置に UI スケールを適用します。3ds Max 2019 以降で使用可能です。 既定値は true です。

SetDialogSize <Rollout> <Point2> [applyUIScaling: <boolean>]

ロールアウトで作成したダイアログ ボックスのサイズを設定します。3ds Max 2019 以降で使用可能です。

<Rollout>: ダイアログ作成時、サイズの設定に使用するロールアウト。

<Point2>: ダイアログ ボックスに適用されるサイズです。

applyUIScaling: true の場合は、高 DPI ディスプレイのサイズに UI スケールを適用します。既定値は true です。

SetDialogBitmap <rollout> <bitmap>

ロールアウトが関連付けられているダイアログ ボックスのバックグラウンドのビットマップを設定します。ロールアウトがダイアログ ボックス内にない場合は、何も行われません。ビットマップの値が「undefined」である場合、現在のビットマップの設定が解除されます。

<bitmap>GetDialogBitmap <rollout>

ロールアウトが関連付けられているダイアログ ボックスのバックグラウンドのビットマップを取得します。ロールアウトがダイアログ ボックス内にない場合は、「undefined」が返されます。