Buttons farblich kennzeichnen

  • mal eine Frage zu Buttons!
    Das Problem:
    1. Meine Gui hat mehrere Buttons
    2. Diese Buttons muß ich farblich kennzeichnen.

    Also ich habe z.B. 10 Buttons
    Kann ich, wenn man z.B. auf 4 verschiedene Buttons klickt diese farblich kennzeichnen?

    So daß man sieht welche Buttons man angeklickt hat und welche noch nicht?

  • Ja, mit GUICtrlSetBkColor().
    Hier mal auf die schnelle zusammengewürfelt:

    [autoit]

    $hGUI = GUICreate("")
    $cDummy1 = GUICtrlCreateDummy()
    For $i = 0 To 10
    GUICtrlCreateButton("Button " & $i + 1, 20, 20 + $i * 25, 200, 20)
    Next
    $cDummy2 = GUICtrlCreateDummy()

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

    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    Case $cDummy1 To $cDummy2
    GUICtrlSetBkColor($nMsg, 0x33FF33)
    EndSwitch
    WEnd

    [/autoit]
  • Hallo SEuBo,

    danke für deine Hilfe.
    Mal noch eine Frage:
    Du kennst sicher Umschaltflächen.
    Wenn man klickt bleibt die Schaltfläche gedrückt
    und wenn man nochmal klickt ist der urzustand wieder da.

    Also Schaltfläche AN/AUS
    Kann man so etwas mit autoit auch machen?


    Ich habe auch etwas probiert (Aber deines ist natürlich besser ;) )

    [autoit]


    Global $test, $btnanzeigen

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

    Func _Buttonfarbe()
    $test = Not $test
    If $test Then
    GUICtrlSetColor($btnanzeigen, 0xff0000)
    Else
    GUICtrlSetColor($btnanzeigen, 0x000000)
    EndIf
    EndFunc

    [/autoit]
  • Hallo Ilse,

    Ich weiß ja nicht, was am Ende rauskommen soll, aber vllt. ist statt GUICtrlCreateButton und dem ganzen Einfärben, das Erstellen einer GUICtrlCreateCheckBox mit dem $BS_PUSHLIKE Style genau das was du suchst:

    [autoit]

    If Not IsDeclared("BS_PUSHLIKE") Then Global Const $BS_PUSHLIKE = 0x1000

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

    $hGUI = GUICreate("")
    For $i = 0 To 10
    GUICtrlCreateCheckbox("Button " & $i + 1, 20, 20 + $i * 25, 200, 20,$BS_PUSHLIKE)
    Next

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

    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Wenn nicht, dann müsstest du im Prinzip nur einen 2D Array anlegen (oder 2 "normale" Arrays).
    In Array[n][0], also der ersten "Spalte", speicherst du die Control ID des Buttons,
    In Array[n][1], also der zweiten Spalte, speicherst du den aktuellen "Status" des jeweiligen Buttons.

    Spoiler anzeigen
    [autoit]

    Local $aArray[10][2]
    $hGUI = GUICreate("")

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

    For $i = 0 To 9
    $aArray[$i][0] = GUICtrlCreateButton("Button " & $i + 1, 20, 20 + $i * 25, 200, 20)
    $aArray[$i][1] = 1
    GUICtrlSetBkColor(-1,0x33FF33)
    Next

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

    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    Case $aArray[0][0] To $aArray[9][0]
    $iIndex = $nMsg - $aArray[0][0]

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

    $aArray[$iIndex][1] = Not $aArray[$iIndex][1]
    If $aArray[$iIndex][1] Then GUICtrlSetBkColor($aArray[$iIndex][0],0x33FF33)
    If Not $aArray[$iIndex][1] Then GUICtrlSetBkColor($aArray[$iIndex][0],0xFF3333)
    EndSwitch
    WEnd

    [/autoit]

    LG

  • Hallo SEuBO,

    vielen Dank für die tollen Beispiele. SUPER!
    Ich mußte heute Mittag nochmal los und konnte mich jetzt erst wieder melden. Sorry!

    Eine Frage noch:
    Wie kann ich z.B. mit einem Start-Button prüfen ob was wahr oder falsch ist?
    Komme da nicht weiter.

    [autoit]


    If Not IsDeclared("BS_PUSHLIKE") Then Global Const $BS_PUSHLIKE = 0x1000

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

    $hGUI = GUICreate("")
    For $i = 0 To 10
    GUICtrlCreateCheckbox("Button " & $i + 1, 20, 20 + $i * 25, 200, 20,$BS_PUSHLIKE)
    Next

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

    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit

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

    EndSwitch
    WEnd

    [/autoit]

    Ich meine, ich klicke auf einen zusätzlichen Button Start
    der dann eine MSGBOX einblendet Button 4 ist an, Button 6 ist an...

    Mein Code, der nicht klappt

    [autoit]


    Case $Button1
    If BitAnd(GUICtrlRead($Button1), $GUI_CHECKED) Then
    Msgbox(4,"OK","OK")
    Else
    Msgbox(4,"Nicht OK","Nicht OK")
    EndIf

    [/autoit]

    Einmal editiert, zuletzt von Ilse (11. Oktober 2010 um 20:05)

  • Beispiel:

    Spoiler anzeigen
    [autoit]

    Local $aArray[10][2]
    $hGUI = GUICreate("")

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

    For $i = 0 To 9
    $aArray[$i][0] = GUICtrlCreateButton("Button " & $i + 1, 20, 20 + $i * 25, 200, 20)
    $aArray[$i][1] = True
    GUICtrlSetBkColor(-1,0x33FF33)
    Next

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

    $button = GUICtrlCreateButton('Status',100,300,200,40)

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

    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    Case $aArray[0][0] To $aArray[9][0]
    $iIndex = $nMsg - $aArray[0][0]
    $aArray[$iIndex][1] = Not $aArray[$iIndex][1]
    If $aArray[$iIndex][1] Then
    GUICtrlSetBkColor($aArray[$iIndex][0],0x33FF33)
    Else
    GUICtrlSetBkColor($aArray[$iIndex][0],0xFF3333)
    EndIf
    Case $button
    Local $string = ''
    For $i = 0 To 9
    $string &= 'Der Button '&$i & ' ist ' & $aArray[$i][1] & @CRLF
    Next
    MsgBox(0, 'Status der Button:', $string)
    EndSwitch
    WEnd

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Guten Morgen Schnuffel,

    und vielen Dank für deine Hilfe.
    Ich hab immer noch so meine Probleme mit Arrays.
    Wenn ich diesen Code jetzt kommentieren müsste
    dann hätte ich da schon einige Probleme...

    Oh je.. ich werde versuchen das mal zu entschlüsseln
    also lesen, lesen, lesen..

    Viele Grüße
    Ilse ;)
    und merci nochmal an SEuBo

  • Hallo nochmal,

    ich habe nun doch noch ein paar Fragen
    in Bezug auf Arrays.

    Zitat

    Wie kann ich auf jeden einzelnen Button eine Case Anweisung machen?
    Also, ich klicke auf Button 4, dann mach das und das...auf Button 5 usw.

    Ich habe mal die Code-Stellen kommentiert die ich verstanden habe
    ob das richtig ist, weiß ich nicht (Bitte schaut mal drüber) aber da sind noch
    einige dunkle Stellen ?(

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

    Local $aArray[10][2] ; mache 10 Variablen mit dem Namen $aArray mit 2 Werten.
    $hGUI = GUICreate("") ;mache ein leeres GuiFenster mit dem Namen $hGUI

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

    For $i = 0 To 9 ; hier beginnt die Schleife
    $aArray[$i][0] = GUICtrlCreateButton("Button " & $i + 1, 20, 20 + $i * 25, 200, 20)
    $aArray[$i][1] = True
    GUICtrlSetBkColor(-1,0x33FF33)
    Next

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

    #cs
    Das macht die Schleife
    $aArray[$i][0] = GUICtrlCreateButton (hier werden die Buttons von 1 bis 10 gemacht
    $aArray[$i][1] = True (Hier werden die Buttons auf wahr gesetzt! Wieso? Standardwert ist doch 0
    #ce

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

    $button = GUICtrlCreateButton('Status',100,300,200,40); hier wird der Statusbutton gemacht

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

    GUISetState()

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

    ; ab hier beginnt die Rutschpartie :?:

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3 ?(
    Exit
    Case $aArray[0][0] To $aArray[9][0]; Wenn der Button 1-10 aus ist...
    $iIndex = $nMsg - $aArray[0][0];????
    $aArray[$iIndex][1] = Not $aArray[$iIndex][1];????
    If $aArray[$iIndex][1] Then
    GUICtrlSetBkColor($aArray[$iIndex][0],0x33FF33); hier werden die Farbwerte gesetzt!
    Else
    GUICtrlSetBkColor($aArray[$iIndex][0],0xFF3333); hier werden die Farbwerte gesetzt!
    EndIf

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

    Case $button ;
    Local $string = ''
    For $i = 0 To 9
    $string &= 'Der Button '&$i & ' ist ' & $aArray[$i][1] & @CRLF
    Next
    MsgBox(0, 'Status der Button:', $string)

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

    EndSwitch
    WEnd

    [/autoit]

    Jetzt habe ich viel gelesen, probiert
    und bin genau soweit wie heute Morgen.

    Viele Grüße
    Ilse :(