"Microsoft TreeView Control 6.0 (SP4)" "MSComctlLib.TreeCtrl.2" "{C74190B6-8589-11D1-B16A-00C0F0283628}"
ActiveX コントロールは、DotNet フレームワークとそのコントロールを考慮して、最新バージョンの Microsoft Windows オペレーティング システムで非推奨となりました。
MAXScript では引き続き ActiveX コントロールがサポートされますが、これらは MAXScript にアクセス可能なシステムにインストールおよび登録する必要があります。
ActiveX コントロールの代わりに、MAXScript では、3ds Max 9 以降において DotNet コントロールがサポートされます。
既存の ActiveX コードを DotNet に切り替える例につては、「ActiveX ListView コントロールの DotNet ListView コントロールへの変換」を参照してください。
説明:
TreeView ActiveX コントロール は、MAXScript ロールアウトで最も頻繁に使用する ActveX コントロールの 1 つです。このコントロールは非常に柔軟でカスタマイズすることができるため、この章で詳細に説明します。これは、ノード ツリーと階層表示の作成に使用できます。
3ds Max ユーザ インタフェースで使用する TreeView コントロールの例として、[名前付き選択セット]ダイアログ ボックスが挙げられます。
コンストラクタ:
activeXControl tv "MSComctlLib.TreeCtrl"
プロパティ:
.Nodes : Nodes
TreeView で表現されるノードの配列を取得/設定します。
.Nodes プロパティ:
.Nodes.Count : integer
.Nodes 配列のノードの数を返します。
.Nodes[Index:undefined] : INode
インデックスによるアクセスを使用し、配列からノードにアクセスできます。インデックスの基数は 1 です。
このプロパティで返されるノードには、独自のプロパティとメソッドがあります。 これについては 「TreeView ノードのプロパティおよびメソッド」 で説明します。
例:
first_node = tv.Nodes[1] --returns the first node in the TreeView stored in the variable tv. showProperties first_node --show node properties showMethods first_node --show methods applicable to TreeView nodes
.Nodes メソッド:
.Add Relative:undefined Relationship:undefined Key:undefined Text:undefined Image:undefined SelectedImage:undefined
.Nodes 配列に新しいノードを追加し、結果として新しいノードを返します。
同じメソッドを使用し、既存のノードに子を追加して階層を構築できます。チュートリアル「TreeView ActiveX コントロールを使用したシーン ブラウザの開発 - 第 1 部」の例を参照してください。
このメソッドによって返されるノードには、独自のプロパティとメソッドがあります。 これについては、「TreeView ノードのプロパティおよびメソッド」で説明します。
.Clear()
TreeView コントロールの .Nodes 配列からすべてのノードを削除します。
.Remove Index:undefined
インデックスにより、1 つのノードを削除します。インデックスは、基数 1 です。
._NewEnum()
IVBDataObject を返します。
次のプロパティでは、TreeView コントロールのレイアウトと外観を制御します。
.LineStyle : TreeLineStyleConstants( #tvwTreeLines | #tvwRootLines )
階層内のノードをつなぐ線のスタイルを制御します。#tvwTreeLines
モードでは、接続線がないルート ノードが表示され、その子の間でのみ線が描画されます。#tvwRootLines
では、ルート レベル ノードとその子が線で接続されます。以下でその違いを説明します。
.Style : TreeStyleConstants( #tvwTextOnly | #tvwPictureText | #tvwPlusMinusText | #tvwPlusPictureText | #tvwTreelinesText | #tvwTreelinesPictureText | #tvwTreelinesPlusMinusText | #tvwTreelinesPlusMinusPictureText )
ツリー表示のスタイルを制御します。
以下は、アイコンを含まない、典型的な 4 つのスタイルを示しています。
アイコンを有効にすると、線、プラス記号、マイナス記号、およびテキスト ラベルの間にアイコンが表示されます。
.Appearance : AppearanceConstants( #ccFlat | #cc3D )
TreeView コントロールの外観を制御します。#cc3D
は既定値です。
.BorderStyle : BorderStyleConstants( #ccNone | #ccFixedSingle )
.Appearance
が #ccFlat
に設定されている場合に境界スタイルをコントロールします。#ccFixedSingle
に設定した場合、単一ピクセルの境界線が TreeView の周囲に描かれます。
.Indentation : float
Twips のインデント値を取得および設定します。この値では、親を基準にして子をどれだけインデントするかを制御します。ピクセル(420 twips)以下の値ではインデントされず、プラス記号とマイナス記号が小さく表示されることに注意してください。
次のスクリーンショットは、10 ピクセル、28 ピクセル、40 ピクセル、60 ピクセルのインデントを表しています。
.Checkboxes : boolean
true に設定すると、それぞれのノードの前にチェックボックスが表示されます。false (既定値)に設定すると、チェックボックスは表示されません。
.PathSeparator : string
ノードの .FullPath
プロパティが使用するパス セパレータ文字列を定義します。たとえば、値を「>」に設定し、ノード「ROOT」の子ノード「Box01」の子ノード「Sphere01」の .FullPath
プロパティを取得すると、パス文字列「ROOT>Box01>Sphere01」が返されます。
.Enabled : boolean
true に設定すると、TreeView が編集可能になります。false に設定すると、TreeView にはノードが表示されますが、TreeView をインタラクティブに操作することはできません。2 つのモードに視覚的な差異はありません。
.DropHighlight : INode
このプロパティに TreeView ノードを割り当てると、TreeView はハイライト表示されます(選択されたように表示されますが、選択状態フラグは設定されません)。ハイライトは選択ハイライトの影響を受けず、DropHighlight が未定義に設定されるまで、指定したノードはハイライト表示されます。
.LabelEdit : LabelEditConstants( #tvwAutomatic | #tvwManual )
ラベル(ノードのテキスト)の編集を制御します。既定は #tvwAutomatic
です。自動の場合、ユーザはノードを単純に選択して再度クリックし、ラベルを編集できます。手動の場合、開発者が、以下で説明する StartLabelEdit() メソッドを使用してラベルの編集を始める必要があります。
.Scroll : boolean
true (既定値)に設定すると、ツリーが TreeView 領域に収まらない場合、水平スクロールバーと垂直スクロールバーが表示されます。false に設定した場合、スクロールバーは表示されません。
.Font : IFontDisp
TreeView で使用するフォントを定義します。MAXScript では設定できません。
次のプロパティでは、TreeView コントロールにおけるノードの選択にアクセスして制御できます。
.SelectedItem : INode
現在選択されているノードを返します。
.HideSelection : Boolean
true に設定した場合、選択は表示されません。false に設定した場合、選択が表示されます。
.FullRowSelect : boolean
true に設定した場合、行全体が選択されます。
.HotTracking : boolean
true に設定した場合、マウスが ListItems の上に移動すると、ListItems がハイライト表示されますfalse (既定値)に設定した場合、ListItem の上にマウスを移動しても影響はありません。
.SingleSel : boolean
true (既定値)に設定した場合、新しい分岐を選択すると、それまでに展開されていた分岐が自動的に縮小されます。false に設定した場合、複数の分岐を同時に開くことができます。
.ImageList : IVBDataObject
アイコンとして使用されるすべてのイメージが保存されている配列です。ImageList ActiveX コントロールによって提供できる IVBDataObject (Visual Basicデータ オブジェクト)を要求します。実例については、「チュートリアル - TreeView ActiveX コントロールを使用したシーン ブラウザの開発 - 第 2 部」を参照してください。
.MousePointer : MousePointerConstants( #ccDefault | #ccArrow | #ccCross | #ccIBeam | #ccIcon | #ccSize | #ccSizeNESW | #ccSizeNS | #ccSizeNWSE | #ccSizeEW | #ccUpArrow | #ccHourglass | #ccNoDrop | #ccArrowHourglass | #ccArrowQuestion | #ccSizeAll | #ccCustom)
マウス ポインタが ListView Control の上にある場合のマウス ポインタのタイプを取得/設定します。スクリプト開発者は、このページで詳しく説明するマウス イベントを使用し、基礎となる内容か許可されているアクションによってマウス ポインタを変更できます。
.MouseIcon : IPictureDisp
マウス アイコンを IPictureDisp 値で返します。MAXScript では設定できません。
.Sorted : boolean
false (既定値)に設定した場合、ノードは、.Nodes 配列に追加された順序で表示されます。
true に設定した場合、ノードはアルファベット順にソートされます。
.OLEDragMode : OLEDragConstants( #ccOLEDragManual | #ccOLEDragAutomatic )
OLE Drag モードを制御します。手動に設定すると、スクリプト メソッド .OLEDrag() のみによってドラッグを開始できます。自動に設定すると、ユーザはリストからノードをドラッグできます。
.OLEDropMode : OLEDropConstants( #ccOLEDropNone | #ccOLEDropManual))
OLE Drop モードを制御します。
.hWnd : OLE_HANDLE
メソッド
.HitTest x:float y:float
指定した X 座標と Y 座標でヒット テストを実行します。
.GetVisibleCount()
表示ノードの数を返します。
.StartLabelEdit()
現在選択しているノードのラベル編集を手動で開始します。
.Refresh()
TreeView 表示をリフレッシュします。
.OLEDrag()
OLE Drag を手動で開始します。
イベント
on <control_name> BeforeLabelEdit Cancel:integer do ( ... )
ラベル編集を開始する前に呼び出されます。
on <control_name> AfterLabelEdit Cancel:integer NewString:string do ( ... )
ラベル編集を終了した後に呼び出されます。
on <control_name> Collapse Node:Node do ( ... )
ノードが縮小されたときに呼び出されます。引数には、縮小されたノードが含まれます。
on <control_name> Expand Node:Node do ( ... )
ノードが展開されたときに呼び出されます。引数には、展開されたノードが含まれます。
on <control_name> NodeClick Node:Node do ( ... )
ノードがクリックされたときに呼び出されます。引数には、クリックされたノードが含まれます。
on <control_name> KeyDown KeyCode:integer Shift:integer do ( ... )
ユーザがキーを押したときに呼び出されます。KeyCode 引数には押されたキーの整数コードが含まれ、Shift 引数には[Shift]、[Ctrl]、および[Alt]キーが押されているかどうかを示すビットから成る整数値が含まれます。ビット 1 が[Shift]キー、ビット 2 が[Ctrl]キー、ビット 3 が[Alt]キーを表します。
0 - モディファイヤ キーは押されていません。
1 - 左または右の[Shift]キーが押されました。
2 - 左または右の[Ctrl]キーが押されました。
3 - [Ctrl] + [Shift]キーが同時に押されました。
4 - 左または右の[Alt]キーが押されました。
6 - [Ctrl] + [Alt]キーが同時に押されました。
7 - [Ctrl]、[Alt]、[Shift]キーが同時に押されました。
MAXScript 構文の例:
on tv keyDown theKeyCode theShiftState do ( format "Key Code is %, Shift State is %\n" theKeyCode theShiftState ) --where tv is the name of the ActiveX TreeView, --theKeyCode and theShiftState are user-defined variable names.
on <control_name> KeyUp KeyCode:integer Shift:integer do ( ... )
ユーザがキーを放したときに呼び出されます。KeyCode 引数には放したキーの整数コードが含まれ、Shift 引数には[Shift]、[Ctrl]、および[Alt]キーが押されているかどうかを示すビットから成る整数値が含まれます。上記を参照してください。
on <control_name> KeyPress KeyAscii:integer do ( ... )
ユーザがキーを押したときに呼び出されます。KeyAscii 引数には、押されたキーの ASCII 整数コードが含まれます。たとえば、[スペース]を押すと 32 が、[Shift]+[A]を押すと 65 が返されます。
on <control_name> MouseDown Button:integer Shift:integer x:OLE_XPOS_PIXELS y:OLE_YPOS_PIXELS do ( ... )
ユーザがマウスで TreeView をクリックしたときに呼び出されます。
Button 引数には、マウスのボタンに対応するビットから成る整数値が含まれます。ビット 1 は左マウス ボタンを、ビット 2 は右マウス ボタンを、ビット 3 は中央のマウス ボタンまたはホイールを表します。
1 - 左マウス ボタンが押されました。
2 - 右マウス ボタンが押されました。
4 - 中央のマウス ボタンまたはホイールが押されました。
複数のマウス ボタンを同時に押しても値は追加されず、それぞれのボタンの個別イベントが生成されます。
Shift 引数には、先に説明したとおり、[Shift]、[Ctrl]、および[Alt]キーの状態が含まれます。
x 引数 および y 引数には、TreeView ピクセル座標(twip ではありません)におけるクリックの位置が含まれます。ここで、0,0 は TreeView コントロールの左上隅になります。
例:
rollout test "Test" ( activeXControl tv "MSComctlLib.TreeCtrl" height:100 width:100 on tv MouseDownButton Shift x y do format "Button: %, Shift: %, xy: %,%\n" Button Shift x y ) createDialog test
on <control_name> MouseMove Button:integer Shift:integer x:OLE_XPOS_PIXELS y:OLE_YPOS_PIXELS do ( ... )
ユーザが TreeView コントロール内にマウスを移動したときに呼び出されます。
Button 引数には、マウスのボタンに対応するビットから成る整数値が含まれます。ビット 1 は左マウス ボタンを、ビット 2 は右マウス ボタンを、ビット 3 は中央のマウス ボタンまたはホイールを表します。
1 - 左マウス ボタンが押されました。
2 - 右マウス ボタンが押されました。
4 - 中央のマウス ボタンまたはホイールが押されました。
複数のマウス ボタンを同時に押しても値は追加されず、それぞれのボタンの個別イベントが生成されます。
Shift 引数には、先に説明したとおり、[Shift]、[Ctrl]、および[Alt]キーの状態が含まれます。
x 引数 および y 引数には、TreeView ピクセル座標(twip ではありません)におけるクリックの位置が含まれます。ここで、0,0 は TreeView コントロールの左上隅になります。
例:
--This script will print the mouse values --while you move the mouse inside the ListView control rollout test "Test" ( activeXControl tv "MSComctlLib.TreeCtrl" height:100 width:100 on tv MouseMove Button Shift x y do format "Button: %, Shift: %, xy: %,%\n" Button Shift x y ) createDialog test
on <control_name> MouseUp Button:integer Shift:integer x:OLE_XPOS_PIXELS y:OLE_YPOS_PIXELS do ( ... )
ユーザが TreeView コントロール上でマウスを放したときに呼び出されます。
Button 引数には、マウスのボタンに対応するビットから成る整数値が含まれます。ビット 1 は左マウス ボタンを、ビット 2 は右マウス ボタンを、ビット 3 は中央のマウス ボタンまたはホイールを表します。
1 - 左マウス ボタンが押されました。
2 - 右マウス ボタンが押されました。
4 - 中央のマウス ボタンまたはホイールが押されました。
複数のマウス ボタンを同時に押しても値は追加されず、それぞれのボタンの個別イベントが生成されます。
Shift 引数には、先に説明したとおり、[Shift]、[Ctrl]、および[Alt]キーの状態が含まれます。
x および y 引数には、TreeView ピクセル座標(twip ではありません)におけるクリックの位置が含まれます。ここで、0,0 は TreeView コントロールの左上隅になります。
例:
rollout test "Test" ( activeXControl tv "MSComctlLib.TreeCtrl" height:100 width:100 on tv MouseUpButton Shift x y do format "Button: %, Shift: %, xy: %,%\n" Button Shift x y ) createDialog test
on <control_name> Click do ( ... )
ユーザが TreeView コントロール内部をクリックしたときに呼び出されます。このイベントは、特定の TreeView ノードを返しませんが、すべてのノードの選択状態かその他のプロパティの問い合わせに使用できます。これは、ユーザが ListView をクリックしたという一般的な通知であり、イベントによって行われる実際のアクションは、スクリプト開発者が指定できます。
on <control_name> DblClick do ( ... )
ユーザが TreeView コントロール内部をダブルクリックしたときに呼び出されます。
on <control_name> NodeCheck Node:Node do ( ... )
ユーザがノードのチェックボックスの状態を変更したときに呼び出されます(プロパティ .checkboxes = true であるため、チェックボックスは表示される必要があります)。
Node 引数には、チェックボックスが変更されたノードが含まれます。変更されたノードの .checked プロパティにアクセスすると、新しい状態にアクセスできます。text や .index など、その他のノード プロパティにもアクセスできます。TreeView ノードのプロパティおよびメソッド を参照してください。
on <control_name> OLEStartDrag &Data:DataObject &AllowedEffects:integer do ( ... )
ユーザが ListView コントロールからドラッグを始めたときに呼び出されます。
on <control_name> OLEGiveFeedback &Effect:integer &DefaultCursors:boolean do ( ... )
ユーザが ListView コントロールからドラッグを始めたときに呼び出されます。
on <control_name> OLESetData &Data:DataObject &DataFormat:integer do ( ... )
on <control_name> OLECompleteDrag &Effect:integer do ( ... )
on <control_name> OLEDragOver &Data:DataObject &Effect:integer &Button:integer &Shift:integer &x:float &y:float &State:integer do ( ... )
on <control_name> OLEDragDrop &Data:DataObject &Effect:integer &Button:integer &Shift:integer &x:float &y:float do ( ... )
次のプロパティおよびメソッドは、単一の TreeView ノードに対して使用できます。
単一のノードを取得するには、.Nodes 配列にインデックスでアクセスするか、.Nodes.Add() メソッドの戻り値を使用します。
.Children : integer
ノードの子の数を返します。
.Parent : INode
親ノードを返します。
.Child : INode
最初の子ノードを返します。
.Root : INode
ルート ノード(階層で最上位の親)を返します。
.Previous : INode
同じ階層レベルの前のノードを返します。
.Next : INode
同じ階層レベルの次のノードを返します。
.FirstSibling : INode
最初の兄弟を返します。
.LastSibling : INode
最後の兄弟を返します。
.FullPath : string
ノードのフル パスを文字列として返します。このページで説明した TreeView の .PathSeparator
プロパティも参照してください。
たとえば値を「>」に設定し、「ROOT」の子ノード「Box01」の子ノード「Sphere01」の .FullPath
プロパティを取得すると、パス文字列「ROOT>Box01>Sphere01」が返されます。
.Text : string
ノードによって表示されるテキストを取得/設定します。
.ForeColor : OLE_COLOR
テキストの色を取得/設定します。
.BackColor : OLE_COLOR
ノードのバックグラウンド色を取得/設定します。
Microsoft ActiveX コントロールでは、RGB カラー仕様ではなく、BGR カラー仕様が使用されます。
.Bold : boolean
true に設定した場合、テキストは太字で表示されます。false に設定すると、通常のテキストが使用されます。
.Index : integer
ノードのインデックスを返します。
.Checked : boolean
ノードのチェック状態を取得/設定します。状態の取得と設定は常に実行できますが、チェックボックスは、TreeView コントロールの .checkboxes
プロパティを true に設定した場合に限って表示されます。
.Visible : boolean
ノードの表示をブール値として取得/設定します。
.Selected : boolean
ノードの表示をブール値として取得/設定します。
.Expanded : boolean
ノードの展開状態を取得/設定します。true に設定すると、すべての子が表示されます。false に設定すると、子の表示が縮小されて親ノードのみが表示されます。
.Image : integer, default:undefined
ノードによって表示されるイメージのインデックスを設定します。インデックスは、TreeView の imageList プロパティを指します。これには ImageList ActiveX コントロールが一般的に割り当てられ、イメージ管理が提供されます。
.SelectedImage : integer, default:undefined
ノードが選択されたときに表示されるイメージのインデックスを設定します。
.ExpandedImage : integer, default:undefined
ノードが展開されたときに表示されるイメージのインデックスを設定します。
.Sorted : Boolean
true に設定した場合、ノードの子がソートされます。
.Key : string
.Tag : undefined
次のメソッドは、単一の TreeView ノードに対して使用できます。
.CreateDragImage()
.EnsureVisible()