|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] GUICtrlCreateTreeView - Определение нажатия на элемент или на чекбокс |
|
[решено] GUICtrlCreateTreeView - Определение нажатия на элемент или на чекбокс
|
Старожил Сообщения: 352 |
Профиль | Отправить 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 |
|
Отправлено: 15:50, 18-03-2020 |
Старожил Сообщения: 352
|
Профиль | Отправить 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 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Проблема с мышью (не работают нажатия на некоторые элементы на экране) | 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 |
|