Problem mit $GUI_UNCHECKED

  • Tach zam
    Wie der titel schon sagt, hab ich ein Problem das $GUI_UNCHECKED nicht funktioniert.
    Zumindest, sieht es so aus.

    Spoiler anzeigen
    [autoit]


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

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

    ;========Checkbox Names _SpezOpt=========
    Global $Checkbox[14]
    Global $CheckNames[14] = ['RAR', 'Zip', 'CAB', 'ARJ', 'LZH', 'ACE', '7-Zip', 'Tar', 'GZip', 'UUE', 'BZ2', 'JAR', 'ISO', 'Z']
    Global $CheckFunk[14] = ['_RAR', '_ZIP', '_CAB', '_ARJ', '_LZH', '_ACE', '_7ZIP', '_TAR', '_GZIP', '_UUE', '_BZ2', '_JAR', '_ISO', '_Z']
    Global $Left[14] = [16, 72, 128, 184, 240, 296, 352, 408, 464, 520, 16, 72, 128, 184]
    Global $Top[14] = [352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 376, 376, 376, 376]
    ;RAR ZIP CAB ARJ LZH ACE 7ZIP TAR GZIP UUE BZ2 JAR ISO Z
    ;========================================

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

    $gui = GUICreate('Form1', 610, 434, 192, 124)
    GUICtrlCreateGroup('Group1', 8, 8, 593, 417)
    $button = GUICtrlCreateButton('Save', 50, 330, 30, 20)
    GUISetState(@SW_SHOW)

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

    For $Ci = 0 To UBound($CheckNames) - 1
    $Checkbox[$Ci] = GUICtrlCreateCheckbox($CheckNames[$Ci], $Left[$Ci], $Top[$Ci], 49, 17)
    Next

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button
    For $i = 0 To 13
    If BitAND(GUICtrlRead($Checkbox[$i]), $GUI_CHECKED) Then Call(_Save())
    Next

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

    EndSwitch
    WEnd

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

    Func _Save()
    If BitAND(GUICtrlRead($Checkbox[$i]), $GUI_CHECKED) = $GUI_CHECKED Then
    MsgBox(0,'','Ja')
    IniWrite('Spez-Option.ini', 'WinRAR', $CheckNames[$i], 'Ja')
    EndIf
    If BitAND(GUICtrlRead($Checkbox[$i]), $GUI_UNCHECKED) = $GUI_UNCHECKED Then
    MsgBox(0,'','Nein')
    IniWrite('Spez-Option.ini', 'WinRAR', $CheckNames[$i], 'Nein')
    EndIf
    EndFunc

    [/autoit]


    Dieses Script erstellt via Array 14 CheckBoxen, am ende möchte ich den Status der Checkboxen in einer .ini gespeichert haben.
    Genau da ist dass Problem, die Checkboxen die "Gechecked" sind, funktionieren, werden auch in die ini Gespeichert, aber er schreibt die UNCHECKED nicht mit.
    Wo Liegt der Denkfehler?

    (Zum Script, dies ist eine Vor variante, wird noch in ein Anderes Script eingebaut)

    Greez

    3 Mal editiert, zuletzt von Skilkor (2. September 2012 um 15:53)

    • Offizieller Beitrag

    Du verwendest in der Func _Save() die Variable $i, obwohl diese dort nicht definiert ist.
    In deiner While-Schleife hast du For $i = 0 To 13, das $i ist aber eine lokale Variable innerhalb der For-Schleife.
    Ausserdem fragst du einmal nach CHECKED und anschließend extra nach UNCHECKED - das ist natürlich überflüssig, denn wenn CHECKED nicht zutrifft, kann es ja nur UNCHECKED sein, also einfach einen ELSE-Zweig verwenden. ;)

  • Ach die gute vergessen For Schleife Q_Q

    Danke BugFix habe es nun wie folgt umgeändert und funktioniert Wunderbar :D

    [autoit]


    Func _Save()
    For $i = 0 to 13
    If BitAND(GUICtrlRead($Checkbox[$i]), $GUI_CHECKED) = $GUI_CHECKED Then
    IniWrite('Spez-Option.ini', 'WinRAR', $CheckNames[$i], 'Ja')
    Else
    IniWrite('Spez-Option.ini','WinRAR', $CheckNames[$i], 'Nein')
    EndIf
    Next
    EndFunc

    [/autoit]

    Greez

  • Hallo, ich habs mal angepasst. ;)

    Spoiler anzeigen
    [autoit]


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

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

    ;========Checkbox Names _SpezOpt=========
    Global $Checkbox[14]
    Global $CheckNames[14] = ['RAR', 'Zip', 'CAB', 'ARJ', 'LZH', 'ACE', '7-Zip', 'Tar', 'GZip', 'UUE', 'BZ2', 'JAR', 'ISO', 'Z']
    Global $CheckFunk[14] = ['_RAR', '_ZIP', '_CAB', '_ARJ', '_LZH', '_ACE', '_7ZIP', '_TAR', '_GZIP', '_UUE', '_BZ2', '_JAR', '_ISO', '_Z']

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

    Global $ini = @ScriptDir & '\Spez-Option.ini'

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

    ;RAR ZIP CAB ARJ LZH ACE 7ZIP TAR GZIP UUE BZ2 JAR ISO Z
    ;========================================

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

    $gui = GUICreate('Form1', 610, 434, 192, 124)
    GUICtrlCreateGroup('Group1', 8, 8, 593, 417)
    $button = GUICtrlCreateButton('Save', 30, 320, 40, 22)
    For $Ci = 0 To 13
    $Checkbox[$Ci] = GUICtrlCreateCheckbox($CheckNames[$Ci], 30 + Mod($Ci, 10) * 55, 350 + Int($Ci / 10) * 24, 49, 17)
    Next
    GUICtrlCreateGroup("", -99, -99, 1, 1) ;close group

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $button
    For $i = 0 To 13
    If BitAND(GUICtrlRead($Checkbox[$i]), $GUI_CHECKED) Then Call _Save()
    Next
    EndSwitch
    WEnd

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

    Func _Save()
    For $i = 0 To 13
    If BitAND(GUICtrlRead($Checkbox[$i]), $GUI_CHECKED) Then
    IniWrite($ini, 'WinRAR', $CheckNames[$i], 'Ja')
    Else
    IniWrite($ini, 'WinRAR', $CheckNames[$i], 'Nein')
    EndIf
    Next
    EndFunc ;==>_Save
    ; Ende

    [/autoit]
    • Offizieller Beitrag

    RR04, dein Beispiel ruft im ungünstigsten Fall (wenn alle Checkboxen gecheckt sind) 14 mal die Funktion _Save auf.
    Die würde bedeuten das 14 * 14 = 196 IniWrite Operationen ausgeführt werden. Nicht sehr effektiv, wenn es nur 14 Checkboxen gibt.
    Zeilen 32-34

    [autoit]

    For $i = 0 To 13
    If BitAND(GUICtrlRead($Checkbox[$i]), $GUI_CHECKED) Then Call(_Save())
    Next

    [/autoit]


    einfach durch

    [autoit]

    _Save()

    [/autoit]


    ersetzen. ;)