MyTetra Share
Делитесь знаниями!
Пример TreeView дерево файлов
Время создания: 14.06.2017 11:29
Текстовые метки: read
Раздел: AutoHotkey - gui - TreeView
Запись: xintrea/mytetra_db_mcold/master/base/1497428989s84bw6jfzs/text.html на raw.githubusercontent.com

;Opens a file explorer containing files in a_scriptdir


;Using just me's code:

;http://ahkscript.org/boards/viewtopic.php?f=5&t=2777


#SingleInstance force


; Set the root folder for the TreeView. Loading may take a long time if an entire drive such as C:\ is specified:

TreeRoot = %A_ScriptDir%

TreeViewWidth := 280

ListViewWidth := A_ScreenWidth - TreeViewWidth - 450


Gui +Resize


; Create an ImageList and put some standard system icons into it:

ImageListID := IL_Create(5)

Loop 5

IL_Add(ImageListID, "shell32.dll", A_Index)


; Create a TreeView and a ListView side-by-side :

Gui, Add, TreeView, vMyTreeView r20 w%TreeViewWidth% gMyTreeView ImageList%ImageListID%

Gui, Add, ListView, vMyListView r20 w%ListViewWidth% x+10 gMyListView AltSubmit, Name|Modified


; Set the ListView's column widths:

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:

Gui, Add, StatusBar

SB_SetParts(60, 85) ; Create three parts in the bar (the third part fills the remaining width).


; Add folders and their subfolders to the tree. Display the status in case loading takes a long time:

SplashTextOn, 200, 25, Please wait, Loading the tree...

TreeRoot := RTrim(TreeRoot, "\") ; Remove trailing backslashes, if any.

SplitPath, TreeRoot, TreeRootName, TreeRootDir ; Split TreeRoot into TreeRootName and TreeRootDir.

If (TreeRootName) ; If TreeRootName is not empty

TreeRootID := TV_Add(TreeRootName, 0, "Expand Icon4") ; add it to the TreeView

Else ; Else

TreeRootID := 0 ; set TreeRootId to zero.

AddSubFoldersToTree(TreeRoot, TreeRootID) ; Call AddSubFolders() passing TreeRoot and TreeRootID

TreeRoot := TreeRootDir ; Set TreeRoot to TreeRootDir.

SplashTextOff


Gui, Show, h550, %TreeRoot%

return


; This function adds to the TreeView all subfolders in the specified folder.

AddSubFoldersToTree(Folder, ParentItemID = 0)

{

; 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"))

}


;--------------------------------------------------------------------------------------------------

; What to do when a folder is clicked in treeview

MyTreeView:

if A_GuiEvent <> S ; if 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)

if not ParentID ; No more ancestors.

break

TV_GetText(ParentText, ParentID)

SelectedItemText = %ParentText%\%SelectedItemText%

}

SelectedFullPath = %TreeRoot%\%SelectedItemText%

;--------------------------------------------------------------------------------------------------


; Put the files into the ListView:

LV_Delete() ; Clear all rows.

GuiControl, -Redraw, MyListView ; Improve performance by disabling redrawing during load.

FileCount = 0

TotalSize = 0

Loop %SelectedFullPath%\*.* ; For simplicity, this omits folders so that only files are shown in the ListView.

{

;LV_Add("", A_LoopFileName, A_LoopFileTimeModified)

LV_Add("", A_LoopFileName, A_LoopFileSize . " KB")

FileCount += 1

TotalSize += A_LoopFileSize

}

GuiControl, +Redraw, MyListView


; Populate status bar to show info about the currently selected folder:

SB_SetText(FileCount . " files", 1)

SB_SetText(Round(TotalSize / 1024, 1) . " KB", 2)

SB_SetText(SelectedFullPath, 3)

return


;--------------------------------------------------------------------------------------------------

; What to do when a file is double/right-clicked in listview

MyListView:

if (A_GuiEvent = "DoubleClick")

{

LV_GetText(RowText, A_EventInfo) ; Get the text from the row's first field and store it in the var RowText.

run %SelectedFullPath%\%RowText%

;exitapp ;exit the script after selection is made

}

else if (A_GuiEvent = "RightClick")

{

LV_GetText(RowText, A_EventInfo) ; Get the text from the row's first field and store it in the var RowText.

run C:\PortableApps\Notepad++\notepad++.exe "%SelectedFullPath%\%RowText%"

;exitapp ;exit the script after selection is made

}

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, MyTreeView, % "H" . (A_GuiHeight - 30) ; -30 for StatusBar and margins.

GuiControl, Move, MyListView, % "H" . (A_GuiHeight - 30) . " W" . (A_GuiWidth - TreeViewWidth - 30)

return


GuiClose: ; Exit the script when the user closes the TreeView's GUI window.

ExitApp

Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования