Gui,Add,TreeView

提供: AutoHotkey Wiki
移動: 案内検索

実行制御 | GUI表示 | 演算・変数 | メモリ・DLL操作 | 文字列操作 | キーボード | マウス | シェル | ウィンドウ | ウィンドウグループ
ステータスバー | コントロール | サウンド | ファイル | INIファイル | レジストリ | 環境変数 | AutoHotkey | その他 | 設定関係 | オブジェクト

Gui,Add,TreeView [v1.0.44+][編集]

GUIウィンドウにツリービューコントロールを追加する。項目の操作を行う組み込み関数も用意されている。

Gui, Add, TreeView [, Options, Text]

Parameters[編集]

引数名 説明
Options オプションを半角スペース区切りで列挙。
共通のオプションについては、Gui,Addの項参照。
固有のオプションは後述。
Vオプションで変数を関連付けても、変数に情報が格納されることはない。
ただし、GuiControlなどのコマンドでコントロールを指定するために利用できる。
Gでラベル名を指定すると、各種の操作が行われるごとにサブルーチンが実行される。詳しくはイベントの節を参照。
Text 不使用。

固有のOption[編集]

AltSubmit Gオプションで指定されたサブルーチンが呼び出されるイベントの数を拡張する。
詳細は拡張イベントの項参照。
cCOLOR COLOR に文字色を指定する。(例: cFF9900 cRed cDefault)
RRGGBB形式のカラーコードや色名Defaultを指定できる。
BackgroundCOLOR COLOR に背景色を指定する。(例: BackgroundFF9900 BackgroundRed BackgroundDefault)
RRGGBB形式のカラーコードや色名Defaultを指定できる。
このオプションがない場合、Gui,Colorの指定に依存する。
Buttons ツリー項目の左側に折りたたみ状態を表示・変更する + -ボタンを表示する。
デフォルトで有効になっている。
-Buttonsでボタンを非表示にできる。
Checked 項目の左側にチェックボックスを付ける。
チェックのON/OFFは項目操作関数で操作できる。
HScroll 横方向へのスクロールを行う。
デフォルトで有効になっている。
-HScrollで横にスクロールしないようにできる。(IE5以上が必要)
ImageListH アイコンに使用する画像を格納したイメージリストを設定する。
イメージリストはイメージリスト操作関数で作成・操作できる。
HIL_Create()が返したイメージリストハンドルを指定する。(例 ImageList%himl%)
このオプションはGui,Addの際にしか使用できない。(SendMessageでTVM_SETIMAGELIST(0x1109)を送ることで変更は可能)
ツリービューが破棄されても、イメージリストは自動的に破棄されないので、 IL_Destroy(himl)で破棄させる必要がある。
Lines ツリーの線を表示する。
デフォルトで有効になっている。
-Linesで線を非表示にできる。
ReadOnly テキストを変更禁止にする。
デフォルトで有効になっている。
-ReadOnlyとすると、1列目の部分をクリックしたりF2キーを押すことで内容を編集することができるようになる。
編集が行われると、 Gオプションで指定したサブルーチンが呼び出される。
WantF2 -ReadOnlyが設定されているとき、F2キーでテキストを編集できるようにする。
デフォルトで有効になっている。
-WantF2とすると、F2キーが押されても編集状態にならないようにできる。
Rn n に行数を数値で指定する(例: R10)
コントロールの高さは、この行数が収まる高さになる。
Icon表示にした場合などは、項目が縦にこの数だけ収まるような高さになる。
(その他数値) ツリービューのスタイルを設定できる。
以下のような物がある。
0x1000 1行選択式にする。
-Linesと同時に設定する必要がある。
0x4 最上位階層の項目の左に線を表示する。
デフォルトで有効になっている。
-0x4とすることで無効にできる。
0x400 同時に一つの項目しか展開できないようにする。
0x200 マウスカーソル下の項目に下線を表示する。

TreeView操作用組み込み関数[編集]

ツリービューを操作するために、多数の機能が関数として用意されている。
TV系の関数が操作対象とするツリービューは、デフォルトGUIウィンドウ上のカレントツリービューである。
カレントツリービューは、通常は最後に項目を追加したツリービューだが、 Gui,TreeView,TVNameのようにして変更できる。
GUIウィンドウが存在しなかったり、デフォルトGUIウィンドウ上にツリービューコントロールが存在しなかった場合、TV系関数は 0を返す。

項目操作[編集]

TV_Add(Name, [ParentItemID, Options]) ツリービューに項目を追加する。
Nameには、項目に表示されるテキストを指定する。
ParentItemIDに指定した項目の一番最後の子項目として追加される。
ParentItemIDを省略するか 0を指定すると、最上位階層に追加される。
Optionsには後述のオプションを半角スペースかTab文字区切りで指定する。
また、TV_Add()専用のオプションとして、挿入位置を指定する以下のオプションがある。
First 親項目の一番最初の子項目になる。
Sort テキストの文字コード順でソートされるような位置に挿入される。
項目はあらかじめソートされている必要がある。(TV_Add()の際に毎回Sortオプションを指定すればよい)
(数値) 項目のIDを指定する。
この項目の次に挿入される。
TV_Modify(ItemID [, Options, NewName]) ItemIDで指定した項目の状態を変更する。
Optionsに変更するオプションを、NewNameに新しいテキストを指定する。
OptionsとNewNameが省略された場合は、Optionsに Selectが設定されたのと同じになる。
成功するとItemIDと同じ値が、失敗すると 0が返される。
TV_Delete([ItemID]) ItemIDで指定した項目を削除する。
ItemIDが指定されなかった場合は、全ての項目を削除する。
成功すると 1が、失敗すると 0が返される。

項目操作で使用されるオプション[編集]

Bold テキストを太字で表示する。
-Bold テキストを太字で表示するオプションを解除する。
Check
Check1
チェックボックスのチェックをONにする。
-Check
Check0
チェックボックスのチェックをOFFにする。
Expand
Expand1
項目が親項目の場合、階層を展開し直下の項目を表示する。
項目が子項目を持たない場合、TV_Modify()は失敗とみなされる。
TV_Add()でこのオプションが指定された場合、展開の状態が記憶され、後で子項目が追加されたときに展開される。
項目が展開されても、親項目の展開の有無には影響しない。
-Expand
Expand0
項目が展開されている場合、折りたたむ。
IconN 表示するアイコンを設定する。
ImageListオプションでイメージリストを割り当ててある必要がある。
N には IL_Add関数が返したアイコン番号を指定する。(例 Icon%I%)
Select 項目を選択状態にする。
以前に選択さて板項目の選択状態は失われる。
項目の親項目は強制的に展開される。
Sort 子項目をテキストの文字コード順でソートする。
Vis その項目が表示されるようにスクロールする。
親項目が展開されていない場合は展開する。
VisFirst Visと同じだが、項目がコントロールの一番上に現われるようにスクロールされる。

情報取得[編集]

TV_GetSelection() 選択されている項目のIDを返す。
TV_GetCount() 項目の総数を返す。
TV_GetParent(ItemID) ItemIDで指定した項目の親項目のIDを返す。
TV_GetChild(ItemID) ItemIDで指定した項目の一番最初の子項目のIDを返す。子項目が存在しない場合は 0を返す。
TV_GetPrev(ItemID) ItemIDで指定した項目の一つ上の項目を返す。項目が同じ階層中で一番最初の項目だった場合は 0を返す。
TV_GetNext([ItemID, "Checked | Full"]) ItemIDで指定した項目の下の項目のIDを返す。
ItemIDを 0にするか全ての引数を省略すると、一番最初の項目のIDが返される。
第2引数に "Full"または "F"を指定すると、階層関係にかかわらずに次の項目が返される(一番最後だった場合は 0が返される。
第2引数に "Checked"または "C"を指定すると、階層関係に関わらずに次のチェックがONになっている項目が返される。(無ければ 0が返される)
第2引数を省略した場合は、単に次の項目が返されるが、同じ改装中で一番最後の項目だった場合は 0が返される。
TV_GetText(OutputVar, ItemID): ItemIDで指定した項目のテキストをOutputVarに格納する。
文字数が8191バイトを超えた場合、超過部分は切り捨てられる。
成功するとItemIDが、失敗すると 0が返される。
TV_Get(ItemID, "Expand | Check | Bold") ItemIDで指定した項目の状態を取得する。
第2引数に "Expand"または "E"を指定すると展開の有無が、 "Check"または "C"を指定するとチェックボックスのチェックの有無が、 "Bold"または "B"を指定すると文字が太字になっているかどうかが返される。
それぞれ、展開されている、チェックがONになっている、太字になっている場合は、ItemIDが返される。双でない場合は、0が返される。

イベント[編集]

Gオプションでラベル名を指定していると、下記のイベントが発生するたびにサブルーチンが実行される。
このとき、A_GuiEvent変数にイベント名が格納される。
Eeなど大文字と小文字と小文字の違うイベント名は別物である。 なお、イベントは今後も追加される可能性がある。

DoubleClick 項目がダブルクリックされたときに実行される。
A_EventInfo変数にはダブルクリックされた項目のIDが格納される。
D 項目をマウスの左ボタンでドラッグしようとしたときに実行される。
A_EventInfo変数にはドラッグしようとした項目のIDが格納される。
今のところ、ドラッグ&ドロップに関する機能は用意されていないが、ウィンドウメッセージなどを使って自前で実装することは可能である。
d 項目をマウスの右ボタンでドラッグしようとしたときに実行される。
e 項目のテキストの編集を完了したときに実行される。
A_EventInfo変数には編集された項目のIDが格納される。
S 項目の選択状態が終了したときに実行される。
A_EventInfo変数には新たに選択された項目のIDが格納される。

拡張イベント[編集]

AltSubmitオプションを指定すると、上記のイベントに加え、下記のイベント時にもサブルーチンが呼び出される。

Normal アイテムが左シングルクリックされたときに実行される。
A_EventInfo変数にはクリックされた項目のIDが格納される。
RightClick 項目が右クリックされたときに実行される。
A_EventInfo変数にはフォーカスのある項目の項目番号が格納される。
Appsキーなどの代替コンテキストメニュー呼び出し操作では実行されない。
E -ReadOnlyで1列目のテキストを編集可能にしてあるとき、テキストを編集し始めたときに実行される。
A_EventInfo変数には編集される行の番号が格納される。
F フォーカスを受け取ったときに実行される。
f フォーカスを失ったときに実行される。
K フォーカスがあるときにキーボードのキーが押された。
A_EventInfo変数には、押されたキーの仮想キーコードが格納される。
キーを押しっぱなしにすると、キーリピートが働きイベントが繰り返し発生する。
+ 項目が展開された。
A_EventInfo変数には展開された項目のIDが格納される。
- 項目が折りたたまれた。
A_EventInfo変数には折りたたまれた項目のIDが格納される。

Remarks[編集]

内部に格納されているテキストの長さに関わらず、最初の260文字までしか表示されない。

保持できる項目の最大数は65536である。

ツリービューコントロールはEnterキーが押されたことを知ることができない。
Enterキーが押されたときに特定の動作をさせたいときは、下記の例のようにウィンドウにデフォルトボタンを設定する。
デフォルトボタンは非表示にすることも可能である。

Gui,Add,TreeView,gTVEvent
Gui,Add,Button,gOnEnter Hidden Default
;その他の初期化動作
Return
OnEnter:
  GuiControlGet, FocusedControl, Focus
  If FocusedControl = SysTreeView321
    Selected(TV_GetSelection())
Return
LVEvent:
  If A_GuiEvent = DoubleClick
    Selected(A_EventInfo)
Return
Selected(item)
{
  ;項目決定時の動作
}

Related[編集]

ListView, GUI, GuiContextMenu, GuiControl, GuiControlGet, ウィンドウスタイル

Example(s)[編集]

; The following is a working script that is more elaborate than the one near the top of this page.
; It creates and displays a TreeView containing all folders the all-users Start Menu.  When the
; user selects a folder, its contents are shown in a ListView to the right (like Windows Explorer).
; In addition, a StatusBar control shows information about the currently selected folder.
; The following folder will be the root folder for the TreeView. Note that loading might take a long
; time if an entire drive such as C:\ is specified:
TreeRoot = %A_StartMenuCommon%
TreeViewWidth := 280
ListViewWidth := A_ScreenWidth - TreeViewWidth - 30
; Allow the user to maximize or drag-resize the window:
Gui +Resize
; Create an ImageList and put some standard system icons into it:
ImageListID := IL_Create(10)
Loop 10			; Below omits the DLL's path so that it works on Windows 9x too:
  IL_Add(ImageListID, "shell32.dll", A_Index)
; Create a TreeView and a ListView side-by-side to behave like Windows Explorer:
Gui, Add, TreeView, vMyTree r20 w%TreeViewWidth% gMyTree ImageList%ImageListID%
Gui, Add, ListView, vMyList r20 w%ListViewWidth% x+10, Name|Modified
; Set the ListView's column widths (this is optional):
Col2Width = 70		; Narrow to reveal only the YYYYMMDD part.
LV_ModifyCol(1, ListViewWidth - Col2Width - 30)	; Allows room for vertical scrollbar.
LV_ModifyCol(2, Col2Width)
; Create a Status Bar to give info about the number of files and their total size:
Gui, Add, StatusBar
SB_SetParts(60, 90)	; Create three parts in the bar (the third part fills all the remaining width).
; Add folders and their subfolders to the tree. Display the status in case loading takes a long time:
SplashTextOn, 200, 25, TreeView and StatusBar Example, Loading the tree...
AddSubFoldersToTree(TreeRoot)
SplashTextOff
; Display the window and return. The OS will notify the script whenever the user performs an eligible action:
Gui, Show,, %TreeRoot%
Return
AddSubFoldersToTree(Folder, ParentItemID = 0)
{
  ; This function adds to the TreeView all subfolders in the specified folder.
  ; It also calls itself recursively to gather nested folders to any depth.
  Loop %Folder%\*.*, 2	; Retrieve all of Folder's sub-folders.
    AddSubFoldersToTree(A_LoopFileFullPath, TV_Add(A_LoopFileName, ParentItemID, "Icon4"))
}
MyTree:
If A_GuiEvent <> S	; i.e. an event other than "select new tree item".
  Return		; Do nothing.
; Otherwise, populate the ListView with the contents of the selected folder:
; First determine the full path of the selected folder:
TV_GetText(SelectedItemText, A_EventInfo)
ParentID := A_EventInfo
Loop			; Build the full path to the selected folder.
{
  ParentID := TV_GetParent(ParentID)	; Parent itself can be a parent of another child.
  If not ParentID	; No more ancestors.
    Break
  TV_GetText(ParentText, ParentID)
  SelectedItemText = %ParentText%\%SelectedItemText%
}
SelectedFullPath = %TreeRoot%\%SelectedItemText%
; Put the files and folders into the ListView:
LV_Delete()		; Clear all rows.
GuiControl, -Redraw, MyListView	; Improve performance by disabling redrawing during load.
FileCount = 0		; Init prior to loop below.
TotalSize = 0
Loop %SelectedFullPath%\*.*	; For simplicity, this omits folders so that only files are shown in the ListView.
{
  LV_Add("", A_LoopFileName, A_LoopFileTimeModified)
  FileCount += 1
  TotalSize += A_LoopFileSize
}
GuiControl, +Redraw, MyListView
; Update the three parts of the status bar to show info about the currently selected folder:
SetFormat, float, 0.2	; Show total file size with only 2 decimal places vs. 6.
SB_SetText(FileCount . " files", 1)
SB_SetText((TotalSize / 1024) . " KB", 2)
SB_SetText(SelectedFullPath, 3)
Return
GuiSize:		; Expand/shrink the ListView and TreeView in response to user's resizing of window.
If A_EventInfo = 1	; The window has been minimized.  No action needed.
  Return
; Otherwise, the window has been resized or maximized. Resize the controls to match.
GuiControl, Move, MyTree, % "H" . (A_GuiHeight - 30)	; -30 for StatusBar and margins.
GuiControl, Move, MyList, % "H" . (A_GuiHeight - 30) . " W" . (A_GuiWidth - TreeViewWidth - 30)
Return
GuiClose:		; Exit the script when the user closes the TreeView's GUI window.
ExitApp