Checkbox Spezielle Syntax

  • Hallo,

    ich habe folgendes Problem:
    In meinem Code sind Variablen die sich aus Namen zusammensetzen
    Sieht so aus:

    [autoit]


    $language &= "en Englisch|"
    $language &= "fr Französisch|"
    $language &= "es Spanisch|"

    [/autoit]

    Das Problem:
    Ich möchte nun für jede dieser Variablen eine Checkbox machen.
    Eine Checkbox sieht normalerweise so aus:

    [autoit]


    $Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 112, 88, 97, 17)
    ;Das geht ja nicht:
    ;$language &= "en Englisch|" = GUICtrlCreateCheckbox("Checkbox1", 112, 88, 97, 17); hier soll eine checkbox rein

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

    Das Ziel soll sein:
    Wenn die Checkbox ja ist, dann wird angezeigt.

    Hier mal mein kpl. Code

    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiEdit.au3>

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

    Global $language = ''

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

    $Form1 = GUICreate("Form1", 625, 443, 192, 124)
    ;$Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 112, 88, 97, 17)
    $language &= "en Englisch|" ; hier soll eine checkbox rein
    $language &= "fr Französisch|" ; hier soll eine checkbox rein
    $language &= "es Spanisch|" ; hier soll eine checkbox rein

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

    $Button1 = GUICtrlCreateButton("Button1", 96, 160, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)

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

    Global $string = "Das ist ein Test"
    Global $arrayLang = StringSplit($language, "|", 3)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Button1 ; es sollen nur die Einträge mit Checkbox ja angezeigt werden
    For $i = 0 To UBound($arrayLang) - 2
    MsgBox(0,"",$arrayLang[$i])
    next

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

    EndSwitch
    WEnd

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

    Kann man das machen?
    Oder muß ich z.B. 30...Checkboxen machen
    und diese dann per Code abfragen?

    Liebe Grüße
    Ilse ;)

    Einmal editiert, zuletzt von Ilse (11. Juli 2012 um 15:19)

  • So?

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiEdit.au3>
    #include <Array.au3>

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

    Global $language = ''

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

    $Form1 = GUICreate("Form1", 625, 443, 192, 124)
    $language &= "en Englisch|" ; hier soll eine checkbox rein
    $language &= "fr Französisch|" ; hier soll eine checkbox rein
    $language &= "es Spanisch|" ; hier soll eine checkbox rein
    $language &= "ts1 Test1|" ; hier soll eine checkbox rein
    $language &= "ts2 Test2|" ; hier soll eine checkbox rein
    $language &= "ts3 Test3|" ; hier soll eine checkbox rein

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

    $languageSplit = StringSplit($language, "|")

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

    Dim $Checkbox[$languageSplit[0]]
    Dim $CheckboxText[$languageSplit[0]]

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

    For $i = 1 to $languageSplit[0]-1
    $Checkbox[$i] = GUICtrlCreateCheckbox($languageSplit[$i], 112, 20*$i, 97, 17)
    $CheckboxText[$i] = $languageSplit[$i]
    Next

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

    $Button1 = GUICtrlCreateButton("Button1", 96, 160, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)

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

    ;Global $string = "Das ist ein Test"
    ; Global $arrayLang = StringSplit($language, "|", 3)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1 ; es sollen nur die Einträge mit Checkbox ja angezeigt werden
    For $i = 1 to $languageSplit[0]-1
    If BitAND(GUICtrlRead($Checkbox[$i]), $GUI_CHECKED) Then MsgBox(0,0,$CheckboxText[$i])
    Next
    EndSwitch
    Sleep(50)
    WEnd

    [/autoit]
    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

  • Hallo Nathax

    genau so, muß meinen Code noch umbauen.
    Was mir noch Probleme macht:

    Ich habe am Ende ca. 70 Checkboxen
    Du legst diese ja per Code an.

    Wie kann ich das ganze machen daß ich 7 Spalten habe
    mit jeweils 10 Einträgen? Muß ich dann irgendwie 7 Schleifen machen?


    ;) Ilse

  • So müsste es klappen (geht für bis zu 70 Stk.):

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiEdit.au3>
    #include <Array.au3>

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

    Global $language = ''
    $spaltenNr = 0

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

    $Form1 = GUICreate("Form1", 725, 443, 192, 124)
    $language &= "en Englisch|" ; hier soll eine checkbox rein
    $language &= "fr Französisch|" ; hier soll eine checkbox rein
    $language &= "es Spanisch|" ; hier soll eine checkbox rein
    For $i = 1 to 67
    $language &= "ts"&$i&" Test"&$i&"|" ; hier soll eine checkbox rein
    Next

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

    $languageSplit = StringSplit($language, "|")

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

    Dim $Checkbox[$languageSplit[0]]
    Dim $CheckboxText[$languageSplit[0]]

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

    For $i = 1 to $languageSplit[0]-1
    If $i = 11 Or $i = 21 Or $i = 31 Or $i = 41 Or $i = 51 Or $i = 61 Then $spaltenNr += 1
    $Checkbox[$i] = GUICtrlCreateCheckbox($languageSplit[$i], 0+100*$spaltenNr, 20*$i-$SpaltenNr*200, 97, 17)
    $CheckboxText[$i] = $languageSplit[$i]
    Next

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

    $Button1 = GUICtrlCreateButton("Button1", 530, 400, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1 ; es sollen nur die Einträge mit Checkbox ja angezeigt werden
    For $i = 1 to $languageSplit[0]-1
    If BitAND(GUICtrlRead($Checkbox[$i]), $GUI_CHECKED) Then MsgBox(0,0,$CheckboxText[$i])
    Next
    EndSwitch
    Sleep(50)
    WEnd

    [/autoit]

    Edit: Hier noch etwas eleganter. Du kannst die Reihenanzahl vordefinieren, und es gibt keine Spaltenbegrenzung:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiEdit.au3>
    #include <Array.au3>

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

    Global $language = ''
    $spaltenNr = 0
    $reihenAnzahl = 20

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

    $Form1 = GUICreate("Form1", 725, 443, 192, 124)
    $language &= "en Englisch|" ; hier soll eine checkbox rein
    $language &= "fr Französisch|" ; hier soll eine checkbox rein
    $language &= "es Spanisch|" ; hier soll eine checkbox rein
    For $i = 1 to 67
    $language &= "ts"&$i&" Test"&$i&"|" ; hier soll eine checkbox rein
    Next

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

    $languageSplit = StringSplit($language, "|")

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

    Dim $Checkbox[$languageSplit[0]]
    Dim $CheckboxText[$languageSplit[0]]

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

    For $i = 1 to $languageSplit[0]-1
    If $i > 2 Then
    If Mod($i-1, $reihenAnzahl) = 0 Then $spaltenNr += 1
    EndIf
    $Checkbox[$i] = GUICtrlCreateCheckbox($languageSplit[$i], 0+100*$spaltenNr, 20*$i-$SpaltenNr*20*$reihenAnzahl, 97, 17)
    $CheckboxText[$i] = $languageSplit[$i]
    Next

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

    $Button1 = GUICtrlCreateButton("Button1", 530, 400, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1 ; es sollen nur die Einträge mit Checkbox ja angezeigt werden
    For $i = 1 to $languageSplit[0]-1
    If BitAND(GUICtrlRead($Checkbox[$i]), $GUI_CHECKED) Then MsgBox(0,0,$CheckboxText[$i])
    Next
    EndSwitch
    Sleep(50)
    WEnd

    [/autoit]
    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

  • Alles SUPER!

    Vielen vielen Dank!


    Liebe Grüße
    Ilse ;)

    PS. Habe gerade das EDIT gesehen

    Toll...viel viel Arbeit gespart DANK Dir... :thumbup:

    2 Mal editiert, zuletzt von Ilse (11. Juli 2012 um 15:28)