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>] \
[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 が既定のスタイルとして使用されます。

   

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> 

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

   

SetDialogPos <Rollout> <Point2> 

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

Rollout: ダイアログ ボックスの作成で使用するロールアウト。

Point2: ダイアログ ボックスを配置する位置。

   

<Point2>GetDialogSize <rollout> 

ウィンドウのクライアント領域のサイズを返します。これは point2 <rollout>.width <rollout>.heigh の場合と同じです。

   

SetDialogBitmap <rollout> <bitmap> 

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

   

<bitmap>GetDialogBitmap <rollout> 

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

関連事項