Checkbox Textfarbe ändern

  • Hallo,

    ich möchte gerne für meine Checkboxen
    wenn sie angewählt sind, für die "Beschriftung" die Farbe ändern.

    Also:
    Es gibt eine Function.
    Beim aufrufen, werden betreffende Checkboxen abgehakt.

    [autoit]


    Func _Auswahl()
    GUICtrlSetState($Checkbox[9], $gui_checked)
    GUICtrlSetState($Checkbox[5], $gui_checked)
    GUICtrlSetState($Checkbox[19], $gui_checked)
    endfunc

    [/autoit]

    Soweit ok.

    Die Checkboxen wurden vorher so erzeugt

    [autoit]


    $Checkbox[$i] = GUICtrlCreateCheckbox($chkname, 10, 10, 120, 20)

    [/autoit]

    Die Frage:
    Wie kann ich $chkname farblich ändern, wenn die Funktion aufgerufen wird
    bzw. wenn geklickt wird.
    1 = blau und 0 = schwarz

    Das checken kann ich per Loop beeinflussen

    [autoit]


    For $i = 1 To $Split[0] - 1
    GUICtrlSetState($Checkbox[$i], $gui_unchecked)

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

    next

    [/autoit]

    aber ich komm nicht an $chkname!


    Liebe Grüße
    Ilse ;)

    3 Mal editiert, zuletzt von Ilse (21. Juli 2012 um 09:30)

  • Soweit ich weiß, kann man die Textfarbe der Checkboxen und Radios nicht ändern.
    Ich selbst verwende dafür extra Labels.

    Spoiler anzeigen
    [autoit]

    Global $h_Gui, $h_Checkbox, $h_Label

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

    $h_Gui = GUICreate ('')
    $h_Checkbox = GUICtrlCreateCheckbox ('', 10, 10, 13, 13)
    $h_Label = GUICtrlCreateLabel ('Beschreibung', 26, 10, 100, 13)

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

    GUISetState (@SW_SHOW, $h_Gui)

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

    While True
    Switch GUIGetMsg ()
    Case -3
    Exit
    Case $h_Checkbox
    If BitAND (GUICtrlRead ($h_Checkbox), 1) Then
    GUICtrlSetColor ($h_Label, 0x0000FF)
    Else
    GUICtrlSetColor ($h_Label, 0x000000)
    EndIf
    EndSwitch
    WEnd

    [/autoit]
  • du kannst es einfärben, wenn es dir nix ausmacht, dass die Checkboxen dann im default style sind
    oder du machst es ganz einfach und änderst nur die hintergrundfarbe ;)

    aber ein Label zu verwenden wär auch ne option wie schon gesagt wurde :)

    Spoiler anzeigen
    [autoit]


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

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

    Global $hGUI = GUICreate("", 450, 300)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit", $hGUI)

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

    $cCheckbox = GUICtrlCreateCheckbox("Checkboxtext", 10, 10, 120, 20)
    DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", "Explorer", "wstr", 0)
    GUICtrlSetColor(-1, 0x00FF00)

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

    $cCheckbox2 = GUICtrlCreateCheckbox("Checkboxtext", 10, 40, 120, 20)
    GUICtrlSetBkColor(-1, 0x00FF00)

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

    GUISetState(@SW_SHOW, $hGUI)

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

    While 1
    Sleep(200)
    WEnd

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

    Func _exit()
    Exit
    EndFunc ;==>_exit

    [/autoit]

    Einmal editiert, zuletzt von Krabat (20. Juli 2012 um 14:28)

    • Offizieller Beitrag

    Wie kann ich $chkname farblich ändern, wenn die Funktion aufgerufen wird


    Den Checkbox-Text kannst du (da dein System vermutlich mind. XP ist bzw. diesen Style nutzt) nicht färben.

    Zitat

    Checkbox, Radio, Group or Progress controls cannot be painted if the "Windows XP/Vista style" is used.


    Einfach ein Label neben die Checkbox setzen, statt des Textes in der Checkbox, dann kannst du munter mit GUICtrlSetColor einfärben. Checkboxereignis abfragen und je nach Zustand färben:

    [autoit]

    ;...
    Case $iMsg = $CheckBox
    If BitAnd(GuiCtrlRead($CheckBox), $GUI_CHECKED) Then
    GUICtrlSetColor($CheckBoxLabel, $Color_Checked)
    Else
    GUICtrlSetColor($CheckBoxLabel, $Color_UnChecked)
    EndIf
    ;...

    [/autoit]
  • Hallo $Var,

    muß mich kurz wieder melden.
    Wenn ich die checkboxen so erzeuge

    [autoit]


    For $i = 1 To $Split[0] - 1

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

    $chkName = StringTrimLeft($Split[$i], 3)

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

    $Checkbox[$i] = GUICtrlCreateCheckbox($chkName...

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

    next

    [/autoit]

    bedeutet das, ich kann $chkName nachträglich nicht mehr beeinflussen?
    Es geht mir nur um den "Bezeichner"

    Das heißt also, beim erzeugen müsste ich einmal die Checkbox ohne Bezeichner anlegen
    und dann die Positionen für das Label berechnen und erzeugen...?


    Grüße Ilse
    :(

  • Verwende für die Checkboxen und Labels ein zweidimensionales Array. Dann hast du immer Zugriff.
    Hier ein Beispiel:

    Spoiler anzeigen
    [autoit]

    Global $h_Gui, $i_Msg, $ah_Checkbox[10][2]

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

    $h_Gui = GUICreate ('')
    For $i = 0 To UBound ($ah_Checkbox) - 1
    $ah_Checkbox[$i][0] = GUICtrlCreateCheckbox ('', 10, 10 + ($i * 20), 13, 13)
    $ah_Checkbox[$i][1] = GUICtrlCreateLabel ('Unchecked ' & $i + 1, 26, 10 + ($i * 20), 100, 13)
    Next

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

    GUISetState (@SW_SHOW, $h_Gui)

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

    While True
    $i_Msg = GUIGetMsg ()
    Switch $i_Msg
    Case -3
    Exit
    EndSwitch

    For $i = 0 To UBound ($ah_Checkbox) - 1
    If $i_Msg = $ah_Checkbox[$i][0] Then
    If BitAND (GUICtrlRead ($ah_Checkbox[$i][0]), 1) Then
    GUICtrlSetData ($ah_Checkbox[$i][1], 'Checked ' & $i + 1)
    GUICtrlSetColor ($ah_Checkbox[$i][1], 0x0000FF)
    Else
    GUICtrlSetData ($ah_Checkbox[$i][1], 'Unchecked ' & $i + 1)
    GUICtrlSetColor ($ah_Checkbox[$i][1], 0x000000)
    EndIf
    EndIf
    Next
    WEnd

    [/autoit]
  • ...muß mich wieder melden.

    Die Arrays machen mir mal wieder das leben schwer!

    Wenn mein Loop so aussieht,
    wie kann ich daraus ein zweidimensionales array machen?
    ubound kann ich nicht verwenden

    Sieht so aus:

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

    For $i = 1 To $Split[0] - 1

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

    $chkName = StringTrimLeft($Split[$i], 3)

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

    $Checkbox[$i][0] = GUICtrlCreateCheckbox('', $Links + Int($i / $Zeilen) * $Abstand, $Oben + Mod($i, $Zeilen) * $Zwischen, 13, 13)
    $Checkbox[$i][1] = GUICtrlCreateLabel($chkName[$i][1], $Links + 20 + Int($i / $Zeilen) * $Abstand, $Oben + Mod($i, $Zeilen) * $Zwischen, 200, 50)
    next

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

    :( Ilse

  • Ilse, müsste auch ohne 2D-Array gehen. :)

    Spoiler anzeigen
    [autoit]


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

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

    Opt("GUIOnEventMode", 1) ;i Eine Gute Wahl -> mehr Macros, leichtere Fenstertechnik

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

    #region ### START Koda GUI section ###
    GUICreate("CheckboxColor", 220, 560)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_ende")

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

    GUICtrlCreateGroup("", 10, 24, 200, 500)
    ;i #### Start Checkboxarray für 25 Checkboxen ###
    Global $aCkbColumn2[25], $aLBColumn2[25] ;i ArrayVariablen (kl. a am Anfang) erstellen der Controls
    ;i a- Array + Checkbox-ckb
    For $i = 0 To 24 ;i statisch kein Ubound - erstellen von 0 - 24 = 25 Checkboxen
    $aCkbColumn2[$i] = GUICtrlCreateCheckbox('', 30, 40 + $i * 19, 13, 13)
    GUICtrlSetOnEvent(-1, "_state")
    $aLBColumn2[$i] = GUICtrlCreateLabel('Unchecked ' & $i + 1, 65, 40 + $i * 19, 120, 17)
    ;i erstellen von 0 - 24 = 25 Labels
    Next
    ;i #### Ende Checkboxarray ###
    GUICtrlCreateGroup("", -99, -99, 1, 1) ;i Gruppe schliessen
    $ckbAll = GUICtrlCreateCheckbox(' All off/on', 30, 530, 100, 20)
    GUICtrlSetOnEvent(-1, "_all")

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

    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    While Sleep(1000)
    WEnd

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

    Func _state()
    For $i = 0 To 24
    If BitAND(GUICtrlRead($aCkbColumn2[$i]), 1) Then
    GUICtrlSetData($aLBColumn2[$i], 'Checked ' & $i + 1)
    GUICtrlSetColor($aLBColumn2[$i], 0x0000FF)
    Else
    GUICtrlSetData($aLBColumn2[$i], 'Unchecked ' & $i + 1)
    GUICtrlSetColor($aLBColumn2[$i], 0x000000)
    EndIf
    Next
    EndFunc ;==>_state

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

    Func _all()
    If BitAND(GUICtrlRead($ckbAll), 1) Then
    GUICtrlSetData($ckbAll, " All off")
    For $i = 0 To 24 ;i statisch kein Ubound
    GUICtrlSetState($aCkbColumn2[$i], 1)
    Next
    Else
    GUICtrlSetData($ckbAll, " All on")
    For $i = 0 To 24 ;i statisch kein Ubound
    GUICtrlSetState($aCkbColumn2[$i], 4)
    Next
    EndIf
    _state()
    EndFunc ;==>_all

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

    Func _ende()
    Exit
    EndFunc ;==>_ende
    ; Ende

    [/autoit]


    Edit: Jetzt können auch alle Checkboxen mit einmal gewählt werden. ;)

  • Hallo RR04,

    danke für dein Beispiel.
    Ich bin noch am probieren und kämpfen. Muß da einiges ändern.
    Es gibt bei mir keine feste Größe.

    [autoit]


    For $i = 0 To 24 ;

    [/autoit]

    melde mich wieder.
    Kann etwas dauern...

    ;) Viele Grüße Ilse

  • @ RR04,

    Danke nochmals, sieht gut aus.
    Muß jetzt leider schon wieder los.
    Ich hoffe daß ich am Wochenende alles hinbekomme.

    Schönes Wochenende
    und viele Grüße

    ;) Ilse

  • Ilse,

    BugFix (in Post #4) hat mich auf die Idee gebracht einfach den Style umzustellen. Dann müsste es ohne 2D-Array und ohne Labels funktionieren. Schau Dir mal mein Beispiel an (funktioniert unter XP).

    Spoiler anzeigen
    [autoit]


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

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

    Opt("GUIOnEventMode", 1) ;i mehr Macros, leichtere Fenstertechnik

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

    #region ### START Koda GUI section ###
    GUICreate("CheckboxColor", 339, 550)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_ende")
    GUICtrlCreateGroup("", 10, 10, 200, 500)

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

    ;i #### Start Checkboxarray für 25 Checkboxen ###
    DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", 0)
    Global $aCkb[25] ;i ArrayVariablen (kl. a am Anfang) erstellen der Controls
    ;i a- Array + Checkbox-ckb
    For $i = 0 To 24 ;i statisch kein Ubound - erstellen von 0 - 24 = 25 Checkboxen
    $aCkb[$i] = GUICtrlCreateCheckbox(' Unchecked ' & $i + 1, 30, 30 + $i * 19, 120, 13)
    GUICtrlSetOnEvent(-1, "_state")
    Next
    DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", 7)
    ;i #### Ende Checkboxarray ###

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

    GUICtrlCreateGroup("", -99, -99, 1, 1) ;i Gruppe schliessen
    $ckbAll = GUICtrlCreateCheckbox(' All off/on', 30, 520, 100, 20)
    GUICtrlSetOnEvent(-1, "_all")

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

    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    While Sleep(1000)
    WEnd

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

    Func _state()
    For $i = 0 To 24
    If BitAND(GUICtrlRead($aCkb[$i]), 1) Then
    GUICtrlSetData($aCkb[$i], ' Checked ' & $i + 1)
    GUICtrlSetColor($aCkb[$i], 0x0000FF)
    Else
    GUICtrlSetData($aCkb[$i], ' Unchecked ' & $i + 1)
    GUICtrlSetColor($aCkb[$i], 0x000000)
    EndIf
    Next
    EndFunc ;==>_state

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

    Func _all()
    If BitAND(GUICtrlRead($ckbAll), 1) Then
    GUICtrlSetData($ckbAll, " All off")
    For $i = 0 To 24 ;i statisch kein Ubound
    GUICtrlSetState($aCkb[$i], 1)
    Next
    Else
    GUICtrlSetData($ckbAll, " All on")
    For $i = 0 To 24 ;i statisch kein Ubound
    GUICtrlSetState($aCkb[$i], 4)
    Next
    EndIf
    _state()
    EndFunc ;==>_all

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

    Func _ende()
    Exit
    EndFunc ;==>_ende
    ; Ende

    [/autoit]