#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <TreeViewConstants.au3>

Opt('GUIResizeMode', 802) ; по умолчанию не изменять размеры и позицию элементов
$hGui = GUICreate("Демонстрация GUICtrlCreateTreeView", 640, 410, -1, -1, $WS_OVERLAPPEDWINDOW) ; стиль изменения размера окна

$treeview = GUICtrlCreateTreeView(5, 35, 200, 370, BitOR($TVS_TRACKSELECT, $TVS_SINGLEEXPAND, $TVS_FULLROWSELECT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
GUICtrlSetResizing(-1, 2 + 32 + 64 + 256)
$tree1 = GUICtrlCreateTreeViewItem("Тексты", $treeview)
GUICtrlSetColor(-1, 0x0000C0)
$item1 = GUICtrlCreateTreeViewItem("текст1", $tree1)
$item2 = GUICtrlCreateTreeViewItem("текст2", $tree1)
$item3 = GUICtrlCreateTreeViewItem("текст3", $tree1)

$tree2 = GUICtrlCreateTreeViewItem("Справочники", $treeview)
GUICtrlSetColor(-1, 0x0000C0)
$item4 = GUICtrlCreateTreeViewItem("справочник1", $tree2)
$item5 = GUICtrlCreateTreeViewItem("справочник2", $tree2)
$item6 = GUICtrlCreateTreeViewItem("Подробности", $item4)
$item7 = GUICtrlCreateTreeViewItem("Описание", $item4)

$Edit = GUICtrlCreateEdit("Демонстрация работы GUICtrlCreateTreeView", 210, 35, 425, 370, 0x1000 + 0x0004)
GUICtrlSetResizing(-1, 2 + 4 + 32 + 64)
$Text1 = 'TreeView может иметь разные стили оформления. Например: ' & @CRLF & '$TVS_FULLROWSELECT - выделяется вся строка пункта' & @CRLF & '$TVS_SINGLEEXPAND - развёрнут только один раздел' & @CRLF & '$TVS_TRACKSELECT - подчёркивать при наведении' & @CRLF & '$TVS_SHOWSELALWAYS - выделен при потере фокуса' & @CRLF & '$TVS_CHECKBOXES - пункты с галочками'
$Text2 = "Имя:" & @TAB & @ComputerName & @CRLF & "OS:" & @TAB & @OSVersion & @CRLF & "SP:" & @TAB & @OSServicePack
$Text3 = "Текущая дата " & @YEAR & "." & @MON & "." & @MDAY & "_" & @HOUR & "." & @MIN & "." & @SEC

$togglebutton = GUICtrlCreateButton("Ж", 5, 5, 25, 25)
$infobutton = GUICtrlCreateButton("?", 35, 5, 25, 25)
$statebutton = GUICtrlCreateButton("-/+", 65, 5, 25, 25)

GUISetState()
While 1
	$msg = GUIGetMsg()
	Switch $msg

		Case $item1
			GUICtrlSetData($Edit, $Text1)

		Case $item2
			GUICtrlSetData($Edit, $Text2)

		Case $item3
			GUICtrlSetData($Edit, $Text3)

		Case $item5
			GUICtrlSetData($Edit, 'Раздел в разработке')

		Case $item6
			GUICtrlSetData($Edit, 'Обычная вставка текста в элемент Edit')

		Case $item7
			GUICtrlSetData($Edit, 'Такой вариант может использоваться в виде записной книжки')

		Case $togglebutton ; Переключить отрисовку жирного шрифта
			If BitAND(GUICtrlRead($tree1), $GUI_DEFBUTTON) Then
				GUICtrlSetState($tree1, 0)
				GUICtrlSetState($tree2, 0)
			Else
				GUICtrlSetState($tree1, $GUI_DEFBUTTON)
				GUICtrlSetState($tree2, $GUI_DEFBUTTON)
			EndIf

		Case $infobutton
			$item = GUICtrlRead($treeview) ; Получить идентификатор (ID) текущего выделенного пункта treeview
			If $item = 0 Then
				MsgBox(64, "Сообщение", "Нет выделенных", 0, $hGui)
			Else
				$text = GUICtrlRead($item, 1) ; Получить текст пункта treeview
				If $text == "" Then
					MsgBox(16, "Ошибка", "Ошибка при поиске инфо о пункте", 0, $hGui)
				Else
					MsgBox(64, "Сообщение", "Выделен пункт: " & $text, 0, $hGui) ; $advmsg[0] содержит текст и $advmsg[1] значение состояния пункта treeview
				EndIf
			EndIf

		Case $item4
			GUICtrlSetState($item4, $GUI_EXPAND)

		Case $tree1
			GUICtrlSetState($tree1, $GUI_EXPAND)

		Case $tree2
			GUICtrlSetState($tree2, $GUI_EXPAND)

		Case $statebutton
			$item = GUICtrlRead($treeview)
			If $item > 0 Then
				$hItem = GUICtrlGetHandle($item)
				GUICtrlSendMsg($treeview, $TVM_EXPAND, $TVE_TOGGLE, $hItem)
			EndIf

		Case -3
			Exit
	EndSwitch
WEnd