Buttons in Schleife erstellen mit Funktion

  • Hallo Leute,
    Ich hänge mal wieder. Undzwar habe ich folgendes Script Probieren verwendet:

    [autoit]

    #include <GUIConstantsEx.au3>

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

    Global $x = 5, $Number = 0, $y = 5

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

    $Gui = GUICreate("test",1000,490)
    For $i = 1 to 528
    $Number += 1
    If $x >= 990 Then
    $x = 5
    $y += 30
    EndIf
    GUICtrlCreateButton($i, $x , $y,30,30)
    $x += 30
    Next

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

    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Mein Problem:
    Ich möchte den Buttons eine Funktion zuweisen. Habe Probiert die Buttons mit $Button[$i] = GuiCtrlCreateButton(...) zu erstellen, und dann mit Case $Button[$i] ihnen eine Funktion zuzuweisen. Jedoch ging dieses nicht so ganz.

    Nach 40Minuten rumprobieren gebe ich nun auf und bitte um eure Hilfe. Bei nicht-verstehen meines Problemes, bitte schreiben, damit ich es Umformulieren kann.

    Mfg SiLenCa

    Einmal editiert, zuletzt von SiLenCa (21. April 2009 um 17:38)

  • Die Buttons in einer Array zu speichern macht durchaus Sinn.
    Da kannst du aber besser im OnEventMode arbeiten, und jedem
    Button einfach dieselbe Funktion zuweisen.
    In der Funktion kann man dann mit @Ctrl_Id oder so abfragen, welcher
    der Buttons geklickt wurde ;)

    Oder aber im Loop-Mode:
    Case $Button[$i] - funktioniert so einfach nicht.
    Du musst dann schon in einer Schleife prüfen, ob die ControlID mit der
    eines Buttons übereinstimmt. ^^

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • ungefähr so:

    Spoiler anzeigen
    [autoit][/autoit]
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Global $x = 5, $Number = 0, $y = 5

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

    $functions = "Func1,Func2,Func3,Func4,Func5"
    $functions = StringSplit($functions,",")

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

    $Gui = GUICreate("test",1000,490)
    For $i = 1 to 528
    $Number += 1
    If $x >= 990 Then
    $x = 5
    $y += 30
    EndIf
    GUICtrlCreateButton($i, $x , $y,30,30)
    GuiCtrlSetOnEvent(-1, $functions[$i])
    $x += 30
    Next

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

    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • Ach ja ?

    Zitat
    [autoit]

    For $i = 1 to 528

    [/autoit]

    Willst du für jeden Button eine eigene Funktion erstellen ? :rofl:

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • Anscheinend schon ;) Wenn er wirklich bei jedem Button was komplett anderes machen will, wäre meine Methode sogar weniger Schreibaufwand...
    Obwohl deins übersichtlicher bleibt... mir wurscht ich beantworte nur Fragen :pinch:

  • Nicht für jeden eine eigene... Ich möchte, dass jeder Button eine MsgBox mit seiner Nummer auswirft. Und vielleicht, Dass man Einzelnen Buttons eine Eigene Funktion zuweisen kann.

  • Jupp dann halte dich an limettes Methode! Und mach das ganze mit >@GUI_CtrlID< und Case..

    Edit: Mal als kleines Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    Opt("GuiOnEventMode",1)
    Global $x = 5, $y = 5

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

    $Gui = GUICreate("test",1000,490)
    For $i = 1 to 528
    If $x >= 990 Then
    $x = 5
    $y += 30
    EndIf
    GUICtrlCreateButton($i, $x , $y,30,30)
    GuiCtrlSetOnEvent(-1, "_func")
    $x += 30
    Next
    GUISetState()

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

    While 1
    sleep(100)
    WEnd

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

    Func _func()
    Switch @GUI_CtrlId
    Case 68;-> 66
    Beep()
    Case Else
    MsgBox(0,"",@Gui_CtrlID-2)
    EndSwitch
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von ChaosKeks (21. April 2009 um 17:32)