Farbe von Button ermitteln

  • Hallo,
    ich habe eine GUI mit mehreren Buttons.
    Durch einen Mausklick verändert sich die Farbe auf rot.
    Um damit weiterzuarbeiten, muss ich jedoch nachher in einer Schleife feststellen können, ob der jeweilige Button rot ist.
    Wie kann ich sowas ermitteln?
    Die Board-Suche half nicht. :(

    PS: Die Buttons sind so deklariert:

    [autoit]

    $Button[$i][$j]=GUICtrlCreateButton($Borderx, $Bordery, 15, 15) ; Also mithilfe eines Arrays erstellt.

    [/autoit]
  • Ist es denn so wichtig das die Farbe überprüft wird? Könntest du nicht auch eine Variable auf 1 setzen wnen es geklickt ist und später gucken ob die Variable 1 (gedrückt) oder 0 (nicht gedrückt) ist.

  • Pixelsearch kenn ich !
    Aber das ist mir zu ungenau.
    Sobald ich ein anderes Fenster vor meiner GUI hab, dann funktioniert das z.B nicht mehr.

    Und zu BadBunny. Das hab ich bereits versucht.
    Aber wenn ich dann die Abfrage für den geklickten Button habe, weiß ich nicht, wie es weitergeht.

    Spoiler anzeigen
    [autoit]

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

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

    #Region Variablen
    Dim $Field[50][50]; Array mit 50x50 Feldern.
    $CountLeft = 5
    $CountTop = 5
    Dim $Status[50][50]
    For $i=0 to UBound($Status)-1
    For $h=0 to UBound($Status)-1
    $Status[$i][$h]=0
    Next
    Next
    #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() ; 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[49][49]
    GUICtrlSetBkColor($nMsg, 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("", $CountLeft, $CountTop, 15, 15)
    $CountLeft = $CountLeft+15
    Next
    $CountTop = $CountTop+15
    $CountLeft = 5
    Next
    EndFunc

    [/autoit]

    Siehe:

    [autoit]

    Case $Field[0][0] to $Field[49][49]
    GUICtrlSetBkColor($nMsg, 0xff0000)

    [/autoit]


    $nMsg gibt mir nur den geklickten Button zurück, aber nicht den Array.
    Denn ich will ja den Array $Status dem Array $Field zuordnen.
    Irgendwie steh ich damit auf dem Schlauch. :D

  • Meisnstr du dashier:

    Spoiler anzeigen
    [autoit]

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

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

    #Region Variablen
    Dim $Field[50][50]; Array mit 50x50 Feldern.
    Dim $Schalter[50][50]
    For $m = 0 to UBound ($Schalter) -1
    For $mhmh = 0 to Ubound ($schalter) -1

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

    $Schalter[$m][$mhmh] = 0
    Next
    Next
    $CountLeft = 5
    $CountTop = 5
    Dim $Status[50][50]
    For $i=0 to UBound($Status)-1
    For $h=0 to UBound($Status)-1
    $Status[$i][$h]=0
    Next
    Next
    #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() ; 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[49][49]
    ;~ GUICtrlSetBkColor($nMsg, 0xff0000)

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

    EndSwitch
    For $u = 0 to Ubound ($Field) -1
    For $kl = 0 to Ubound ($Field) -1
    If $nMsg = $Field[$u][$kl] Then
    $Schalter[$u][$kl] = 1
    GUICtrlSetBkColor ($Field[$u][$kl], 0xFF0000)

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

    EndIf
    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("", $CountLeft, $CountTop, 15, 15)
    $CountLeft = $CountLeft+15
    Next
    $CountTop = $CountTop+15
    $CountLeft = 5
    Next
    EndFunc

    [/autoit]
  • Spoiler anzeigen
    [autoit]


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

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

    #Region Variablen
    Dim $Field[50][50]; Array mit 50x50 Feldern.
    Dim $aActivated[50][50]
    For $i = 0 To 49
    For $z = 0 To 49
    $aActivated[$i][$z] = 0
    Next
    Next

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

    $CountLeft = 5
    $CountTop = 5
    Dim $Status[50][50]
    For $i = 0 To UBound($Status) - 1
    For $h = 0 To UBound($Status) - 1
    $Status[$i][$h] = 0
    Next
    Next
    #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() ; Eigene Funktion die die Button erstellt (siehe unten)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    HotKeySet("{ENTER}", "show")

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Field[0][0] To $Field[49][49]
    GUICtrlSetBkColor($nMsg, 0xff0000)
    For $i = 0 To 49
    For $z = 0 To 49
    If $nMsg = $Field[$i][$z] Then
    $aActivated[$i][$z] = 1
    EndIf
    Next
    Next
    EndSwitch
    WEnd

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

    Func show()
    _ArrayDisplay($aActivated)
    EndFunc ;==>show

    [/autoit] [autoit][/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 ;==>ButtonCreate

    [/autoit]

    Drück dann mal Enter!

    • Offizieller Beitrag

    Hiermit kannst du auch wieder deaktivieren:

    Spoiler anzeigen
    [autoit]

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

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

    #Region Variablen
    Dim $Field[50][50][2]; Array mit 50x50 Feldern.
    $CountLeft = 5
    $CountTop = 5
    #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() ; 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
    EndSwitch
    For $i=0 to UBound($Field)-1
    For $h=0 to UBound($Field, 2)-1
    If $nMsg = $Field[$i][$h][0] Then
    $Field[$i][$h][1] = Not $Field[$i][$h][1]
    If $Field[$i][$h][1] Then
    GUICtrlSetBkColor($Field[$i][$h][0], 0xff0000)
    Else
    GUICtrlSetStyle($Field[$i][$h][0], $GUI_SS_DEFAULT_BUTTON)
    EndIf
    ExitLoop(2)
    EndIf
    Next
    Next
    WEnd

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

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

    [/autoit]
  • Hallo,

    die IDs der Buttons werden in ButtonCreate fortlaufend vergeben. Es sollte also reichen, ein eindimensionales Array mit "Feldanzahl = höchste vergebene ID + 1" für die Stati einzurichten. Dieses Array kann dann über die ButtonID in $nMsg direkt angesprochen werden:

    Spoiler anzeigen
    [autoit]

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

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

    #Region Variablen
    Dim $Field[50][50]; Array mit 50x50 Feldern.
    $CountLeft = 5
    $CountTop = 5
    #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() ; Eigene Funktion die die Button erstellt (siehe unten)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    Dim $State[$Field[Ubound($Field, 1) - 1][UBound($Field, 2) - 1] + 1]

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Field[0][0] to $Field[49][49]
    If $State[$nMsg] Then
    GUICtrlSetStyle($nMsg, $GUI_SS_DEFAULT_BUTTON)
    $State[$nMsg] = False
    Else
    GUICtrlSetBkColor($nMsg, 0xff0000)
    $State[$nMsg] = True
    EndIf
    EndSwitch
    WEnd

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

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

    [/autoit]