Speichern und Laden einer .ini mit checkbox.

  • Hey Leute also ich habe mir mal vorgenommen, ein kleinen config bearbeiter zu coden.

    Nun ist mein Problem

    1. wie erkenne ich den Status einer Checkbox?
    also checkbox = checked = 1
    ansonsten = 0

    2. wie kann ich das ganze dann noch speichern ?


    so sieht mein code für den save/load button aus.

    Aber allgemein gesagt:
    Ich habe ein GUI mit vielen checkboxen. und würe gerne wissen wie ich den Status (also checked oder nicht checked) speichern kann und dann auch wieder auslesen kann (also dann eben button mit load und Iniread is klar das wär net das ding.

    würde mich über jede Hilfe wirklich freuen (bekomm hier bald nen Kollaps versuch schon den ganzen Tag irgendwas :)

    mfg testering

    • Offizieller Beitrag

    Hi,

    GuiCtrlRead hilft dir.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    GUICreate("My GUI Checkbox")
    $1_CB = GUICtrlCreateCheckbox("AN", 10, 10, 120, 20)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $2_CB = GUICtrlCreateCheckbox("AUS", 10, 30, 120, 20)
    $start = GUICtrlCreateButton("Statuscheck", 10, 50, 100, 21)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()

    [/autoit] [autoit][/autoit] [autoit]

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    If $msg = $start Then
    ConsoleWrite(_getCheckboxState($1_CB) & @CRLF)
    ConsoleWrite(_getCheckboxState($2_CB) & @CRLF)
    EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _getCheckboxState($controlID)
    Return BitAND(GUICtrlRead($controlID),$GUI_CHECKED)
    EndFunc ;==>_getCheckboxState

    [/autoit]

    So long,

    Mega

  • schonmal danke für die schnelle antwort.
    werds mir morgen früh mal anschauen ;) dange dange :)

    bis denn denn
    good night good fight

  • also habe es mal ausprobiert und es klappt so weit so gut.
    nun weiß ich aber nicht, wie ich es anstelle, dass er mir die komplette .inifile ausliest

    in der richtigen ini sind nämlich mehr als 30 Einträge und die will ich net alle einzeln auslesen lassen.

    also bisher sieht mein code so aus

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    If Not IsDeclared("sInputBoxAnswer") Then Local $sInputBoxAnswer
    $sInputBoxAnswer = InputBox("AutoConfig","Welche Config willst du bearbeiten?","Name deines Charakters"," M","200","120","-1","-1")
    Select
    Case @Error = 0

    [/autoit] [autoit][/autoit] [autoit]

    Case @Error = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case @Error = 3

    [/autoit] [autoit][/autoit] [autoit]

    EndSelect
    $username = $sInputBoxAnswer
    $inifile = ("Data/")& $username & (".ini")
    GUICreate("My GUI Checkbox")
    $1_CB = GUICtrlCreateCheckbox("AN", 10, 10, 20, 20)
    $2_CB = GUICtrlCreateCheckbox("AN", 10, 40, 20, 20)
    $3_CB = GUICtrlCreateCheckbox("AN", 40, 10, 20, 20)
    $4_CB = GUICtrlCreateCheckbox("AN", 40, 40, 20, 20)
    $start = GUICtrlCreateButton("save", 10, 80, 100, 21)
    $load = GUICtrlCreateButton("load", 120, 80, 100, 21)
    GUISetState()
    While 1
    $msg = GUIGetMsg()

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    If $msg = $start Then
    IniWrite ($inifile, "MAIN", "Wert",_getCheckboxState($1_CB))
    IniWrite ($inifile, "MAIN", "Wert2",_getCheckboxState($2_CB))
    IniWrite ($inifile, "MAIN", "Wert3",_getCheckboxState($3_CB))
    IniWrite ($inifile, "MAIN", "Wert4",_getCheckboxState($4_CB))
    EndIf
    If $msg = $load Then
    IniRead ($inifile, "MAIN", "Wert",_getCheckboxState($1_CB))
    If IniRead ($inifile, "MAIN", "Wert",_getCheckboxState($1_CB)) = 1 Then
    $1_CB = GUICtrlCreateCheckbox("AN", 10, 10, 20, 20)
    GUICtrlSetState(-1, $GUI_CHECKED)
    Else
    GUICtrlSetState(0, $GUI_CHECKED)
    EndIf
    EndIf
    WEnd

    Func _getCheckboxState($controlID)
    Return BitAND(GUICtrlRead($controlID),$GUI_CHECKED)
    EndFunc ;==>_getCheckboxState

    [/autoit]

    kann ich das auslesen auf dem load button nicht auch eifnacher gestalten?
    als eine function schreiben und dann load drücken und der generiert mir jede variable von selbst?
    sonst müsst ich ja jede variable einzeln auslesen lassen.

    vielen dank
    mfg testering

  • Auch wenn die Eingangsfrage schon älter ist, ist das Problem noch immer aktuell. Deshalb habe ich das Script vervollständigt, so dass es für beliebig viele Checkboxen genutzt werden kann.


    [autoit]


    #include <GUIConstants.au3>

    [/autoit][autoit][/autoit][autoit]

    dim $Chkbox[65535]

    [/autoit][autoit][/autoit][autoit]

    $j=4 ;Anzahl der Checkboxen

    [/autoit][autoit][/autoit][autoit]

    $inifile = (@ScriptDir & "\test.ini")

    [/autoit][autoit][/autoit][autoit]

    GUICreate("My GUI Checkbox")
    $Chkbox[1] = GUICtrlCreateCheckbox("AN", 10, 10, 40, 20)
    $Chkbox[2] = GUICtrlCreateCheckbox("AN", 10, 40, 40, 20)
    $Chkbox[3] = GUICtrlCreateCheckbox("AN", 60, 10, 40, 20)
    $Chkbox[4] = GUICtrlCreateCheckbox("AN", 60, 40, 40, 20)

    [/autoit][autoit][/autoit][autoit]

    $start = GUICtrlCreateButton("save", 10, 80, 100, 21)
    $load = GUICtrlCreateButton("load", 120, 80, 100, 21)
    GUISetState()
    While 1
    $msg = GUIGetMsg()

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop

    [/autoit][autoit][/autoit][autoit]

    If $msg = $start Then
    for $i = 1 to $j
    IniWrite ($inifile, "MAIN", "Wert" & $i,_getCheckboxState($Chkbox[$i]))
    Next
    EndIf

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    If $msg = $load Then
    for $i = 1 to $j
    If IniRead($inifile, "MAIN", "Wert" & $i, _getCheckboxState ($Chkbox[$i]))=1 Then
    GUICtrlSetState($Chkbox[$i], $GUI_CHECKED)
    Else
    GUICtrlSetState($Chkbox[$i], $GUI_UNCHECKED)
    EndIf
    Next
    EndIf
    WEnd

    Func _getCheckboxState($controlID)
    Return BitAND(GUICtrlRead($controlID),$GUI_CHECKED)
    EndFunc ;==>_getCheckboxState

    [/autoit][autoit][/autoit][autoit][/autoit]