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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] GUICtrlCreateTreeView - Определение нажатия на элемент или на чекбокс

Ответить
Настройки темы
[решено] GUICtrlCreateTreeView - Определение нажатия на элемент или на чекбокс

Старожил


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


Конфигурация

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


Приветствую, как для примера приведу пример от MrCreatoR
Код: Выделить весь код
#include <GUIConstants.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
Возможно ли определять - было нажато на название раздела или на сам чекбокс т.к. если выделить Item 5 и потом просто нажать на само название Select all - выделяются все элементы (как бы это предотвратить т.к. не было нажатия на сам чекбокс) ?

Отправлено: 15:50, 18-03-2020

 

Старожил


Сообщения: 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



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] GUICtrlCreateTreeView - Определение нажатия на элемент или на чекбокс

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Проблема с мышью (не работают нажатия на некоторые элементы на экране) Jonathan119 Непонятные проблемы с Железом 2 30-11-2019 04:43
VBS/WSH/JS - [решено] Определение кода нажатия кнопки Win4ester Скриптовые языки администрирования Windows 7 07-01-2015 15:24
[решено] Запускается комп от нажатия на мышь или клавиатуру. Alexxandr9 Непонятные проблемы с Железом 5 15-09-2013 01:02
Клиенты - Элемент не удаляется. Он уже перемещен или удален, или вам отказано в доступе migunov Microsoft Exchange Server 8 25-07-2012 05:33
2010 - [решено] Как в VBA добавить на Toolbox элемент управления Календарь или его замену okshef Microsoft Office (Word, Excel, Outlook и т.д.) 4 11-11-2010 07:46




 
Переход