TreeView リファレンス
Tablacus Explorer のフォルダツリー(CTRL_TV)のリファレンスです。
- ツリーは
FV.TreeView(FolderView 側から)またはte.Ctrl(CTRL_TV)で取得します。ビューごとにツリーを持ちます。 - 関連: te リファレンス、api リファレンス、FolderView(ShellBrowser)リファレンス、FolderItems リファレンス
記法: P=プロパティ(
TV.Nameで読み、TV.Name = vで書く)、M=メソッド(TV.Name(...))。
目次
1. 取得方法
const TV = FV.TreeView; // ビューのツリー
const TV2 = te.Ctrl(CTRL_TV); // 現在のビューのツリー
const arTV = te.Ctrls(CTRL_TV, true); // 表示中のツリーすべて
const TV3 = te.CreateCtrl(CTRL_TV); // 新規作成
重要: ツリーが非表示(
Alignのビット2が立っていない)のとき、多くのメンバーは値を返さずS_FALSE(何もしない)になります。例外はRoot/SetRoot/Align/Visible/Width/Style/EnumFlags/RootStyle/Data/Type/hwnd/Closeなどです。使う前にTV.Visibleで表示状態を確認してください。
2. 基本・表示
| 名前 | 種別 | 説明 |
|---|---|---|
Type |
P(読み) | 常に CTRL_TV を返す |
Data |
P | スクリプトが自由に保持できる値 |
hwnd |
P(読み) | ツリーを含むウィンドウのハンドル |
hwndTree |
P(読み) | ツリービューコントロール本体(SysTreeView32)のハンドル |
FolderView |
P(読み) | このツリーが属する FolderView。属するビューが無ければ現在のビューを返す |
Align |
P | 配置(SB_TreeAlign)。ビット2(値2)が立っていると表示。代入すると再配置し表示を更新する。旧仕様でVisibleの使用を推奨 |
Visible |
P | 表示状態。代入は true で Align = 3、false で Align = 1。変更されたときは OnVisibleChanged が呼ばれる。取得はビット2の有無を返す |
Width |
P | ツリーの幅(px) |
Style |
P | ツリーのスタイル(NSTCS_*)。変更するとツリーが再作成される |
Close() |
M | ツリーを閉じる(Align を 0 にして破棄) |
Focus() |
M | ツリー(hwndTree)にフォーカスを移す |
Refresh() |
M | ルートの再設定を約100ms後に予約して再読み込みする |
Width/Style/EnumFlags/RootStyleは、ツリーが非表示でも読み書きできます。WidthとStyleの変更はツリー全体(以降に作られるツリー)の既定値としても保存されます。Style/EnumFlags/RootStyleの変更時は、ツリーが閉じられて再作成されます。
3. ルート・列挙設定
| 名前 | 種別 | 説明 |
|---|---|---|
Root |
P | ルートの設定値(文字列)。読み取りは現在のルート(文字列)、代入は SetRoot と同等 |
SetRoot(root [, enumFlags [, rootStyle]]) |
M | ツリーのルートを設定する。root はパス/FolderItem/ルートを表す文字列等。enumFlags・rootStyle を渡すと、列挙フラグとルート表示形式も変更する。省略すると既定値(FV の既定)に戻る |
EnumFlags |
P | 列挙フラグ(SHCONTF_*)。隠しファイルの表示/非表示等を指定する |
RootStyle |
P | ルートの表示形式(NSTCRS_*) |
TV.SetRoot("C:\\Users", SHCONTF_FOLDERS, NSTCRS_VISIBLE);
4. 選択・展開・操作
| 名前 | 種別 | 説明 |
|---|---|---|
SelectedItem |
P(読み) | 選択中のアイテム(FolderItem)。無ければ空 |
SelectedItems() |
M | 選択中のアイテムを FolderItems で返す |
Expand(item, bExpand) |
M | アイテムを選択し、bExpand が 0 以外なら展開する。処理は約100ms後に実行される。空/ルート/検索フォルダは無視される。「インターネット」配下は te.ShowInternet が偽のとき親まで遡って扱われる |
TV.Expand(FV.FolderItem, 1); // 現在のフォルダを選択して展開
5. 位置・ヒットテスト・通知
| 名前 | 種別 | 説明 |
|---|---|---|
HitTest(pt [, flags]) |
M | スクリーン座標 pt にあるアイテムを返す。flags は TVHT_*(省略時は TVHT_ONITEM、NSTCS_FULLROWSELECT が有効なら TVHT_ONITEM \| TVHT_ONITEMRIGHT)。flags を省略した場合は FolderItem、指定した場合はアイテムのハンドル(HTREEITEM)を返す。無ければ 0 |
GetItemRect(item, rc) |
M | アイテムの矩形を rc(RECT の Memory)に書き込む(api.Memory("RECT"))。成功は S_OK(0) |
Notify(event, item, ...) |
M | シェル変更通知(SHCNE_*)をツリーに伝える。event が追加系(SHCNE_MKDIR / SHCNE_MEDIAINSERTED / SHCNE_DRIVEADD / SHCNE_NETSHARE)の場合、親が展開済みなら新しい項目を表示する。削除系(SHCNE_RMDIR / SHCNE_DRIVEREMOVED / SHCNE_MEDIAREMOVED / SHCNE_NETUNSHARE / SHCNE_RENAMEFOLDER ほか)の場合は該当項目を除去する。最低 3 つの引数が必要(event, item1, ...) |
6. ツリー関連イベント(参考)
te.OnItemClick はツリーのクリックでも呼ばれ、実装上の引数は (Ctrl=TreeView, Item=FolderItem, HitTest, Flags) の順です(HitTest は NSTCEHITTEST、Flags は NSTCSTYLE)。戻り値が返ればその値(HRESULT)が採用されます。OnSelectionChanged・OnVisibleChanged も TreeView を引数に呼ばれます。
7. 定数
consts.js で定義されています。
NSTCS_*(Style)
NSTCS_HASEXPANDOS = 1 / NSTCS_HASLINES = 2 / NSTCS_SINGLECLICKEXPAND = 4 / NSTCS_FULLROWSELECT = 8 / NSTCS_SPRINGEXPAND = 0x10 / NSTCS_HORIZONTALSCROLL = 0x20 / NSTCS_ROOTHASEXPANDO = 0x40 / NSTCS_SHOWSELECTIONALWAYS = 0x80 / NSTCS_NOINFOTIP = 0x200 / NSTCS_EVENHEIGHT = 0x400 / NSTCS_NOREPLACEOPEN = 0x800 / NSTCS_DISABLEDRAGDROP = 0x1000 / NSTCS_NOORDERSTREAM = 0x2000 / NSTCS_RICHTOOLTIP = 0x4000 / NSTCS_BORDER = 0x8000 / NSTCS_NOEDITLABELS = 0x10000 / NSTCS_TABSTOP = 0x20000 / NSTCS_FAVORITESMODE = 0x80000 / NSTCS_AUTOHSCROLL = 0x100000 / NSTCS_FADEINOUTEXPANDOS = 0x200000 / NSTCS_EMPTYTEXT = 0x400000 / NSTCS_CHECKBOXES = 0x800000 / NSTCS_PARTIALCHECKBOXES = 0x1000000 / NSTCS_EXCLUSIONCHECKBOXES = 0x2000000 / NSTCS_DIMMEDCHECKBOXES = 0x4000000 / NSTCS_NOINDENTCHECKS = 0x8000000 / NSTCS_ALLOWJUNCTIONS = 0x10000000 / NSTCS_SHOWTABSBUTTON = 0x20000000 / NSTCS_SHOWDELETEBUTTON = 0x40000000 / NSTCS_SHOWREFRESHBUTTON = 0x80000000
SHCONTF_*(EnumFlags)
SHCONTF_CHECKING_FOR_CHILDREN = 0x10 / SHCONTF_FOLDERS = 0x20 / SHCONTF_NONFOLDERS = 0x40 / SHCONTF_INCLUDEHIDDEN = 0x80 / SHCONTF_INIT_ON_FIRST_NEXT = 0x100 / SHCONTF_NETPRINTERSRCH = 0x200 / SHCONTF_SHAREABLE = 0x400 / SHCONTF_STORAGE = 0x800 / SHCONTF_NAVIGATION_ENUM = 0x1000 / SHCONTF_FASTITEMS = 0x2000 / SHCONTF_FLATLIST = 0x4000 / SHCONTF_ENABLE_ASYNC = 0x8000 / SHCONTF_INCLUDESUPERHIDDEN = 0x10000
NSTCRS_*(RootStyle)
NSTCRS_VISIBLE = 0 / NSTCRS_HIDDEN = 1 / NSTCRS_EXPANDED = 2
TVHT_*(HitTest)
TVHT_NOWHERE = 1 / TVHT_ONITEMICON = 2 / TVHT_ONITEMLABEL = 4 / TVHT_ONITEMINDENT = 8 ほか(consts.js 参照)
8. 使用例
const FV = te.Ctrl(CTRL_FV);
const TV = FV.TreeView;
// 表示/非表示
TV.Visible = true;
TV.Width = 250;
// ルートを設定
TV.SetRoot("C:\\", SHCONTF_FOLDERS | SHCONTF_INCLUDEHIDDEN, NSTCRS_VISIBLE);
// 現在のフォルダを展開して選択
TV.Expand(FV.FolderItem, 1);
// マウス位置のアイテムを取得 (flags 省略で FolderItem が返る)
const pt = api.Memory("POINT");
api.GetCursorPos(pt);
const item = TV.HitTest(pt);
if (item) {
FV.Navigate(item, SBSP_SAMEBROWSER);
}
9. 旧バージョン互換メンバー
次のメンバーは、現在のビルド(NameSpaceTreeControl を使用)の実装では専用の処理が見当たらず、呼び出しても値は返りません(メンバーが見つからないエラーになる場合があります)。Windows 2000 / XP 向けの旧ビルドで使われていた IShellNameSpace コントロール由来の名前で、旧ビルドでの挙動は要確認です。新規スクリプトでは使用しないでください。
CountViewTypes Depth EnumOptions Export Flags Import Mode ResetSort SetViewType Synchronize TVFlags Columns