Что нового

[Элементы GUI] Изменение активности Input

Paul_Markey

Новичок
Сообщения
18
Репутация
1
Как изменить активность input при активации и дезактивации CheckBox?
Пример
Код:
#include <GUIConstants.au3>

$Form1 = GUICreate("Form1", 140, 122, 193, 125)
$Input1 = GUICtrlCreateInput("Input1", 8, 8, 121, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
$Checkbox1 = GUICtrlCreateCheckbox("Активировать", 8, 32, 97, 17)
$Button1 = GUICtrlCreateButton("Сохранить", 32, 56, 75, 25, 0)
$Button2 = GUICtrlCreateButton("Отмена", 32, 88, 75, 25, 0)
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

	EndSwitch
WEnd

В программе много Inputов и CheckBoxов, и каждый из них должен изменять активность
 

madmasles

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

Global $aState[2] = [$GUI_DISABLE, $GUI_ENABLE], $iCount = Random(10, 20, 1), $aID[$iCount][2], $hGui, $iMsg

$hGui = GUICreate('Test', 250, $iCount * 30 + 20)
For $i = 0 To $iCount - 1
	$aID[$i][0] = GUICtrlCreateCheckbox($i + 1 & ' Active', 10, 10 + $i * 30, 70, 20)
Next
For $i = 0 To $iCount - 1
	$aID[$i][1] = GUICtrlCreateInput('', 80, 10 + $i * 30, 160, 20)
	GUICtrlSetState(-1, $aState[0])
Next
GUISetState()

While 1
	$iMsg = GUIGetMsg()
	Switch $iMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $aID[0][0] To $aID[$iCount - 1][0]
			For $i = 0 To $iCount - 1
				If $aID[$i][0] = $iMsg Then
					GUICtrlSetState($aID[$i][1], $aState[BitAND(GUICtrlRead($aID[$i][0]), $GUI_CHECKED)])
					ExitLoop
				EndIf
			Next
	EndSwitch
WEnd
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Другой вариант.
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt("GUIResizeMode", 1)
Opt("GUIOnEventMode", 1)

Global $aInput, $aCheckbox, $sInput, $sCheckbox, $h = 0

$Form1 = GUICreate("16473", 185, 458, 192, 114)
GUISetOnEvent($GUI_EVENT_CLOSE, "_GUIEvent")

For $i = 0 To 16
	$sCheckbox &= GUICtrlCreateCheckbox("", 16, 20 + $h, 17, 17) & Chr(32)
	GUICtrlSetOnEvent(-1, "_GUICtrlCheckBoxEvent")
	$sInput &= GUICtrlCreateInput("", 40, 18 + $h, 121, 21) & Chr(32)
	GUICtrlSetState(-1, $GUI_DISABLE)
	$h += 25
Next

$aCheckbox = StringSplit(StringTrimRight($sCheckbox, 1), Chr(32), 2)
$aInput = StringSplit(StringTrimRight($sInput, 1), Chr(32), 2)

GUISetState(@SW_SHOW)

While 1
	Sleep(10)
WEnd

Func _GUICtrlCheckBoxEvent()
	
	For $i = 0 To UBound($aCheckbox) -1
		If $aCheckbox[$i] = @GUI_CTRLID Then
			If BitAND(GUICtrlRead($aCheckbox[$i]), $GUI_CHECKED) Then
				GUICtrlSetState($aInput[$i], $GUI_ENABLE)
			Else
				GUICtrlSetState($aInput[$i], $GUI_DISABLE)
			EndIf
		EndIf
	Next
EndFunc

Func _GUIEvent()
	Select
        Case @GUI_CTRLID = $GUI_EVENT_CLOSE
            Exit
        Case @GUI_CTRLID = $GUI_EVENT_MINIMIZE
        Case @GUI_CTRLID = $GUI_EVENT_RESTORE

    EndSelect
EndFunc
 
Автор
P

Paul_Markey

Новичок
Сообщения
18
Репутация
1
madmasles
Garrett
Примеры полезные, взял на заметку. Но немного сложно разобраться в коде. Можете дать пример кода, если только один CheckBox и Input? так мне будет проще внедрить в свой код и заодно понять код ваших примеров.
P.S. Желательно без For... To... Next...
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Paul_Markey [?]
Можете дать пример кода, если только один CheckBox и Input?
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt("GUIResizeMode", 1)
Opt("GUIOnEventMode", 1)

Global $sInput, $sCheckbox

$Form1 = GUICreate("16473", 185, 58, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "_GUIEvent")
$sCheckbox = GUICtrlCreateCheckbox("", 16, 20, 17, 17)
GUICtrlSetOnEvent(-1, "_GUICtrlCheckBoxEvent")
$sInput = GUICtrlCreateInput("", 40, 18, 121, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
GUISetState(@SW_SHOW)

While 1
	Sleep(10)
WEnd

Func _GUICtrlCheckBoxEvent()

	If $sCheckbox = @GUI_CTRLID Then
		If BitAND(GUICtrlRead($sCheckbox), $GUI_CHECKED) Then
			GUICtrlSetState($sInput, $GUI_ENABLE)
		Else
			GUICtrlSetState($sInput, $GUI_DISABLE)
		EndIf
	EndIf
EndFunc

Func _GUIEvent()
	Select
        Case @GUI_CTRLID = $GUI_EVENT_CLOSE
            Exit
        Case @GUI_CTRLID = $GUI_EVENT_MINIMIZE
        Case @GUI_CTRLID = $GUI_EVENT_RESTORE

    EndSelect
EndFunc
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Код:
#include <GUIConstantsEx.au3>
$Form1 = GUICreate("Form1", 615, 438, 192, 124)
$Input1 = GUICtrlCreateInput("Input1", 144, 40, 121, 21)
$Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 144, 16, 97, 17)
GUISetState(@SW_SHOW)
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Checkbox1
			GUICtrlSetState($Input1,BitXOR(GUICtrlGetState($Input1),192))
	EndSwitch
WEnd
 
Верх