Tree-View는 계통적 항목들을 부모 아래의 자손들은 한 단계 들여 넣어 보여줍니다. 가장 흔한 예는 익스플로러의 드라이브와 폴더 트리입니다.
A TreeView usually looks like this:
TreeView를 생성하는 구문은 다음과 같습니다:
Gui, Add, TreeView, Options
다음 스크립트는 간단한 계통적 항목들을 생성하고 보여줍니다:
Gui, Add, TreeView P1 := TV_Add("First parent") P1C1 := TV_Add("Parent 1's first child", P1) ; P1을 이 항목의 부모로 지정합니다. P2 := TV_Add("Second parent") P2C1 := TV_Add("Parent 2's first child", P2) P2C2 := TV_Add("Parent 2's second child", P2) P2C2C1 := TV_Add("Child 2's first child", P2C2) Gui, Show ; 창과 그의 TreeView를 보여줍니다. return GuiClose: ; 사용자가 TreeView의 GUI 창을 닫으면 스크립트를 종료합니다. ExitApp
AltSubmit: 스크립트에 정상보다 더 많은 유형의 TreeView 이벤트에 대하여 고지합니다. 다른 말로 하면, g-라벨이 더 자주 기동됩니다. 자세한 것은 TreeView Notifications을 참조하십시오.
Background: 단어 Background 다음에 바로 색 이름 (컬러 차트 참조) 또는 RGB 값을 지정하십시오 (0x 접두사는 선택적입니다). 예제: BackgroundSilver
, BackgroundFFDD99
. 이 옵션이 존재하지 않으면, TreeView는 처음에 기본값이. Gui Color의 마지막 매개변수로 설정된 배경색입니다 (또는 없으면, 시스템의 기본 배경 색입니다). BackgroundDefault
를 지정하면 시스템의 기본 배경색에 적용됩니다 (보통 흰색). 예를 들어, GuiControl, +BackgroundDefault, MyTreeView
를 통하여 TreeView를 기본값으로 복구할 수 있습니다.
Buttons: -Buttons
(마이너스 버튼)을 지정하면 플러스나 마이너스 사인이 자손이 있는 각 항목의 왼쪽에 나타나는 것을 막을 수 있습니다.
C: 텍스트 컬러. 기호 C 다음에 바로 컬러 이름 (컬러 차트 참조) 또는 RGB 값을 지정하십시오 (0x 접두사는 선택적입니다). 예제: cRed
, cFF2211
, c0xFF2211
, cDefault
.
Checked: 각 항목의 왼쪽에 체크박스를 제공합니다. 항목을 추가할 때, 단어 Check를 그의 옵션에 지정하면 박스를 체크한 상태로 시작할 수 있습니다. 사용자는 체크박스크를 클릭하거나 스페이스를 바를 눌러 항목을 체크하거나 해제할 수 있습니다. 어느 항목이 현재 TreeView에 체크되어 있는지 알아 보려면, TV_GetNext() 또는 TV_Get()을 호출하십시오.
HScroll: -HScroll
(마이너스 HScroll)을 지정하면 수평 스크롤을 불능으로 만들 수 있습니다 (게다가, 콘트롤은 수평 바를 보여주지 않습니다).
ImageList: 이 방법으로 아이콘을 TreeView에 추가합니다. 단어 ImageList 다음에 바로 이전에 IL_Create()를 호출해 돌려 받은 ImageListID를 지정하십시오. 이 옵션은 TreeView를 생성할 때에만 효과가 있습니다 (그렇지만, TV_SetImageList()는 이 제한이 없습니다). 다음은 작동하는 예제입니다:
ImageListID := IL_Create(10) ; 최초 가용능력이 10개의 아이콘인 ImageList를 생성합니다. Loop 10 ; ImageList에 표준 시스템 아이콘을 적재합니다. IL_Add(ImageListID, "shell32.dll", A_Index) Gui, Add, TreeView, ImageList%ImageListID% TV_Add("Name of Item", 0, "Icon4") ; 항목을 TreeView에 추가하고 거기에 폴더 아이콘을 부여합니다. Gui Show
Lines: -Lines
(마이너스 Lines)를 지정하면 부모 항목을 자손 항목과 연결하는 줄들을 보여주지 않습니다. 그렇지만, 이 줄을 제거하면 최상위 레벨의 항목에 플러스/마이너스 버튼도 보이지 않게 됩니다.
ReadOnly: -ReadOnly
(마이너스 ReadOnly)를 지정하면 각 항목의 텍스트/이름의 편집을 허용합니다. To edit an item, select it then press F2 (see the WantF2 option below). 다른 방법으로, 항목을 한 번 클릭하여 선택할 수 있습니다. 약 반초 기다린 다음, 같은 항목을 다시 클릭해 편집할 수 있습니다. 편집이 끝난 후, 항목은 다음 예제를 통하여 그의 형제들 사이에 알파벳 순서로 재배치됩니다:
Gui, Add, TreeView, -ReadOnly gMyTree ; For gMyTree, see TreeView's g-label. ; ... MyTree: if (A_GuiEvent == "e") ; 사용자가 항목 편집을 마쳤습니다 (대소문자를 구분해 비교합니다). TV_Modify(TV_GetParent(A_EventInfo), "Sort") ; 이것은 편집 항목에 부모가 없더라도 작동합니다. return
R: 행의 높이 (생성시). 기호 R 다음에 바로 콘트롤 안에 여유를 주기 위해 허용할 행의 개수를 지정하십시오. 예를 들어, R10
이면 콘트롤을 10개의 항목 높이로 만듭니다.
WantF2: -WantF2
(마이너스 WantF2)를 지정하면 F2 키눌림으로 현재 선택된 항목을 편집하지 못하도록 막습니다. 이 설정은 -ReadOnly도 켜져 있지 않는 한 무시됩니다. 이 설정에 상관없이, g-라벨은 여전히 F2 고지를 받습니다.
(이름 없는 번호 스타일): 위의 스타일 말고는 자주 사용되지 않기 때문에, 나머지 스타일은 이름이 없습니다. 리스트는 TreeView 스타일 테이블을 참조하십시오.
모든 TreeView 함수는 현재 쓰레드의 기본 GUI 창에 작동합니다 (기본 구이 창은 Gui, 2:Default
를 통하여 바꿀 수 있습니다). 기본 창이 존재하지 않거나 TreeView 콘트롤이 없다면, 모든 함수는 0을 돌려주어 문제를 나타냅니다.
창에 여러 TreeView 콘트롤이 있다면, 기본값으로 함수들은 가장 최근에 추가된 콘트롤에 작동합니다. 이를 바꾸려면, Gui, TreeView, TreeViewName
를 지정하십시오. 여기에서 TreeViewName는 TreeView의 연관 변수이름이거나, Window Spy로 노출되는 ClassNN이거나, 또는 ([v1.1.04+]에서) 그의 HWND입니다. 일단 바뀌면, 기존의 모든 그리고 미래의 쓰레드는 지시한 TreeView를 사용합니다. [v1.1.23+]: A_DefaultTreeView contains the current setting.
Item functions:
Retrieval functions:
Other functions:
TreeView에 새 항목을 추가하고 그의 유일한 Item ID 번호를 돌려줍니다 (또는 실패시 0을 돌려줍니다).
TV_Add(Name, ParentItemID, Options)
Name은 항목을 보여주는 텍스트이며, 텍스트이거나 숫자일 수 있습니다 (숫치 표현식의 결과도 포함). ParentItemID는 새 항목의 부모 ID 번호입니다 (생략하거나 0을 지정하면 그 항목을 최상위 레벨에 추가합니다). 방대한 개수의 항목을 추가할 때, 수행성능을 개선할 수 있습니다. 항목을 추가하기 전에 GuiControl, -Redraw, MyTreeView
를 사용하고 끝난 후에 GuiControl, +Redraw, MyTreeView
를 사용하면 됩니다.
Options 매개변수는아래 리스트의 단어로 구성되는 문자열입니다 (대소문자 구문 없음). 다음 단어와 스페이스나 탭으로 분리하십시오. 옵션을 제거하려면, 앞에 마이너스 사인을 추가하십시오. 옵션을 추가하려면, 플러스 사인을 허용하지만 필수는 아닙니다.
Bold: 항목의 이름을 볼드체로 보여줍니다. 나중에 해제하려면, TV_Modify(ItemID, "-Bold")
를 사용하십시오. [v1.1.30.01+]: 단어 Bold는 선택적으로 다음에 즉시 0 또는 1이 따라와 시작 상태를 나타낼 수 있습니다.
Check: (TreeView에 체크박스가 있다면) 체크 표식을 항목의 왼쪽에 보여줍니다. 나중에 해제하려면, TV_Modify(ItemID, "-Check")
을 사용하십시오. 단어 Check는 선택적으로 다음에 즉시 0 또는 1이 따라와 시작 상태를 나타낼 수 있습니다. 다른 말로, "Check"
와 "Check" . VarContainingOne
모두 같습니다 (여기에서 점은 결합 연산자입니다).
Expand: 항목을 확대해 (있다면) 그의 자손을 노출시킵니다. 나중에 항목을 축소하려면, TV_Modify(ItemID, "-Expand")
를 사용하십시오. 자손이 없다면, TV_Modify()는 그 항목의 ID 대신에 0을 돌려줍니다. 대조적으로, TV_Add()는 항목에 자손이 나중에 거기에 추가될 경우 확대 표식을 합니다. (아래의) "Select"와 다르게, 항목이 확대되더라도 그의 부모가 자동으로 확대되지는 않습니다. 마지막으로, 단어 Expand 다음에 선택적으로 0 또는 1이 따라와 시작 상태를 나타낼 수 있습니다. 다른 말로, "Expand"
와 "Expand" . VarContainingOne
는 같습니다.
First | Sort | N: 이 옵션들은 TV_Add()에만 적용됩니다. 새 항목의 위치를 그의 형제에 상대적으로 지정합니다 (형제(sibling)란 같은 레벨에 있는 다른 항목들입니다). 이 옵션들 모두 존재하지 않으면, 마지막/막내 형제로 새 항목이 추가됩니다. 그렇지 않으면, First를 추가해 그 항목을 첫째/장남 형제로 추가할 수 있습니다. 또는Sort를 지정하면 그 항목을 그의 형제들 사이에 알파벳 순서로 삽입할 수 있습니다. 평범한 정수가 (N) 지정되면, 그 다음에 새 항목을 추가할 형제의 ID 번호로 간주됩니다 (정수 N이 유일한 옵션이라면, 따옴표로 둘러쌀 필요가 없습니다).
Icon: 단어 Icon 다음에 이 항목의 아이콘 번호를 지정하십시오. 이 아이콘은 항목의 이름 왼쪽에 보여집니다. 이 옵션이 없으면, ImageList에서 첫 번째 아이콘이 사용됩니다. 빈 아이콘을 보여주려면, ImageList의 아이콘의 번호보다 더 큰 번호를 지정하십시오. 콘트롤에 ImageList가 없으면, 아이콘도 보이지 않고 아이콘을 위한 스페이스도 보존되지 않습니다.
Select: 항목을 선택합니다. 한 번에 오직 하나의 항목만 선택할 수 있기 때문에, 이전에 선택된 항목은 자동으로 해제됩니다. 게다가, 이 옵션은 필요하면 그의 부모를 확대해서 새로 선택된 항목을 노출시킵니다. 현재 선택을 알아 내려면, TV_GetSelection()를 호출하십시오.
Sort: TV_Modify()에 대하여, 이 옵션은 알파벳 순서로 지정된 항목의 자손들을 정렬합니다. 대신에 모든 최상위 레벨의 항목들을 정렬하려면, TV_Modify(0, "Sort")
를 사용하십시오. 자손이 없다면, 변경된 항목의 ID 대신에 0을 돌려줍니다.
Vis: TreeView를 스크롤하거나 필요하면 그의 부모를 확대해서 항목이 완전히 보이도록 확인합니다.
VisFirst: 위와 같지만 TreeView도 스크롤되어 가능하면 그 항목이 항상 위에 보이도록 합니다. 이 옵션은 전형적으로 TV_Add() 보다 TV_Modify()와 사용할 때 더 효율적입니다.
항목의 이름과 속성을 변경합니다.
TV_Modify(ItemID , Options, NewName)
성공하면 항목 자신의 ID를 돌려줍니다. 실패시 (또는 부분적 실패시) 0을 돌려줍니다. 첫 매개변수만 있으면, 지정된 항목이 선택됩니다. NewName을 생략하면, 현재 이름을 바꾸지 않고 그대로 둡니다. Options에 관해서는 위의 리스트를 참조하십시오.
Deletes the specified item or all items.
TV_Delete(ItemID)
ItemID을 생략하면, TreeView 안의 모든 항목이 삭제됩니다. 그렇지 않으면, 오직 지정된 ItemID만 삭제됩니다. 성공하면 1 실패하면 0을 돌려줍니다.
선택된 항목의 ID 번호를 돌려줍니다.
TV_GetSelection()
콘트롤에 있는 항목의 총 개수를 돌려줍니다.
TV_GetCount()
이 함수는 언제나 순간적입니다. 왜냐하면 콘트롤의 개수를 추적관리하기 때문입니다.
지정된 항목의 부모를 항목 ID로 돌려줍니다.
TV_GetParent(ItemID)
최상위 레벨의 항목들은 부모가 없으므로 0을 돌려줍니다.
지정된 항목의 첫째/최상위 자손의 ID 번호를 돌려줍니다 (없으면 0을 돌려줍니다).
TV_GetChild(ParentItemID)
지정된 항목 위의 형제의 ID 번호를 돌려줍니다 (없으면 0을 돌려줍니다).
TV_GetPrev(ItemID)
Returns the ID number of the next item below the specified item (or 0 if none).
TV_GetNext(ItemID, ItemType)
다음 모드가 있습니다:
ItemID := 0 ; 회돌이의 첫 번째 반복이 트리의 최상단에서 검색을 시작하도록 만듭니다. Loop { ItemID := TV_GetNext(ItemID, "Full") ; 체크표식된 항목을 모두 찾으려면 "Full"을 "Checked"로 교체하십시오.. if not ItemID ; 트리에 더 이상 항목이 없습니다. break TV_GetText(ItemText, ItemID) MsgBox The next Item is %ItemID%, whose text is "%ItemText%". }
지정된 ItemID의 텍스트/이름을 열람하고 그것을 OutputVar에 저장합니다.
TV_GetText(OutputVar, ItemID)
텍스트가 8191자 보다 길면, 앞쪽 8191 글자만 열람됩니다. 성공하면, 함수는 그 항목의 ID를 돌려줍니다. 실패하면, 0을 돌려줍니다 (그리고 OutputVar도 비워집니다).
Returns the ID number of the specified item if it has the specified attribute.
TV_Get(ItemID, Attribute)
지정된 항목에 지정된 속성이 없으면, 그 자신의 ItemID가 반환됩니다. 그렇지 않으면 0이 반환됩니다. For Attribute, specify "E", "Expand", or "Expanded" to determine if the item is currently expanded (that is, its children are being displayed); specify "C", "Check", or "Checked" to determine if the item has a checkmark; or specify "B" or "Bold" to determine if the item is currently bold in font.
주의: IF-서술문은 0 아닌 값을 참("true")으로 간주하므로, 다음의 두 줄은 기능적으로 동일합니다: if TV_Get(ItemID, "Checked") = ItemID
and if TV_Get(ItemID, "Checked")
.
Sets or replaces an ImageList for displaying icons.
TV_SetImageList(ImageListID , IconType)
ImageListID는 이전에 IL_Create()를 호출해 반환된 번호입니다. IconType is normally omitted, in which case it defaults to 0. 그렇지 않으면, 2를 상태 아이콘에 지정하십시오 (아직 직접적으로 지원하지는 않지만, SendMessage를 통하여 사용할 수 있습니다). 성공하면, TV_SetImageList()는 이전에 TreeView에 연관되어 있는 ImageListID를 돌려줍니다 (연관된게 없으면 0을 돌려줍니다). 그렇게 떼어낸 ImageList는 IL_Destroy(ImageListID)를 통하여 정상적으로 파괴됩니다.
gMySubroutine
과 같은 g-label은 콘트롤의 옵션에 나열할 수 있습니다. 이렇게 하면 사용자가 콘트롤에 어떤 조치를 수행할 때마다 MySubroutine 라벨이 자동으로 기동됩니다. 이 서브루틴은 내장 함수 A_Gui 그리고 A_GuiControl 을 참고해 어느 창과 어느 TreeView가 이벤트를 발생시켰는지 알아냅니다. 더 중요한 것은, A_GuiEvent를 참고할 수 있다는 것인데, 여기에 다음 문자열이나 기호 중 하나가 담겨 있습니다 (미래 버전과의 호환을 위해, 스크립트는 이것만이 가능한 유일한 값들이라고 간주하면 안됩니다):
DoubleClick: 사용자가 항목을 더블클릭했습니다. 변수 A_EventInfo에 그 항목의 ID가 담깁니다.
D: 사용자가 항목을 끌려고 시도했습니다 (현재 이를 내부적으로 지원하지 않습니다). 변수 A_EventInfo에 그 항목의 ID가 담깁니다.
d (소문자 D): 왼클릭 끌기가 아니라 우클릭 끌기라는 점만 제외하면 위와 같습니다.
e (소문자 E): 사용자가 항목 편집을 끝마쳤습니다 (사용자는 TreeView 옵션에 -ReadOnly
일 경우에만 항목을 편집할 수 있습니다). 변수 A_EventInfo에 그 항목의 ID가 담깁니다.
S: 사용자 또는 스크립트 자체에서 새 항목을 선택했습니다. 변수 A_EventInfo에 새로 선택된 그 항목의 ID가 담깁니다.
TreeView의 옵션에 단어 AltSubmit이 있다면, 그의g-라벨은 더 자주 기동되고 A_GuiEvent에는 다음의 값이 추가로 담길 수 있습니다:
Normal: 사용자가 항목을 왼클릭 했습니다. 변수 A_EventInfo에 그 항목의 ID가 담깁니다.
RightClick: 사용자가 항목을 우클릭했습니다. 변수 A_EventInfo에 그 항목의 ID가 담깁니다. 대부분의 경우, 이에 응답하여 메뉴를 보여주는 것이 좋습니다. 대신에, GuiContextMenu label를 사용하십시오. 왜냐하면 Apps 키도 인지하기 때문입니다. 예를 들어:
GuiContextMenu: ; 우클릭 또는 Apps 키의 누름에 응답하여 기동됩니다. if (A_GuiControl != "MyTreeView") ; 이 점검은 선택적입니다. TreeView 안에 클릭할 때만 메뉴를 보여줍니다. return ; 메뉴를 주어진 A_GuiX 그리고 A_GuiY 좌표에 보여줍니다. 이것을 사용해야 합니다 ; 왜냐하면 사용자가 Apps 키를 누르더라도 올바른 좌표를 제공하기 때문입니다: Menu, MyContextMenu, Show, %A_GuiX%, %A_GuiY% return
E: 사용자가 항목 편집을 시작했습니다 (사용자는 TreeView 옵션에 -ReadOnly이 있을 경우에만 항목을 편집할 수 있습니다). 변수 A_EventInfo에 그 항목의 ID가 담깁니다.
F: TreeView가 키보드 초점을 받았습니다.
f (소문자 F): TreeView 가 키보드 초점을 잃어버렸습니다.
K: TreeView가 초점이 있는 동안 사용자가 키를 눌렀습니다. A_EventInfo에 그 키의 가상 키코드가 담깁니다. 이 숫자는 범위가 1과 255 사이입니다. 키가 알파벳이면, 대부분의 키보드 레이아웃에서 Chr(A_EventInfo)
를 통하여 상응하는 문자로 변환할 수 있습니다. F2 is received regardless of WantF2. 그렇지만, Enter 키눌림은 받지 않습니다; 그를 받으려면, 아래에 기술하는 것처럼 기본 버튼을 사용하십시오.
+ (플러스 사인): 항목이 확대되어 그의 자손을 보여줍니다. 변수 A_EventInfo에 그 항목의 ID가 담깁니다.
- (마이너스 사인): 항목이 축소되어 그의 자손을 감춥니다. 변수 A_EventInfo에 그 항목의 ID가 담깁니다.
Gui Submit 명령어는 TreeView 콘트롤에 아무 효과가 없습니다. 그러므로, 스크립트는 (있다면) TreeView의 연관 변수를 사용해 기타 데이터를 저장할 수 있습니다. 덮어쓸까봐 걱정할 필요가 없습니다.
TreeView에 초점이 있는 동안 사용자가 Enter를 눌렀는지 탐지하려면, 기본 버튼을 사용하십시오 (원하면 감출 수 있습니다). 예를 들어:
Gui, Add, Button, Hidden Default, OK ... ButtonOK: GuiControlGet, FocusedControl, FocusV if (FocusedControl != "MyTreeView") return MsgBox % "Enter was pressed. The selected item ID is " . TV_GetSelection() return
키보드로 한 항목에서 다른 항목으로 항해하는 것 말고도, 사용자는 한 항목의 이름의 첫 문자를 타자하여 점진 검색을 수행할 수도 있습니다. 이렇게 하면 선택이 부합하는 가장 가까운 항목으로 점프합니다.
길이에 상관없이 텍스트를 TreeView의 각 항목에 저장할 수 있지만, 오직 앞쪽 260 글자만 보여줍니다.
이론적으로 TreeView에서 항목의 개수는 최대 65536이지만, 항목을 추가할 수록 얼마 가지 않아 수행성능이 눈에 띄게 줄어듭니다. TV_Add()에 기술된 다시 그리기 팁을 사용하면 이를 약간 줄일 수 있습니다.
ListViews와 다르게, TreeView의 ImageList는 TreeView가 파괴될 때 자동으로 파괴되지 않습니다. 그러므로, 스크립트는 TreeView의 창을 파괴하고 나면 반드시 IL_Destroy(ImageListID)를 호출해야 합니다. ImageList를 다른 곳에 사용할 생각이 없다면 말입니다. 그렇지만, 스크립트가 곧 끝날 경우라면 불필요합니다. 왜냐하면 그 때 모든 ImageLists도 자동으로 파괴되기 때문입니다.
스크립트는 창 당 하나 이상의 TreeView를 생성할 수 있습니다. 기본 말고 다른 TreeView를 처리하려면, 내장 함수를 참조하십시오.
TreeView의 글꼴을 바꾸거나 크기를 바꾸거나 숨기려면 GuiControl을 사용하십시오.
트리뷰 확장(Tree View eXtension (TVX))으로 TreeViews를 이동하고 삽입하고 제거할 수 있습니다. 다음 데모를 참조하십시오: www.autohotkey.com/forum/topic19021.html
ListView, Other Control Types, Gui, GuiContextMenu, GuiControl, GuiControlGet, TreeView 스타일 테이블
다음 스크립트는 이 페이지 위에 있는 예제에 비해 더 정교합니다. 모든-사용자 시작 메뉴의 모든 폴더를 담은 TreeView를 생성하고 부여줍니다. 사용자가 폴더를 선택하면, 그의 내용이 ListView 오른쪽에 나타납니다 (윈도우즈의 탐색기처럼). 게다가, StatusBar 콘트롤에 현재 선택된 폴더에 관한 정보를 보여줍니다.
; 다음 폴더는 TreeView에 대하여 루트 폴더가 됩니다. ; C:\와 같이 전체 드라이브를 지정하면 약간 적재 시간이 걸립니다: TreeRoot := A_StartMenuCommon TreeViewWidth := 280 ListViewWidth := A_ScreenWidth - TreeViewWidth - 30 ; 사용자에게 창을 끌어 크기를 변경하도록 허용합니다: Gui +Resize ; ImageList를 만들고 거기에 표준 시스템 아이콘을 배정합니다: ImageListID := IL_Create(5) Loop 5 IL_Add(ImageListID, "shell32.dll", A_Index) ; TreeView와 ListView를 나란히 만들어 마치 윈도우즈의 탐색기처럼 행위합니다: Gui, Add, TreeView, vMyTreeView r20 w%TreeViewWidth% gMyTreeView ImageList%ImageListID% Gui, Add, ListView, vMyListView r20 w%ListViewWidth% x+10, Name|Modified ; ListView의 컬럼 너비를 설정합니다 (이것은 선택적입니다): Col2Width := 70 ; 오직 YYYYMMDD 부분만 보이도록 너비를 줄입니다. LV_ModifyCol(1, ListViewWidth - Col2Width - 30) ; 수직 스크롤바를 위해 공간을 허용합니다. LV_ModifyCol(2, Col2Width) ; 파일의 개수와 그의 총 크기에 관한 정보를 보여줄 상태 바를 생성합니다: Gui, Add, StatusBar SB_SetParts(60, 85) ; 바를 세 부분으로 생성합니다 (세 번째 부분에 나머지 너비를 모두 채웁니다). ; 폴더와 그의 부폴더덜을 트리에 추가합니다. 적재 시간이 걸릴 경우는 현재 상태를 보여줍니다: SplashTextOn, 200, 25, TreeView and StatusBar Example, Loading the tree... AddSubFoldersToTree(TreeRoot) SplashTextOff ; 창을 보여주고 돌아갑니다. OS는 스크립트에게 사용자가 적절한 행위를 수행할 때마다 고지합니다: Gui, Show,, %TreeRoot% ; 제목 바에 소스 디렉토리를 보여줍니다 (TreeRoot). return AddSubFoldersToTree(Folder, ParentItemID = 0) { ; 이 함수는 지정된 폴더의 모든 부폴더를 TreeView에 추가합니다.. ; 또한 깊이에 상관없이 자기 자신을 재귀해 내포된 폴더들을 수집합니다. Loop %Folder%\*.*, 2 ; 모든 폴더의 부폴더들을 열람합니다. AddSubFoldersToTree(A_LoopFileFullPath, TV_Add(A_LoopFileName, ParentItemID, "Icon4")) } MyTreeView: ; 이 서브루틴은 사용자 행위를 처리합니다 (예를 들어 클릭). if (A_GuiEvent != "S") ; 즉, "새로운 트리 항목 선택"이 아닌 이벤트. return ; 아무것도 하지 않습니다. ; 그렇지 않으면, ListView 내용을 선택된 폴더로 채웁니다. ; 먼처 선택된 폴더의 완전한 경로를 알아냅니다: TV_GetText(SelectedItemText, A_EventInfo) ParentID := A_EventInfo Loop ; 선택된 폴더에 대한 전체 경로를 구성합니다. { ParentID := TV_GetParent(ParentID) if not ParentID ; 더 이상 조상 없음. break TV_GetText(ParentText, ParentID) SelectedItemText := ParentText "\" SelectedItemText } SelectedFullPath := TreeRoot "\" SelectedItemText ; 파일들을 ListView 안에 삽입합니다: LV_Delete() ; 모든 행들을 지웁니다. GuiControl, -Redraw, MyListView ; 적재하는 동안 다시 그리기를 꺼서 수행성능을 향상시킵니다. FileCount := 0 ; 아래 회돌이를 시작하기 전에 초기화합니다. TotalSize := 0 Loop %SelectedFullPath%\*.* ; 간단하게 처리하기 위해, 폴더를 생략하고 ListView에 있는 파일들만 보입니다. { LV_Add("", A_LoopFileName, A_LoopFileTimeModified) FileCount += 1 TotalSize += A_LoopFileSize } GuiControl, +Redraw, MyListView ; 상태 바의 세 부분을 업데이트해 현재 선택된 폴더에 관한 정보를 보여줍니다: SB_SetText(FileCount . " files", 1) SB_SetText(Round(TotalSize / 1024, 1) . " KB", 2) SB_SetText(SelectedFullPath, 3) return GuiSize: ; 사용자의 창 크기 변경에 응답하여 ListView와 TreeView 크기를 조절합니다. if (A_EventInfo = 1) ; 창은 최소화되어 있습니다. 아무 필요도 없습니다. return ; 그렇지 않으면, 창은 크기가 변경되거나 최대화되었습니다. 부합하는 콘트롤들의 크기를 조절합니다. GuiControl, Move, MyTreeView, % "H" . (A_GuiHeight - 30) ; StatusBar와 여백에 -30을 지정합니다. GuiControl, Move, MyListView, % "H" . (A_GuiHeight - 30) . " W" . (A_GuiWidth - TreeViewWidth - 30) return GuiClose: ; 사용자가 TreeView의 GUI 창을 닫으면 스크립트를 종료합니다. ExitApp