Hilfe bei Switch oder OnEvent

  • Hallo zusammen,

    Ich stehe vor einem großen Problem... Und zwar möchte ich eine GUI machen mit sehr vielen Bildern... Guckt euch den Code einmal an...

    [autoit]

    Global $Count = 0
    Global $Pic[33]
    Global $X = 0
    Global $Y = 0

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

    GUICreate("Form",128,128,0,0)

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

    While 1
    $Count = $Count +1

    $Pic[$Count] = GUICtrlCreatePic(@ScriptDir & "\Pic.bmp",$X,$Y,8,8)

    $X = $X +8
    If $X >= 32 Then
    $X = 0
    $Y = $Y +8
    EndIf

    If $Count = 32 Then ExitLoop
    WEnd

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

    GUISetState()

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

    While 1
    Sleep(100)
    WEnd

    [/autoit]

    Nun möchte ich jedem Bild eine Funktion hinzufügen...

    Wie zB. Hier...

    [autoit]

    Func Pic1()
    GUICtrlSetImage($Pic[0],@ScriptDir & "Pic2.bmp")
    EndFunc

    [/autoit]

    usw.

    aber für jedes Bild so eine Funktion zu machen ist viel zu viel oO

    ich habs mal so versucht...

    [autoit]


    $Msg = GUIGetMsg()
    Switch $Msg
    While 1
    $Count = $Count +1
    Case $Pic[$Count]
    GUICtrlSetImage($Pic[$Count],@ScriptDir & "Pic2.bmp")
    WEnd
    EndSwitch

    [/autoit]

    wie könnte man es so machen, das ich die funktionen alle per while schleife "erzeuge"?

    • Offizieller Beitrag

    Wenn man vorher schon weiß, wie viele Schleifendurchläufe man benötigt, dann sollte man For...Next nehmen. Ist schneller, übersichtlicher und man hat gleich eine Zählvariable.
    Hier würde ich außerdem den OnEvent-Mode nehmen:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    Opt('GUIOnEventMode', 1)

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

    $hGui = GUICreate('', 128, 128)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')

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

    Global $aPic[32]

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

    For $i = 0 To 31
    $aPic[$i] = GUICtrlCreatePic(@ScriptDir & '\Pic.bmp', Mod($i,4)*8, Int($i/4)*8, 8, 8)
    GUICtrlSetOnEvent(-1, '_Klick')
    Next

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

    GUISetState()

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

    While True
    Sleep(100)
    WEnd

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

    Func _End()
    Exit
    EndFunc ;==>_End

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

    Func _Klick()
    Local $ID = @GUI_CtrlId-$aPic[0]
    GUICtrlSetImage($aPic[$ID], @ScriptDir & '\Pic2.bmp')
    EndFunc

    [/autoit]
  • Vielen dank für die schnelle Antwort und die Sache mit der For Schleife! Werd meinen Code jetzt mal umstrukturieren...

    MfG