Что нового

Помогите создать ini-файл чтобы запоминал галочку.

agikon

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

вот мой код самой простой работающий код,вот как для него создать этот ini-файл?
Код:
#include <GUIConstantsEx.au3>
#Include <WinAPIEx.au3>
#include <GUICtrlCreateTFLabel.au3>


$hMain_GUI  = GUICreate('', 300, 200)
$nButton = GUICtrlCreateButton('OK', 90, 160, 100, 30)
$galochka = GUICtrlCreateCheckbox("галочка", 50, 100, 100, 20)
GUISetState()

While 1
	$nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
		Case $nButton
			sleep(10)
			If BitAND(GUICtrlRead($galochka), $GUI_CHECKED) Then
			MsgBox(64, 'Info', 'задача 1')
			Endif

	EndSwitch
	;sleep(1)
wend
 

Dm666

Осваивающий
Сообщения
222
Репутация
48
Например так...

Код:
#include <GUIConstantsEx.au3>
#include <WinAPIEx.au3>
#include <GUICtrlCreateTFLabel.au3>
$hIni = @ScriptDir & "\Settings.ini"


$hMain_GUI = GUICreate('', 300, 200)
$nButton = GUICtrlCreateButton('OK', 90, 160, 100, 30)
$galochka = GUICtrlCreateCheckbox("галочка", 50, 100, 100, 20)
If IniRead($hIni, "Main", "Galochka", "False") = "True" Then GUICtrlSetState($galochka, $GUI_CHECKED)
GUISetState()

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			_Exit()
		Case $nButton
			Sleep(10)
			If BitAND(GUICtrlRead($galochka), $GUI_CHECKED) Then
				MsgBox(64, 'Info', 'задача 1')
			EndIf

	EndSwitch
	;sleep(1)
WEnd

Func _Exit()
	If GUICtrlRead($galochka) = 1 Then ; Checked
		IniWrite($hIni, "Main", "Galochka", "True")
	Else
		IniWrite($hIni, "Main", "Galochka", "False")
	EndIf
	Exit
EndFunc   ;==>_Exit


Ну и сам Settings.ini:
[Main]
Galochka=False
 

AZJIO

Меценат
Меценат
Сообщения
2,892
Репутация
1,196
agikon

Код:
Global $ini=@ScriptDir&'\Save.ini'

; первый старт - создание ini с настройками по умолчанию. Статус NOTREADY проверяется на случай если скрипт работает с CD-диска
If Not FileExists($ini) And DriveStatus(StringLeft(@ScriptDir, 1))<>'NOTREADY' Then
	$file = FileOpen($ini,2)
	FileWrite($file, '[Set]' &@CRLF& _
	'Trigger=1')
	FileClose($file)
EndIf

; чтение параметра
$Trigger=Number(IniRead($Ini, 'Set', 'Trigger', '1'))

GUICreate('My Program', 250, 260)
$CheckBox1=GUICtrlCreateCheckbox('CheckBox1', 10, 10, 120, 17)
If $Trigger=1 Then GUICtrlSetState(-1, 1) ; установка состояния
GUISetState()
OnAutoItExitRegister("_Exit_Save_Ini") ; срабатывает когда скрипт завершает работу

Do
Until GUIGetMsg()=-3

Func _Exit_Save_Ini()
	; если диск доступен для чтения, то сохраняем
	If DriveStatus(StringLeft(@ScriptDir, 1))<>'NOTREADY' Then
		IniWrite($Ini, 'Set', 'Trigger', GUICtrlRead($CheckBox1))
	EndIf
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
AZJIO
А зачем так сложно?

Код:
#include <GUIConstantsEx.au3>

Global $sIniFile = @ScriptDir & '\Config.ini'

; чтение параметра
$iOption1 = IniRead($sIniFile, 'Set', 'Option1', '1')

GUICreate('My Program', 250, 260)
$CheckBox1 = GUICtrlCreateCheckbox('CheckBox1', 10, 10, 120, 17)
GUICtrlSetState(-1, $iOption1) ; установка состояния

GUISetState()
OnAutoItExitRegister("_Exit_Save_Ini") ; срабатывает когда скрипт завершает работу

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Func _Exit_Save_Ini()
	IniWrite($sIniFile, 'Set', 'Option1', GUICtrlRead($CheckBox1))
EndFunc


Проверка на запись не нужна особо, т.к IniWrite не будет никуда писать если нет доступа записи.
 
Автор
A

agikon

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

AZJIO спасибо, но у вас действительно сложно как для новичка. хотели меня напугать :smile: вам удалось :smile:

CreatoR а от ваш вариант я взял на вооружение, спасибо.
всё работает всем спасибо.
 

AZJIO

Меценат
Меценат
Сообщения
2,892
Репутация
1,196
agikon
хотели меня напугать
нет, дал полный пример, как я делаю сам.

CreatoR
В моём варианте нельзя установить статус 16, 32, 64, 128 и т.д. или текст в параметре, так как принимаются только два параметра "1" или "другое", что приравнивается к False.

IniWrite не будет никуда писать если нет доступа записи.
Не знал, проверил, точно не сохраняет и не выдаёт ошибки, а возвращает 0 или 1. В справке указывается только про несуществующие каталоги. Встречались программы, которые вылетают при сохранении ini, поэтому думал не поддерживается.
 
Верх