Ausgewählte Checkboxen aus einer INI auslesen

  • Servus Leute,

    kann mir bitte jemand ein Tip geben?

    Habe da eine kleine GUI, mehrere Checkboxen werden aus der INI durch eine For Schleife erstellt.

    Wie kann ich die ausgewählten Checkboxen auslesen?

    Vielen Dank im Voraus

    Gruß
    redbull80

    INI Datei

    Spoiler anzeigen

    [Farben]
    1=blau
    2=gelb
    3=rot

    Autoit Code

    Spoiler anzeigen
    [autoit]

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

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

    Global $Ini = @ScriptDir & "/test.ini"
    Global $Key = IniReadSection($Ini, "Farben")

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

    New()
    Func New()
    $GUI2 = GUICreate("Farben", 150, 300)
    $y = -10
    $g = 0
    For $i = 1 To $Key[0][0]
    ConsoleWrite($Key[$i][1] & @CRLF)
    $y = $y + 20 ; Abstand zwischen den Zeilen
    $g = $g + 1 ; nächste Zeile
    $h = GUICtrlCreateCheckbox($Key[$g][1], 15, $y)
    Next

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

    $ButtonOK = GUICtrlCreateButton("OK", 20, 270)
    $ButtonAbbrechen = GUICtrlCreateButton("Abbrechen", 70, 270)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nmsg = GUIGetMsg()
    Switch $nmsg
    Case $ButtonOK
    GUICtrlRead($h, $GUI_CHECKED)
    MsgBox(0, "Ausgewählt", $h)
    Case $ButtonAbbrechen
    GUIDelete($GUI2)
    ExitLoop
    Case $GUI_EVENT_CLOSE
    GUIDelete($GUI2)
    ExitLoop
    EndSwitch
    WEnd

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

    EndFunc ;==>New

    [/autoit]

    Einmal editiert, zuletzt von redbull80 (8. Oktober 2012 um 14:53)

  • So?

    Spoiler anzeigen
    [autoit]

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

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

    Global $sIni = @ScriptDir & "/test.ini"
    Global $aIni = IniReadSection($sIni, "Farben")

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

    New()
    Func New()
    Local $GUI2 = GUICreate("Farben", 150, 300)
    Local $acCheck[$aIni[0][0]]
    For $i = 1 To $aIni[0][0]
    ConsoleWrite($aIni[$i][1] & @CRLF)
    $acCheck[$i - 1] = GUICtrlCreateCheckbox($aIni[$i][1], 15, 10 + (($i - 1) * 20))
    Next
    Local $ButtonOK = GUICtrlCreateButton("OK", 20, 270)
    Local $ButtonAbbrechen = GUICtrlCreateButton("Abbrechen", 70, 270)
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $ButtonAbbrechen
    GUIDelete($GUI2)
    ExitLoop
    Case $ButtonOK
    For $i = 0 to UBound($acCheck) - 1
    If BitAND(GUICtrlRead($acCheck[$i]), $GUI_CHECKED) Then MsgBox(0, "Ausgewählt", GUICtrlRead($acCheck[$i], 1))
    Next
    EndSwitch
    WEnd
    EndFunc ;==>New

    [/autoit]

    Einmal editiert, zuletzt von m-obi (6. Oktober 2012 um 16:58)

  • @m-obi
    Vielen Dank für die rasche Antwort. So funktioniert es. Das hätte ich nicht hinbekommen. zu kompliziert :)

    Nun kann ich weiter machen.

    Gruß
    redbull80

    3 Mal editiert, zuletzt von redbull80 (6. Oktober 2012 um 18:17)

  • Wie kann ich das Ergebnis nun in ein Input Feld eintragen lassen ?

    Wenn ich GuiCtrlSetData ($input1, GUICtrlRead($acCheck[$i], 1)) angebe dann wird immer nur die letzte ausgewählte Checkbox eingetragen aber nicht alle!

  • entweder:

    [autoit]


    GUICtrlSetData($input1, "")
    For $i = 0 to UBound($acCheck) - 1
    If BitAND(GUICtrlRead($acCheck[$i]), $GUI_CHECKED) Then GUICtrlSetData($input1, GUICtrlRead($acCheck[$i], 1)&", ", 1)
    Next

    [/autoit]


    (Damit wird erst das Inputfeld geleert und dann wird der Name der Checkboxen eingetragen, die ausgewählt sind)

    oder (was ich bevorzugen würde):

    [autoit]


    $sAusgewaehlt = ""
    For $i = 0 to UBound($acCheck) - 1
    If BitAND(GUICtrlRead($acCheck[$i]), $GUI_CHECKED) Then $sAusgewaehlt &= GUICtrlRead($acCheck[$i], 1) & ", "
    Next
    GUICtrlSetData($input1, StringTrimRight($sAusgewaehlt, 2))

    [/autoit]


    Hier wird erst eine leere Variable erstellt, dann wird bei jeder ausgewählten Checkbox der Name ans Ende von $sAusgewaehlt angehängt und am Ende wird das ganze dann in den Input geschrieben. Das "StringTrimRight" ist dafür, dass die letzten beiden Zeichen (", ") abgeschnitten werden, damit sie nicht mit in den Input geschrieben werden.

  • Guten Tag,

    würde das Thema nochmals kurz aufgreifen (bitte verzeiht mir die Leichenschändung...) :

    Hintergrund:
    Möchte mir einen Checkbox-Installer basteln & habe den o.g. Quellcode nun angepasst:

    Spoiler anzeigen

    In meiner settings.ini steht folgendes drinnen:

    Spoiler anzeigen
    Code
    [PROGS]
    Adobe Reader 10="\\Server\Freigabe\Install-Ordner\AdbeRdr1014_de_DE.exe"
    Adobe Reader 11="\\Server\Freigabe\Install-Ordner\AdbeRdr11_de_DE.exe"
    usw.

    Man kann die Programme entsprechend auswählen & die Installation startet an.
    ABER : statt der Bezeichnung, wird der Pfad in der Checkbox-Auswahl angezeigt. Hätte gerne den Namen der Installation.
    (statt : \\Server\Freigabe\Install-Ordner\AdbeRdr1014_de_DE.exe
    soll Adobe Reader 10 angezeigt werden.

    Ändert man die Zeile #17 von

    Spoiler anzeigen
    Code
    $acCheck[$i - 1] = GUICtrlCreateCheckbox($aIni[$i][1], 15, 10 + (($i - 1) * 20))


    nach

    Spoiler anzeigen
    Code
    $acCheck[$i - 1] = GUICtrlCreateCheckbox($aIni[$i][0], 15, 10 + (($i - 1) * 20))


    ab, so wird der Name angezeigt. Dieser wird aber auch in Zeile #34 übernommen. Sprich die Installation startet nicht mehr, da er statt dem Pfad nun den Namen der Installation hat.

    Bin leider gerade blind. Wie muß ich es ändern, daß in der Checkbox der Name der Installation ausgewählt werden kann & dann der Pfad der Installationsdateien gestartet wird...

  • Man kann auch ein neues Thema aufmachen und darin auf das alte verlinken, das hält alles übersichtlicher ;)

    in Zeile 34 musst du dann natürlich auch auf den jeweiligen Pfad zugreifen.
    Am einfachsten so:

    [autoit]

    ShellExecuteWait($aIni[$i+1][1], 1)

    [/autoit]