Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Старожил


Сообщения: 352
Благодарности: 192

Профиль | Отправить PM | Цитировать


Можно сохранить состояние чекбокса "Select all" и действовать через него (состояние)
Скрытый текст
Код: Выделить весь код
#include <GUIConstants.au3>

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

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)

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

GUICtrlSetState($SelAll_TVItem, $GUI_EXPAND)
$SelAll_State = BitAND(GUICtrlRead($SelAll_TVItem), $GUI_CHECKED) ? $GUI_CHECKED : $GUI_UNCHECKED

GUISetState()

While 1
	$nMsg = GUIGetMsg()
	
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $SelAll_TVItem
			Local $checked = BitAND(GUICtrlRead($SelAll_TVItem), $GUI_CHECKED) ? $GUI_CHECKED : $GUI_UNCHECKED
			
			If $SelAll_State <> $checked Then
				If GetChecksState() = 1 Then
					Switch_Checks($GUI_UNCHECKED)
					Switch_SelAll($GUI_UNCHECKED)
				Else
					Switch_Checks($GUI_CHECKED)
					Switch_SelAll($GUI_CHECKED)
				EndIf
			EndIf
			
		Case $TVItemsID_Array[1] To $TVItemsID_Array[$iTotal_Items]
			If GetChecksState() = -1 Then
				Switch_SelAll($GUI_UNCHECKED)
			Else
				Switch_SelAll($GUI_CHECKED)
			EndIf
		
	EndSwitch
	
	Sleep(20)
WEnd

Func Switch_SelAll($checkState)
	Local $setState = BitAND($checkState, $GUI_CHECKED) ? $GUI_CHECKED : $GUI_UNCHECKED
	$SelAll_State = $setState
	GUICtrlSetState($SelAll_TVItem, $setState)
EndFunc

Func Switch_Checks($checkState)
	For $a = 1 To UBound($TVItemsID_Array) - 1
		GUICtrlSetState($TVItemsID_Array[$a], $checkState)
	Next
EndFunc

Func GetChecksState()
	Local $count = 0
	Local $items = UBound($TVItemsID_Array) - 1
	
	For $i = 1 To $items
		If BitAND(GUICtrlRead($TVItemsID_Array[$i]), $GUI_CHECKED) Then $count += 1
	Next
	
	If $count = 0 Then Return -1
	If $count = $items Then Return 1
	Return 0
EndFunc

Последний раз редактировалось iglezz, 21-03-2020 в 12:37.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:33, 18-03-2020 | #2