Что нового

[Процессы] расширенное распознование Checkbox

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
Появился такой вот у меня вопрос, думаю что в дальнейшем это может пригодится и другим

этот код, распознает конкретно нажатый Checkbox и при условии его нажатия выполняет функцию
Код:
if BitAND( GUIctrlRead($Checkbox1), $GUI_CHECKED) = $GUI_CHECKED Then
 $1 = $kiss = WRITE1()



а можно ли сделать так, что бы определялось больше чем один checkbox за раз и выполнялась функция для всех?

тоесть если зажаты определенные box-ы то для них выполняется одна функция


я пробывал сделать так

Код:
if BitAND( GUIctrlRead($Checkbox1+$Checkbox2), $GUI_CHECKED) = $GUI_CHECKED Then
 $1 = $kiss = WRITE1()


это не сработало, но как я подумал, даже если и сработало бы, функция выполнялась бы только при двух зажатых сразу 2 checkbox-а. мне нужно что бы эта фунция выполнялась и при зажатом $Checkbox1 отдельно, и отдельно с нажатым $Checkbox2, и сразу вместе


после этого пришла в голову вторая мысль

Код:
if BitAND( GUIctrlRead($Checkbox1 & $Checkbox2), $GUI_CHECKED) = $GUI_CHECKED Then
 $1 = $kiss = WRITE1()


это так же не увенчалось успехом

подскажите возможно ли это сделать. и если да, то при возможности скиньте образец или документацию именно про этот вопрос. ибо я не нашел подобного
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
If BitAND(GUIctrlRead($Checkbox1), $GUI_CHECKED) Or BitAND(GUIctrlRead($Checkbox2), $GUI_CHECKED) Then
 

CreatoR

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

$hGUI = GUICreate('Test Script', 300, 200)

$iCheckBox1 = GUICtrlCreateCheckbox('CheckBox1', 20, 20)
$iCheckBox2 = GUICtrlCreateCheckbox('CheckBox2', 20, 40)
$iCheckBox3 = GUICtrlCreateCheckbox('CheckBox3', 20, 60)

GUISetState(@SW_SHOW, $hGUI)

While 1
	$iMsg = GUIGetMsg()
	
	Switch $iMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $iCheckBox1, $iCheckBox2, $iCheckBox3
			$iRead = BitAND(GUICtrlRead($iCheckBox1), GUICtrlRead($iCheckBox2), GUICtrlRead($iCheckBox3))
			
			Switch $iRead
				Case $GUI_CHECKED
					MsgBox(64, @ScriptName, 'Все галочки отмечены.', 0, $hGUI)
				Case $GUI_UNCHECKED
					MsgBox(64, @ScriptName, 'Все галочки НЕ отмечены.', 0, $hGUI)
				Case Else
					MsgBox(64, @ScriptName, 'Одна (или более) галочка отмечена.', 0, $hGUI)
			EndSwitch
	EndSwitch
WEnd
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
До кучи и мой вариант. :smile:
Код:
#include <GuiButton.au3>
#include <GUIConstantsEx.au3>

Global $iCountChB = Random(10, 20, 1), $aChB[$iCountChB], $hGUI, $iCheck
ConsoleWrite('$iCountChB = ' & $iCountChB & @LF)

$hGUI = GUICreate('Test CheckBoxes', 200, 10 + $iCountChB * 30)
For $i = 0 To $iCountChB - 1
	$aChB[$i] = GUICtrlCreateCheckbox('CheckBox ' & $i + 1, 50, 10 + $i * 30, 100, 20)
	GUICtrlSetCursor(-1, 0)
	If Random(0, 1, 1) Then GUICtrlSendMsg(-1, $BM_SETCHECK, $BST_CHECKED, 0)
Next

GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $aChB[0] To $aChB[$iCountChB - 1]
			$iCheck = 0
			For $i = 0 To $iCountChB - 1
				$iCheck += GUICtrlSendMsg($aChB[$i], $BM_GETCHECK, 0, 0)
			Next
			Switch $iCheck
				Case 0
					MsgBox(64, 'Info', 'Все галочки НЕ отмечены.', 0, $hGUI)
				Case $iCountChB
					MsgBox(64, 'Info', 'Все галочки отмечены.', 0, $hGUI)
				Case Else
					MsgBox(64, 'Info', 'Отмеченых галочек: ' & $iCheck, 0, $hGUI)
			EndSwitch
	EndSwitch
WEnd
 
Автор
V

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
Да. Последние два ответа Это то, что нужно. Спасибо!
Еще один вопрос как дополнение.
А можно ли повторить фунцкию такое же количество раз сколько галочек отмечено?
 

Kasper

Знающий
Сообщения
70
Репутация
8
VermanVendetta13, в примере madmasles есть это
Код:
MsgBox(64, 'Info', 'Отмеченых галочек: ' & $iCheck, 0, $hGUI)

в переменную $iCheck заносятся кол-во отмеченных галочек т.е.
Код:
For $i =1 To $iCheck
_MyFunc()
Next

Func _MyFunc()
;
EndFunc
 
Верх