Что нового

Булевы настроек

lexaSF

Новичок
Сообщения
182
Репутация
3
У меня есть файл с настройками, вкотором содержится множество True,false... я знаю, Что каждый булев - состояние определенного чебокса.Как мне через этот файл настроек зная булеву True\False Отметить состояние chebox-a? например, я через прогу выбрал несколько настроек,позже, их значения сохранились в файл, допустим false,true,false 1 булев чебокс1, 2-2, и т.п, как зная состояние чебоксов в булевах, также отметить чебоксы в проге?.
Например есть у нас Chebox1 и Chebox2.Я отметил Chebox1, а Chebox2 оставил без галочки, сохранил все в файл.В нем будет true,false.Чтобы когда я включил проу чебоксы отметились точно также мне нужно загрузить файл.Как отметить чебоксы без загрузки файла, но зная какая булева какому чебоксу?
Ну вот смотрите.Я отметил 5 чебоксов, их состояния по порядку записались в файл.Чтобы в проге возобновить все эти состояния надо выбирать файл-Настройки-загрузить и т.п. Как мне сделать, чтобы когда я включал прогу,читался файл с булевами и чебоксы возобновляли свое состояние, без файл-Настройки-загрузить и т.п., чтобы оно сразу прочитывалось?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
lexaSF [?]
без файл-Настройки-загрузить и т.п
Ну а как реализована эта функция? также и при загрузке делай.

Код:
#include <GUIConstantsEx.au3>

Global $sPrefs_File = @ScriptDir & "\Prefs.ini"
Global $aCheckBoxes[6]

$hGUI = GUICreate("Remember Prefs", 300, 200)

$aCheckBoxes[0] = GUICtrlCreateCheckbox("Option 1", 20, 40)
$aCheckBoxes[1] = GUICtrlCreateCheckbox("Option 2", 220, 40)
$aCheckBoxes[2] = GUICtrlCreateCheckbox("Option 3", 20, 80)
$aCheckBoxes[3] = GUICtrlCreateCheckbox("Option 4", 220, 80)
$aCheckBoxes[4] = GUICtrlCreateCheckbox("Option 5", 20, 120)
$aCheckBoxes[5] = GUICtrlCreateCheckbox("Option 6", 220, 120)

$nOK_Button = GUICtrlCreateButton("Ok", 20, 170, 60, 20)
$nCancel_Button = GUICtrlCreateButton("Cancel", 80, 170, 60, 20)
$nLoadPrefs_Button = GUICtrlCreateButton("Load Prefs", 150, 170, 70, 20)
$nSavePrefs_Button = GUICtrlCreateButton("Save Prefs", 220, 170, 70, 20)

GUISetState(@SW_SHOW, $hGUI)
_LoadPrefs()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE, $nCancel_Button
			Exit
		Case $nLoadPrefs_Button
			_LoadPrefs()
		Case $nSavePrefs_Button
			_SavePrefs()
		Case $nOK_Button
			_SavePrefs()
			Exit
	EndSwitch
WEnd

Func _LoadPrefs()
	For $i = 0 To UBound($aCheckBoxes)-1
		If IniRead($sPrefs_File, "CheckBoxes", $aCheckBoxes[$i], "False") = "True" Then
			GUICtrlSetState($aCheckBoxes[$i], $GUI_CHECKED)
		Else
			GUICtrlSetState($aCheckBoxes[$i], $GUI_UNCHECKED)
		EndIf
	Next
EndFunc

Func _SavePrefs()
	For $i = 0 To UBound($aCheckBoxes)-1
		IniWrite($sPrefs_File, "CheckBoxes", $aCheckBoxes[$i], BitAND(GUICtrlRead($aCheckBoxes[$i]), $GUI_CHECKED) = $GUI_CHECKED)
	Next
EndFunc
 

madmasles

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

$sIniFile = @ScriptDir & '\test.ini'
$iW = 100
$iH = 30
$iD = 10
Dim $aCheckbox[6][3] = [[5],['Первый'],['Второй'],['Третий'],['Четвертый'],['Пятый']]
If FileExists($sIniFile) Then
	For $i = 1 To $aCheckbox[0][0]
		$aCheckbox[$i][2] = IniRead($sIniFile, 'Checkbox', $aCheckbox[$i][0], $GUI_CHECKED)
	Next
Else
	For $i = 1 To $aCheckbox[0][0]
		$aCheckbox[$i][2] = $GUI_CHECKED
	Next
EndIf

$hGui = GUICreate('Test', $iW + $iD * 2, $iH * $aCheckbox[0][0] + $iD, -1, -1)
For $i = 1 To $aCheckbox[0][0]
	$aCheckbox[$i][1] = GUICtrlCreateCheckbox($aCheckbox[$i][0], $iD, $iD + ($i - 1) * $iH, $iW, 20)
	GUICtrlSetState(-1, $aCheckbox[$i][2])
Next
GUISetState()

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

	EndSwitch
WEnd

Func _SaveCheckbox()
	For $i = 1 To $aCheckbox[0][0]
		IniWrite($sIniFile, 'Checkbox', $aCheckbox[$i][0], GUICtrlRead($aCheckbox[$i][1]))
	Next
EndFunc   ;==>_SaveCheckbox
 
Автор
L

lexaSF

Новичок
Сообщения
182
Репутация
3
Да, так то оно работает, но 1 проблема, булевы содержаться не в ини файле, а просто идут True,False,false.... + в проге несколько чебоксов обьеденены в группы, таких групп несколько.
могу скинуть, прогу.а то я плохо понимаю как можно восстановит настрйки по булевам и вообще Func почти не знаю


Добавлено:
Сообщение автоматически объединено:

Avtoitv3 Window info пишет что это CheckedListBox
 
Автор
L

lexaSF

Новичок
Сообщения
182
Репутация
3
Чтобы сохранить состояние чебоксов надо там файл - настройки - сохранить.У меня есть файл где описан каждый булев к какому чебоксу.


Добавлено:
Сообщение автоматически объединено:

CreatoR сказал(а):
lexaSF [?]
могу скинуть, прогу
То что это внешняя программа, нужно упоминать сразу :mad:.
Сорри :'(
 
Верх