Einstellungen speichern!

  • Hallo Leute,

    also ich will es hinbekommen das mein Programm sich merkt welche Checkboxen angekreutzt waren oder nicht ,also das er die "einstellungen" speichert.

    aber das ganze so das wenn man das Programm wieder startet die Checkboxen angekreutzt sind!

    Am besten alles so das es automatisch speichert und man nicht mauell den Pfad angeben muss

    Ich weiß das , dass mit iniread/write geht aber mir ist nicht kalr wie genau !

    3 Mal editiert, zuletzt von WOnder (31. Oktober 2010 um 12:12)

  • Also ich hab ein Problem und zwar speichert er ,wenn die Checkbox angekreutzt ist in einer .ini den wert "-1"

    Wenn ich das Programm wieder öffne ist die Checkbox1 angekreutzt, aber wenn ich sie dann wieder "weg kreutzen" will speichert er trotzdem -1 und wenn ich dann speichere ,und das Programm neustarte ist es angekreutzt!

    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $Form1 = GUICreate("Form1", 625, 443, 192, 124)
    $Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 72, 360, 193, 17)
    $check = iniread("settings1","saver","c","0")
    GUICTRLSETSTATE($check,1)
    $Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 72, 128, 337, 81)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Checkbox1
    $check2= 1
    Case $Checkbox2 ; WEnn man Checkbox2 ankreutzt speichert er !
    If $check2= 1 Then
    iniwrite("settings1","saver","c","-1")
    Else
    iniwrite("settings1","saver","c","0")
    Endif

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

    EndSwitch
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von WOnder (29. Oktober 2010 um 17:54)

  • Hier im SetOnEvent Mode

    Spoiler anzeigen
    [autoit]

    #RequireAdmin
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Global $check = IniRead(@ScriptDir & "\settings1.ini", "saver", "c", "0")
    Opt("GUIOnEventMode",1)

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

    $Form1 = GUICreate("Form1", 625, 443, 192, 124)
    GUISetOnEvent($GUI_EVENT_CLOSE,"_Exit")
    $Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 72, 360, 193, 17)
    If $check = "-1" Then
    GUICtrlSetState($Checkbox1,$GUI_CHECKED)
    Else
    GUICtrlSetState($Checkbox1,$GUI_UNCHECKED)
    EndIf
    $Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 72, 128, 337, 81)
    GUICtrlSetOnEvent(-1,"_Save")
    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Save()
    $rCheck1 = GUICtrlRead($Checkbox1)
    If $rCheck1 = $GUI_CHECKED Then
    IniWrite(@ScriptDir & "\settings1.ini","saver","c","-1")
    Else
    IniWrite(@ScriptDir & "\settings1.ini","saver","c","0")
    EndIf
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]

    Edit:
    HÄÄ hier war doch eben noch ein post von heute 17:13 das du es nicht geschafft hast sogar mit Script??????? ?(?(?(:?:

    • Offizieller Beitrag

    @WOnder, warum löschst du deinen Beitrag und macht zum selben Thema gleich 2 neue Threads auf?
    Ich finde das unmöglich, MoD am besten die andern Threads gliech löschen.

  • Hey danke für die Antwort Molaynox ,aber leider ist mein Skript etwas anders .Die "GUI" ist komplett in einer anderern Func eingebunden ,d.h. die Variable $Checkbox1 wird nicht weitergegeben .

    So sieht er ungefähr aus

    Spoiler anzeigen
    [autoit]

    #RequireAdmin
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Global $check = IniRead(@ScriptDir & "\settings1.ini", "saver", "c", "0")
    Opt("GUIOnEventMode",1)
    Func _function()
    $Form1 = GUICreate("Form1", 625, 443, 192, 124)
    GUISetOnEvent($GUI_EVENT_CLOSE,"_Exit")
    $Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 72, 360, 193, 17)
    If $check = "-1" Then GUICtrlSetState($Checkbox1,$GUI_CHECKED)
    Else GUICtrlSetState($Checkbox1,$GUI_UNCHECKED)
    EndIf $Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 72, 128, 337, 81)
    GUICtrlSetOnEvent(-1,"_Save")
    GUISetState(@SW_SHOW)
    EndFunc
    While 1
    Sleep(100)
    WEnd
    Func _Save()
    $rCheck1 = GUICtrlRead($Checkbox1) ; hier zeigt Compiler nen Fehler
    If $rCheck1 = $GUI_CHECKED Then
    IniWrite(@ScriptDir & "\settings1.ini","saver","c","-1")
    Else
    IniWrite(@ScriptDir & "\settings1.ini","saver","c","0")
    EndIf
    EndFunc
    Func _Exit()
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]
  • Nachdem du die GUI in eine Funktion gepackt hast, hast du automatisch die Variable $Checkbox1 Lokal definiert.
    Wenn du sie Global definierst, dann funktionierts auch wieder ;)

    Außerdem hast du vergessen die Funktion _function() aufzurufen! :huh: Also wird die GUI erst gar nicht erzeugt!


    Hier mal meine Variante zum Checkboxen speichern,
    vielleicht für einen Anfänger ein bisschen kompliziert, aber kannst ja mal reinschauen:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <Array.au3>

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

    Opt("MustDeclareVars", 1)
    Opt("GUIOnEventMode",1)

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

    Global $S_FILENAME_INI = @ScriptDir & "\settings.ini", _
    $S_SECTION = "Checkbox Status", _
    $A_CHECKBOX_STATUS = IniReadSection($S_FILENAME_INI, $S_SECTION), _
    $A_CHECKBOX_ID[1] = [0]

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

    _Main()

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

    Func _Main()
    __CreateGUI()
    While 1
    Sleep(100)
    WEnd
    EndFunc

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

    Func __CreateGUI()
    Local $h_gui = 0, _
    $x_Checkbox = 10, _
    $y_Checkbox = 10, _
    $i_id = 0
    $h_gui = GUICreate("Titel", 300, 220, 192, 124)
    GUISetOnEvent($GUI_EVENT_CLOSE, "__Exit")
    GUICtrlCreateLabel("Um die Einstellungen zu speichern," & @CRLF & "einfach das Programm schließen", 120, 100)
    For $i = 1 To 10
    $i_id = GUICtrlCreateCheckbox("Checkbox " & $i, $x_Checkbox, $y_Checkbox)
    _ArrayAdd($A_CHECKBOX_ID, $i_id)
    $A_CHECKBOX_ID[0] += 1
    $y_Checkbox += 20
    Next
    If IsArray($A_CHECKBOX_STATUS) Then
    For $i = 1 To ($A_CHECKBOX_STATUS[0][0])
    If $A_CHECKBOX_STATUS[$i][1] = "1" Then GUICtrlSetState($A_CHECKBOX_ID[$A_CHECKBOX_STATUS[$i][0]], $GUI_CHECKED)
    Next
    EndIf
    GUISetState(@SW_SHOW)
    EndFunc

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

    Func __Save()
    Local $i_status = 0
    For $i = 1 To $A_CHECKBOX_ID[0]
    $i_status = GUICtrlRead($A_CHECKBOX_ID[$i])
    If NOT ($i_status = $GUI_CHECKED) Then $i_status = 0
    IniWrite($S_FILENAME_INI, $S_SECTION, $i, $i_status)
    Next
    EndFunc

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

    Func __Exit()
    __Save()
    Exit
    EndFunc

    [/autoit]
  • Hab jetzt ein neues Problem ,wenn ich jetzt speichere Checkbox2 = "an "dann neustarte , steht da natürlich Checkbox2 ist an und Checkbox1 ist aus wenn ich aber jetzt Checkbox1 unangekreutzt lasse und Checkbox2 angekruetzt soll er ja nicht speichern !!Aber wenn ich dann nochmal neustarte ist Checkbox2 angekreutzt vom ersten speichern ,also muss ich wenn die Checkbox1 (zum speichern) nicht angekreutzt ist die .ini überschreiben ,aber ich weis nicht wie ich das anstelle!!
    Aber das hier funkt garnicht

    [autoit]

    #RequireAdmin
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Global $check = IniRead("settings1.ini", "saver", "c", "0")
    Opt("GUIOnEventMode",1)

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

    $Form1 = GUICreate("Form1", 625, 443, 192, 124)
    GUISetOnEvent($GUI_EVENT_CLOSE,"_Exit")
    $Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 72, 360, 193, 17)
    If $check = "1" Then
    GUICtrlSetState($Checkbox2,$GUI_CHECKED)
    Else
    GUICtrlSetState($Checkbox2,$GUI_UNCHECKED)
    EndIf
    $Checkbox1 = GUICtrlCreateCheckbox("Speichern", 72, 128, 337, 81)
    GUICtrlSetOnEvent(-1,"_Save")
    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Save()
    $rCheck2 = GUICtrlRead($Checkbox2)
    If $rCheck2 = $GUI_CHECKED Then
    IniWrite("settings1.ini","saver","c","1")
    Else
    IniWrite("settings1.ini","saver","c","0")
    EndIf
    EndFunc

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

    Func _Exit()
    ;habe jetzt mal hier rein gemacht
    If $Checkbox1 = $GUI_UNCHECKED Then
    iniwrite("settings1.ini","saver","c","0")
    Else
    MsgBox(0,"3","Fehler")
    EndIf
    Exit
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von WOnder (31. Oktober 2010 um 12:52)

  • Hab jetzt ein neues Problem ,wenn ich jetzt speichere Checkbox2 = "an "dann neustarte , steht da natürlich Checkbox2 ist an und Checkbox1 ist aus wenn ich aber jetzt Checkbox1 unangekreutzt lasse und Checkbox2 angekruetzt soll er ja nicht speichern !!Aber wenn ich dann nochmal neustarte ist Checkbox2 angekreutzt vom ersten speichern ,also muss ich wenn die Checkbox1 (zum speichern) nicht angekreutzt ist die .ini überschreiben ,aber ich weis nicht wie ich das anstelle!!

    Hääää?!
    Habs jetzt ein paar mal gelesen und nix verstanden!
    :pinch:

    • Offizieller Beitrag

    Du mußt jede Änderung speichern. Hier mal ein Bsp. wie du es nutzen kannst:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    OnAutoItExitRegister('_WriteToIni') ; Beim Beenden des Programms wird autmatisch der CB-Status in die INI geschrieben

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

    Global $INI = @ScriptDir & '\test_CB.ini'
    If Not FileExists($INI) Then ; bei erstem Start Erstellen der INI, vorbelegt UNCHECKED
    IniWriteSection($INI, 'checkboxes', '1=0' & @LF & '2=0' & @LF & '3=0' & @LF & '4=0')
    EndIf

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

    Local $gui, $aCB[4], $y = 10
    Local $aState = IniReadSection($INI, 'checkboxes') ; Status der Checkboxen einlesen

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

    $gui = GUICreate('Test')
    For $i = 0 To 3
    $aCB[$i] = GUICtrlCreateCheckbox('CheckBox ' & $i+1, 10, $y, 80)
    If $aState[$i+1][1] = 1 Then
    GUICtrlSetState($aCB[$i], $GUI_CHECKED)
    Else
    GUICtrlSetState($aCB[$i], $GUI_UNCHECKED)
    EndIf
    $y += 25
    Next

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

    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    If $msg = -3 Then Exit
    For $i = 0 To UBound($aCB) -1 ; wenn CB geklickt wird, wird der Status im Array Status geändert
    If $msg = $aCB[$i] Then
    If BitAND(GUICtrlRead($aCB[$i]), $GUI_CHECKED) Then
    $aState[$i+1][1] = 1
    Else
    $aState[$i+1][1] = 0
    EndIf
    ExitLoop
    EndIf
    Next
    WEnd

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

    Func _WriteToIni() ; beim Beenden von AutoIt Zurückschreiben Status
    IniWriteSection($INI, 'checkboxes', $aState)
    EndFunc

    [/autoit]