Что нового

Как сохранять положение элементов GUICtrlCreateRadio в ini-файл?

agikon

Знающий
Сообщения
789
Репутация
17
стал делать и понял что радиоточки это мне не чекбоксы, и сохранять их положение чтото не получается.Пожалуйста набросайте пример сохранения чекбоксов в ini-файл.
вот на этом примере.
Код:
#include <GUIConstantsEx.au3>

GUICreate('Test', 250, 200)
GUICtrlCreateGroup('Group 1', 10, 10, 230, 50)
$nRadio1 = GUICtrlCreateRadio('Radio1', 20, 30, 100, 20)
GUICtrlSetState(-1, $GUI_CHECKED)
$nRadio2 = GUICtrlCreateRadio('Radio2', 130, 30, 100, 20)
GUICtrlCreateGroup('', -99, -99, 1, 1)
GUICtrlCreateGroup('Group 2', 10, 70, 230, 50)
$nRadio3 = GUICtrlCreateRadio('Radio3', 20, 90, 100, 20)
$nRadio4 = GUICtrlCreateRadio('Radio4', 130, 90, 100, 20)
GUICtrlSetState(-1, $GUI_CHECKED)
GUICtrlCreateGroup('', -99, -99, 1, 1)
$nButton = GUICtrlCreateButton('Click me', 75, 140, 100, 30)
GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $nButton
            MsgBox(64, 'Info', 'Radio1: ' & GUICtrlRead($nRadio1) & @LF & _
                    'Radio2: ' & GUICtrlRead($nRadio2) & @LF & _
                    'Radio3: ' & GUICtrlRead($nRadio3) & @LF & _
                    'Radio4: ' & GUICtrlRead($nRadio4))
    EndSwitch
WEnd
 

rusreg79

Продвинутый
Сообщения
159
Репутация
57
Помоему все одинаково сохраняется :smile:
Код:
#include <GUIConstantsEx.au3>

$filename = @ScriptDir & '\save.ini'

GUICreate('Test', 250, 200)
GUICtrlCreateGroup('Group 1', 10, 10, 230, 50)
$nRadio1 = GUICtrlCreateRadio('Radio1', 20, 30, 100, 20)
GUICtrlSetState(-1, IniRead($filename, 'setting', "nRadio1", $GUI_CHECKED))
$nRadio2 = GUICtrlCreateRadio('Radio2', 130, 30, 100, 20)
GUICtrlSetState(-1, IniRead($filename, 'setting', "nRadio2", ''))
GUICtrlCreateGroup('Group 2', 10, 70, 230, 50)
$nRadio3 = GUICtrlCreateRadio('Radio3', 20, 90, 100, 20)
GUICtrlSetState(-1, IniRead($filename, 'setting', "nRadio3", ''))
$nRadio4 = GUICtrlCreateRadio('Radio4', 130, 90, 100, 20)
GUICtrlSetState(-1, IniRead($filename, 'setting', "nRadio4", $GUI_CHECKED))
GUICtrlCreateGroup('', -99, -99, 1, 1)
$nButton = GUICtrlCreateButton('Click me', 75, 140, 100, 30)
GUISetState()

While 1
    Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			IniWrite($filename, 'setting', "nRadio1", GUICtrlRead($nRadio1))
			IniWrite($filename, 'setting', "nRadio2", GUICtrlRead($nRadio2))
			IniWrite($filename, 'setting', "nRadio3", GUICtrlRead($nRadio3))
			IniWrite($filename, 'setting', "nRadio4", GUICtrlRead($nRadio4))
            Exit
        Case $nButton
            MsgBox(64, 'Info', 'Radio1: ' & GUICtrlRead($nRadio1) & @LF & _
                    'Radio2: ' & GUICtrlRead($nRadio2) & @LF & _
                    'Radio3: ' & GUICtrlRead($nRadio3) & @LF & _
                    'Radio4: ' & GUICtrlRead($nRadio4))
    EndSwitch
WEnd
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
rusreg79
у вашем примере изменения в ini-файле происходят только тогда когда закрывается окно.
а требуется чтобы изменения в ini-файл происходилт сразу же как только меняется положение точки в GUICtrlCreateRadio.
вот именно это у меня и не получается. ведь это не чекбокс, здесь же зависимость одной радиоточки от другой. как это сделать я не пойму.

а всё понял.
сделал вот так и заработало.
Спасибо.

Код:
Case  $nRadio1
            IniWrite($filename, 'setting', "nRadio1", GUICtrlRead($nRadio1))
            IniWrite($filename, 'setting', "nRadio2", GUICtrlRead($nRadio2))
Case  $nRadio2
             IniWrite($filename, 'setting', "nRadio2", GUICtrlRead($nRadio2))
            IniWrite($filename, 'setting', "nRadio1", GUICtrlRead($nRadio1))

Case  $nRadio3
            IniWrite($filename, 'setting', "nRadio3", GUICtrlRead($nRadio3))
            IniWrite($filename, 'setting', "nRadio4", GUICtrlRead($nRadio4))
Case  $nRadio4
           IniWrite($filename, 'setting', "nRadio4", GUICtrlRead($nRadio4))
            IniWrite($filename, 'setting', "nRadio3", GUICtrlRead($nRadio3))
 

SECTOR

Продвинутый
Сообщения
399
Репутация
59
Код:
#include <GUIConstantsEx.au3>

$filename = @ScriptDir & '\save.ini'

GUICreate('Test', 250, 200)
GUICtrlCreateGroup('Group 1', 10, 10, 230, 50)
$nRadio1 = GUICtrlCreateRadio('Radio1', 20, 30, 100, 20)
$nRadio2 = GUICtrlCreateRadio('Radio2', 130, 30, 100, 20)
GUICtrlCreateGroup('Group 2', 10, 70, 230, 50)
$nRadio3 = GUICtrlCreateRadio('Radio3', 20, 90, 100, 20)
$nRadio4 = GUICtrlCreateRadio('Radio4', 130, 90, 100, 20)
GUICtrlCreateGroup('', -99, -99, 1, 1)
$nButton = GUICtrlCreateButton('Click me', 75, 140, 100, 30)

_LoadRadioStates()

GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $nButton
            MsgBox(64, 'Info', 'Radio1: ' & GUICtrlRead($nRadio1) & @LF & _
                    'Radio2: ' & GUICtrlRead($nRadio2) & @LF & _
                    'Radio3: ' & GUICtrlRead($nRadio3) & @LF & _
                    'Radio4: ' & GUICtrlRead($nRadio4))
		Case $nRadio1, $nRadio2, $nRadio3, $nRadio4
			_SaveRadioStates()
    EndSwitch
WEnd

Func _SaveRadioStates()
	IniWrite($filename, 'setting', "nRadio1", GUICtrlRead($nRadio1))
	IniWrite($filename, 'setting', "nRadio2", GUICtrlRead($nRadio2))
	IniWrite($filename, 'setting', "nRadio3", GUICtrlRead($nRadio3))
	IniWrite($filename, 'setting', "nRadio4", GUICtrlRead($nRadio4))
EndFunc

Func _LoadRadioStates()
	GUICtrlSetState($nRadio1,IniRead($filename, 'setting', "nRadio1", $GUI_CHECKED))
	GUICtrlSetState($nRadio2,IniRead($filename, 'setting', "nRadio2", $GUI_UNCHECKED))
	GUICtrlSetState($nRadio3,IniRead($filename, 'setting', "nRadio3", $GUI_UNCHECKED))
	GUICtrlSetState($nRadio4,IniRead($filename, 'setting', "nRadio4", $GUI_CHECKED))
EndFunc
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
SECTOR
спастибо тоже интересный вариант посадить на функцию.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
А если есть 10 элементов Radio ?
Что записывать сосояние всех 10 ?

Не лучше ли определить активный и только его записать ? Остальные то пустые, и так известно
Код:
#include <GUIConstantsEx.au3>

GUICreate('Test', 250, 200)
GUICtrlCreateGroup('Group 1', 10, 10, 230, 50)
$sFileIni=@ScriptDir & "\Test.ini"
$nRadio1 = GUICtrlCreateRadio('Radio1', 20, 30, 100, 20)
GUICtrlSetState(-1, $GUI_CHECKED)
$nRadio2 = GUICtrlCreateRadio('Radio2', 130, 30, 100, 20)
GUICtrlCreateGroup('', -99, -99, 1, 1)
GUICtrlCreateGroup('Group 2', 10, 70, 230, 50)
$nRadio3 = GUICtrlCreateRadio('Radio3', 20, 90, 100, 20)
$nRadio4 = GUICtrlCreateRadio('Radio4', 130, 90, 100, 20)
GUICtrlSetState(-1, $GUI_CHECKED)
GUICtrlCreateGroup('', -99, -99, 1, 1)
$nButton = GUICtrlCreateButton('Get Active Radio', 75, 140, 100, 30)
GUISetState()

While 1
    $nMsg=GUIGetMsg()
	Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
		Case $nRadio1 To $nRadio2  
			$iRadioGroup1=$nMsg-$nRadio1
            MsgBox(0,'',"$iRadioGroup1 = " & $iRadioGroup1  & @LF & "Active ID = " & $iRadioGroup1+$nRadio1)
			IniWrite($sFileIni, 'setting', "nRadio1", $iRadioGroup1)
		Case $nRadio3 To $nRadio4  
			$iRadioGroup2=$nMsg-$nRadio3
			MsgBox(0,'',"$iRadioGroup2 = " &  $iRadioGroup2  & @LF & "Active ID = " & $iRadioGroup2+$nRadio3)
			IniWrite($sFileIni, 'setting', "nRadio2", $iRadioGroup2)
		Case $nButton
			$iActiveGroup1=IniRead($sFileIni, 'setting', "nRadio1", '')
			$iActiveGroup2=IniRead($sFileIni, 'setting', "nRadio2", '')
            
	MsgBox(64, 'ID активного Radio', 	'Radio1: Active ID= ' & $iActiveGroup1+$nRadio1 & @LF & _
										'Radio2: Active ID= ' & $iActiveGroup2+$nRadio3)
    EndSwitch
WEnd
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
И даже еще проще:
Код:
;..................
While 1
    $nMsg=GUIGetMsg()
	Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
		Case $nRadio1 To $nRadio2  
			IniWrite($sFileIni, 'setting', "nRadio1", $nMsg)
		Case $nRadio3 To $nRadio4  
			IniWrite($sFileIni, 'setting', "nRadio2", $nMsg)
		Case $nButton
			$iActiveGroup1=IniRead($sFileIni, 'setting', "nRadio1", '')
			$iActiveGroup2=IniRead($sFileIni, 'setting', "nRadio2", '')
            
	MsgBox(64, 'ID активного Radio', 	'Radio Group1: Active ID= ' & $iActiveGroup1 & @LF & _
										'Radio Group2: Active ID= ' & $iActiveGroup2)
    EndSwitch
WEnd
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
gregaz
а как узнать для какой радиоточки активный?
ну смотри, если строка в ini-файле одна на две радиоточки то как при старте скрипта определить какая точка должна быть активной?
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
agikon [?]
ну смотри, если строка в ini-файле одна на две радиоточки то как при старте скрипта определить какая точка должна быть активной?

Я не знаю для чего у тебя две группы?
Поясни задачу.

А так ты записал активный радио в каждой группе.

Призапуске скрипта они сразу пометятся.Что еще надо?

Прочитаешь при запуске скрипта :
Код:
$iActiveGroup1=IniRead($sFileIni, 'setting', "nRadio1", '')
GUICtrlSetState($iActiveGroup1, $GUI_CHECKED)
 $iActiveGroup2=IniRead($sFileIni, 'setting', "nRadio2", '')
GUICtrlSetState($iActiveGroup2, $GUI_CHECKED)
и присвоишь им состояние Checked
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
agikon [?]
смотри в ini-файл записывется только значение 1 или 4.

У меня записывается не 1 или 4 (это состояние элемента),
а ID активного(отмеченного) Radio элемента
Ты смотришь не мой пример .
Зачем записывать состояние элемента ?
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
новику тяжело сразу оперировть с проверкой оболочки, и тд и тп.
вот потому иногда способ который оптимизирован тяжелей воспринимается чем тот который не оптимизирован.

вот если бы целиком весь код т оя бы быстрее понял :-[
 
Верх