AutoHotKey(오토핫키) 설명서 Gui,Add,TreeView

Posted by 발전소장
2014. 8. 14. 01:02 AutoHotKey/Commands

Gui,Add,TreeView

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
아이콘에 사용하는 화상을 격납한 이미지 리스트를 설정한다.
이미지 리스트는이미지 리스트 조작 함수그리고 작성·조작할 수 있다.
H에IL_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변수에 이벤트명이 격납된다.
「E」와「e」 등 대문자와 소문자와 소문자가 다른 이벤트명은 별개이다. 덧붙여 이벤트는 향후도 추가될 가능성이 있다.

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키등의 대체 context menu 호출 조작에서는 실행되지 않는다.
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