Что нового

[Элементы GUI] Checkbox отключить смену значения

Krokodile

Новичок
Сообщения
43
Репутация
1
Требуется отключить смену значения CheckboxА для пользователя(чтобы значение могла изменить только программа). Схоже с $GUI_DISABLE, но чтобы не накладывалась серая пленка..
Я пока вот такой костыль сделал, думаю это можно сделать более "качественно":
Код:
#include <GUIConstants.au3>
#include <ButtonConstants.au3>

Opt("GUICoordMode", 1)
GUICreate("",150,60)

$check1=GUICtrlCreateCheckbox("ФЫВАПРОЛДЖ",10,10,140,20, $BS_AUTO3STATE)
GUICtrlSetState($check1,2)
$button1=GUICtrlCreateButton("Переключить",10,30,120,20)

GUISetState ()
While 1
   $Msg = GUIGetMsg()
    Switch $Msg
		 Case $GUI_EVENT_CLOSE
            Exit
		 Case $check1
			$state = GUICtrlRead($check1)
            if $state == 1 then GUICtrlSetState($check1,4)
            if $state == 2 then GUICtrlSetState($check1,1)
            if $state == 4 then GUICtrlSetState($check1,2)
		 Case $button1
			$state = GUICtrlRead($check1)
            if $state == 1 then GUICtrlSetState($check1,2)
            if $state == 2 then GUICtrlSetState($check1,4)
            if $state == 4 then GUICtrlSetState($check1,1)		
    EndSwitch
WEnd

Так же с кнопкой переключения(используется ветвление). Может есть другой способ?
 

madmasles

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

GUICreate('', 150, 60)
$nCheckbox = GUICtrlCreateCheckbox('Checkbox', 10, 10, 140, 20, $BS_3STATE)
GUICtrlSetState(-1, $GUI_CHECKED)
$nButton = GUICtrlCreateButton('Change', 15, 35, 120, 20)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nButton
			If BitAND(GUICtrlRead($nCheckbox), $GUI_CHECKED) Then
				GUICtrlSetState($nCheckbox, $GUI_UNCHECKED)
			Else
				GUICtrlSetState($nCheckbox, $GUI_CHECKED)
			EndIf
	EndSwitch
WEnd
По какому принципу изменять(присваивать) третье состояние ($GUI_INDETERMINATE) я не понял.
 
Автор
K

Krokodile

Новичок
Сообщения
43
Репутация
1
$BS_3STATE - вот что мне нужно было, спасибо.
А кнопка в вашем варианте перебирает только вкл/выкл. Так что пока свою оставлю.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Krokodile [?]
А кнопка в вашем варианте перебирает только вкл/выкл.
А так.
Код:
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>

Global $fCheck

GUICreate('', 150, 60)
$nCheckbox = GUICtrlCreateCheckbox('Checkbox', 20, 10, 120, 20, $BS_3STATE)
$nLabel = GUICtrlCreateLabel('+', 10, 12, 10, 16)
$nButton = GUICtrlCreateButton('Change', 15, 35, 120, 20)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nButton
			If BitAND(GUICtrlRead($nCheckbox), $GUI_INDETERMINATE) Then
				If $fCheck Then
					GUICtrlSetState($nCheckbox, $GUI_UNCHECKED)
					GUICtrlSetData($nLabel, '+')
					$fCheck = False
				Else
					GUICtrlSetState($nCheckbox, $GUI_CHECKED)
					GUICtrlSetData($nLabel, '-')
					$fCheck = True
				EndIf
			Else
				GUICtrlSetState($nCheckbox, $GUI_INDETERMINATE)
			EndIf
	EndSwitch
WEnd
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Krokodile [?]
Тему можно закрыть.
[info border=#0000ff float=left]На форуме принято помечать тему решенной после получения ответа на свой вопрос!
Вверху или внизу темы нажмите на ссылку такого вида:
package_old.gif
Тема не решена
[/info]
 
Верх