Letztes Problem für heute. ^^

  • Hallo,
    hier mein Skript:

    Spoiler anzeigen
    [autoit]

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

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

    #Region Variablen
    Dim $Field[49][49]; Array mit 50x50 Feldern. (0 wird mitgezählt)
    $CountLeft = 5
    $CountTop = 5
    #Region Variablen

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 745, 765, -1, -1)
    $MenuDatei = GUICtrlCreateMenu("Datei")
    $MenuStart = GUICtrlCreateMenuItem("Start", $MenuDatei)
    $MenuEnde = GUICtrlCreateMenuItem("Ende", $MenuDatei)
    $MenuEinstellungen = GUICtrlCreateMenu("Einstellungen")
    ButtonCreate() ; Eigene Funktion die die Button erstellt (siehe unten)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Field[$i][$h]
    GUICtrlSetBkColor(-1, 0xff0000)

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

    EndSwitch
    WEnd

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

    Func ButtonCreate()
    For $i=0 to UBound($Field)-1
    For $h=0 to UBound($Field)-1
    $Field[$i][$h] = GUICtrlCreateButton("", $CountLeft, $CountTop, 15, 15)
    $CountLeft = $CountLeft+15
    Next
    $CountTop = $CountTop+15
    $CountLeft = 5
    Next
    EndFunc

    [/autoit]

    Und zwar möchte ich abfragen ob einer der Buttons gedrückt wurde !
    Mit einer For Next Schleife mit nem Case drin funktioniert nicht.

    Ich kann doch jetzt nicht die 2500 Buttons selbst da reiin schreiben :thumbup:

  • Spoiler anzeigen
    [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    For $i = 0 To UBound($Field) - 1
    For $h = 0 To UBound($Field) - 1
    If $nMsg = $Field[$i][$h] Then
    MsgBox(262144, "", "Button[" & $i & "][" & $h & "]")
    GUICtrlSetBkColor($Field[$i][$h], 0xff0000)
    EndIf
    Next
    Next
    WEnd

    [/autoit]
    • Offizieller Beitrag

    In deinem Script werden keien 50*50 Buttons erstellt sondern nur 49*49 also nur 2401 :thumbup:

    Spoiler anzeigen
    [autoit]

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

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

    #Region Variablen
    Dim $Field[49][49]; Array mit 50x50 Feldern. (0 wird mitgezählt)
    $CountLeft = 5
    $CountTop = 5
    #Region Variablen

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 745, 765, -1, -1)
    $MenuDatei = GUICtrlCreateMenu("Datei")
    $MenuStart = GUICtrlCreateMenuItem("Start", $MenuDatei)
    $MenuEnde = GUICtrlCreateMenuItem("Ende", $MenuDatei)
    $MenuEinstellungen = GUICtrlCreateMenu("Einstellungen")
    ButtonCreate() ; Eigene Funktion die die Button erstellt (siehe unten)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Field[0][0] to $Field[48][48]
    Local $Auswahl = $nMsg - $Field[0][0] +1
    GUICtrlSetBkColor(-1, 0xff0000)
    MsgBox(0,"Auswahl","Es wurde Button "&$Auswahl&" gedrückt")
    EndSwitch
    WEnd

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

    Func ButtonCreate()
    For $i=0 to UBound($Field)-1
    For $h=0 to UBound($Field)-1
    $Field[$i][$h] = GUICtrlCreateButton("", $CountLeft, $CountTop, 15, 15)
    $CountLeft = $CountLeft+15
    Next
    $CountTop = $CountTop+15
    $CountLeft = 5
    Next
    EndFunc

    [/autoit]
  • Ein Array beginnt doch bei 0 ?
    Also ist doch ein Array von 49 Stellen insgesamt 50 Elemente lang :?:

  • die Null wird bei den 49 mitgezählt 0-48 = 49 also mach einfach 50 draus

    [autoit]

    Opt("GUIOnEventMode", 1)

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

    #Region Variablen
    Dim $Field[50][50]; Array mit 50x50 Feldern. (0 wird mitgezählt)
    $CountLeft = 5
    $CountTop = 5
    #Region Variablen

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 760, 780)
    GUISetOnEvent(-3, "_Exit")
    $MenuDatei = GUICtrlCreateMenu("Datei")
    $MenuStart = GUICtrlCreateMenuItem("Start", $MenuDatei)
    $MenuEnde = GUICtrlCreateMenuItem("Ende", $MenuDatei)
    $MenuEinstellungen = GUICtrlCreateMenu("Einstellungen")
    ButtonCreate()
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1 * Sleep(10)
    WEnd

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

    Func ButtonCreate()
    For $i = 0 To UBound($Field) - 1
    For $h = 0 To UBound($Field) - 1
    $Field[$i][$h] = GUICtrlCreateButton("", 5 + $h * 15, 5 + $i * 15, 15, 15)
    GUICtrlSetOnEvent(-1, "Button")
    Next
    Next
    EndFunc ;==>ButtonCreate

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

    Func Button()
    GUICtrlSetBkColor(-1, 0xff0000)
    EndFunc ;==>Button

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

    Func _exit()
    Exit
    EndFunc ;==>_Exit

    [/autoit]

    Einmal editiert, zuletzt von Smincke (24. November 2010 um 20:35)

  • Ich stimme zu NORMALERWEISE sind Arrays 0 Basierend, aber beim Deklarieren gibt man die Anzahl an^^ und die ist 1Basierend

  • Man lernt immer dazu! Danke
    :thumbup:

    [autoit]

    Case $Field[0][0] to $Field[48][48]
    GUICtrlSetBkColor(-1, 0xff0000)

    [/autoit]

    Sehr gut, die Case .. to - Methode kannte ich bis dato auch noch nicht.
    Nur wird leider der letzte Button eingefärbt !
    Egal welchen ich drücke.
    Kann ich auch dieser Case Abfrage heraus, den "Rückgabewert" erhalten, der mir sagt, welcher Button geklickt wurde, damit ich genau den einfärben kann?

  • Schau dir mal @GUI_CtrlId an, das liefert die Ctrl-Id des zuletzt geklickten Elementes.

    Die Makroreferenz der Hilfe ist wirklich verdammt nützlich (sind viele Dinge dabei)! :thumbup:

  • Spoiler anzeigen
    [autoit]

    #Region Variablen
    Dim $Field[50][50]; Array mit 50x50 Feldern. (0 wird mitgezählt)
    $CountLeft = 5
    $CountTop = 5
    #Region Variablen

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 760, 780)
    $MenuDatei = GUICtrlCreateMenu("Datei")
    $MenuStart = GUICtrlCreateMenuItem("Start", $MenuDatei)
    $MenuEnde = GUICtrlCreateMenuItem("Ende", $MenuDatei)
    $MenuEinstellungen = GUICtrlCreateMenu("Einstellungen")
    ButtonCreate()
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1 * Sleep(10)
    $Msg = GUIGetMsg()
    If $Msg = -3 Then Exit
    For $i = 0 To UBound($Field) - 1
    For $h = 0 To UBound($Field) - 1
    If $Msg = $Field[$i][$h] Then GUICtrlSetBkColor($Field[$i][$h], 0xff0000)
    Next
    Next
    WEnd

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

    Func ButtonCreate()
    For $i = 0 To UBound($Field) - 1
    For $h = 0 To UBound($Field) - 1
    $Field[$i][$h] = GUICtrlCreateButton("", 5 + $h * 15, 5 + $i * 15, 15, 15)
    Next
    Next
    EndFunc ;==>ButtonCreate

    [/autoit]


    Besser:

    Spoiler anzeigen
    [autoit]

    #Region Variablen
    Dim $Field[50][50]
    #Region Variablen

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 760, 780, -1, -1)
    $MenuDatei = GUICtrlCreateMenu("Datei")
    $MenuStart = GUICtrlCreateMenuItem("Start", $MenuDatei)
    $MenuEnde = GUICtrlCreateMenuItem("Ende", $MenuDatei)
    $MenuEinstellungen = GUICtrlCreateMenu("Einstellungen")
    ButtonCreate()
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    Case $Field[0][0] To $Field[49][49]
    Local $Auswahl = $nMsg - $Field[0][0] + 1
    GUICtrlSetBkColor($Field[Floor(($Auswahl - 0.02) / 50)][Mod($Auswahl - 1, 50)], 0xff0000)
    EndSwitch
    WEnd

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

    Func ButtonCreate()
    For $i = 0 To UBound($Field) - 1
    For $h = 0 To UBound($Field) - 1
    $Field[$i][$h] = GUICtrlCreateButton("", 5 + $h * 15, 5 + $i * 15, 15, 15)
    Next
    Next
    EndFunc ;==>ButtonCreate

    [/autoit]

    PS: Raupi du bist super ;)
    PS²: Wozu das eig? GDI+ ist dafür besser(aussehen) in den Meisten Fällen

    4 Mal editiert, zuletzt von Smincke (24. November 2010 um 21:03)

  • @MatthiasG. leider programmieren nicht alle im OnEvent-Mode (denn nur dort ist das Makro verfügbar

    @PokerFace, wenn du es so machst

    [autoit]

    Case $Field[0][0] to $Field[49][49] ; auf 49 erhöhen damit auch wirklich alle Buttons fnktionieren
    GUICtrlSetBkColor($Msg, 0xff0000)

    [/autoit]

    klappt es da $Msg ja der ControlId entspricht,

    mfg autoBert