Что нового

[Элементы GUI] Выделение подпунктов в TreeView

Dellroc

Осваивающий
Сообщения
151
Репутация
31
Доброго времени уважаемые знатоки.
Требуется помощь в таком вопросе: как выделить автоматически подпункты в TreeView, если выделить главный пункт.
Картинка для наглядности.
F8K2fsHS.jpg

Тоесть, если выделяю пункт 1, то автоматически выделяются подпункты 2 и 1.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <TreeViewConstants.au3>

Global $iTotal_Items = 10
Global $TVItemsID_Array[$iTotal_Items + 1]

GUICreate("TreeView Check All", 460, 300)

$TreeView = GUICtrlCreateTreeView(20, 20, 420, 260, _
	BitOR($GUI_SS_DEFAULT_TREEVIEW, $TVS_CHECKBOXES), $WS_EX_DLGMODALFRAME + $WS_EX_CLIENTEDGE)

$SelAll_TVItem = GUICtrlCreateTreeViewItem("Select all", $TreeView)
GUICtrlSetColor($SelAll_TVItem, 0xC0C0C0)

For $i = 1 To $iTotal_Items
	$TVItemsID_Array[$i] = GUICtrlCreateTreeViewItem("Item " & $i, $SelAll_TVItem)
Next

GUICtrlSetState($SelAll_TVItem, $GUI_EXPAND)

GUISetState()

While 1
	$nMsg = GUIGetMsg()
	
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $SelAll_TVItem
			Local $State = $GUI_UNCHECKED
			
			If BitAND(GUICtrlRead($SelAll_TVItem), $GUI_CHECKED) Then
				$State = $GUI_CHECKED
				GUICtrlSetColor($SelAll_TVItem, 0x0)
				GUICtrlSetState($SelAll_TVItem, $GUI_DEFBUTTON + $GUI_CHECKED)
			Else
				GUICtrlSetColor($SelAll_TVItem, 0xC0C0C0)
				GUICtrlSetState($SelAll_TVItem, $GUI_UNCHECKED)
			EndIf

			For $a = 1 To UBound($TVItemsID_Array) - 1
				GUICtrlSetState($TVItemsID_Array[$a], $State)
			Next
		Case $TVItemsID_Array[1] To $TVItemsID_Array[$iTotal_Items]
			If AllIsUnChecked() Then
				GUICtrlSetColor($SelAll_TVItem, 0xC0C0C0)
				GUICtrlSetState($SelAll_TVItem, $GUI_UNCHECKED)
			ElseIf AllIsChecked() Then
				GUICtrlSetColor($SelAll_TVItem, 0x0)
				GUICtrlSetState($SelAll_TVItem, $GUI_DEFBUTTON + $GUI_CHECKED)
			Else
				GUICtrlSetColor($SelAll_TVItem, 0x696969)
				GUICtrlSetState($SelAll_TVItem, $GUI_CHECKED)
			EndIf
	EndSwitch
WEnd

Func AllIsUnChecked()
	For $i = 1 To UBound($TVItemsID_Array) - 1
		If BitAND(GUICtrlRead($TVItemsID_Array[$i]), $GUI_CHECKED) Then Return False
	Next

	Return True
EndFunc

Func AllIsChecked()
	For $i = 1 To UBound($TVItemsID_Array) - 1
		If BitAND(GUICtrlRead($TVItemsID_Array[$i]), $GUI_UNCHECKED) Then Return False
	Next

	Return True
EndFunc
 
Автор
D

Dellroc

Осваивающий
Сообщения
151
Репутация
31
Лучший вариант взят отсюда http://autoit-script.ru/index.php/topic,12792.msg82297.html#msg82297
 
Верх