Problem beim einfärben von Combo Controls

  • Hab hier einen seltsamen Fehler, den ich mir nicht erklären kann. Im Script soll die Hintergrundfarbe von beiden Controls abhängig vom Inhalt geändert werden. Das funktioniert auch, jedoch wird die Farbänderung bei der Combobox erst sichtbar nachdem man die Maus über diesen Bereich bewegt. Beim edit control wird die Änderung sofort sichtbar. Was kann man da machen?

    [autoit]


    #include <GUIConstantsEx.au3>
    #include <EditConstants.au3>

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

    GUICreate("My GUI")
    GUICtrlCreateLabel("Button ändert die Farbe der Controls auf rot, wenn die Felder leer sind. Wenn Text in den Feldern eingetragen ist ändert der Button die Farbe auf weiß.",10,10,350,80,"",$ES_MULTILINE)
    $button = GUICtrlCreateButton("changecolor",50,100)
    $edit = GUICtrlCreateEdit("",200,100,100,50)
    $dropdown = GUICtrlCreateCombo("",50,200,200,50)
    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    If $msg = $button Then colorchange()
    WEnd

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

    Func colorchange()
    if GUICtrlRead($edit) = "" Then
    GUIctrlSetBkColor($edit,0xFFB2B2)
    Else
    GUIctrlSetBkColor($edit,0xFFFFFF)
    EndIf
    if GUICtrlRead($dropdown) = "" Then
    GUIctrlSetBkColor($dropdown,0xFFB2B2)
    Else
    GUIctrlSetBkColor($dropdown,0xFFFFFF)
    EndIf
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von misterspeed (7. März 2011 um 16:32)

  • Hi,
    gute Frage warum sich die Farbe nicht ändert. Ich weiß es nicht :D.
    Aber so hast du das Problem nicht mehr:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <EditConstants.au3>
    #include <WinAPI.au3>

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

    $hGUI = GUICreate("My GUI")
    GUICtrlCreateLabel("Button ändert die Farbe der Controls auf rot, wenn die Felder leer sind. Wenn Text in den Feldern eingetragen ist ändert der Button die Farbe auf weiß.",10,10,350,80,"",$ES_MULTILINE)
    $button = GUICtrlCreateButton("changecolor",50,100)
    $edit = GUICtrlCreateEdit("",200,100,100,50)
    $dropdown = GUICtrlCreateCombo("",50,200,200,50)
    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    If $msg = $button Then colorchange()
    WEnd

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

    Func colorchange()
    if GUICtrlRead($edit) = "" Then
    GUIctrlSetBkColor($edit,0xFFB2B2)
    Else
    GUIctrlSetBkColor($edit,0xFFFFFF)
    EndIf
    if GUICtrlRead($dropdown) = "" Then
    GUIctrlSetBkColor($dropdown,0xFFB2B2)
    Else
    GUIctrlSetBkColor($dropdown,0xFFFFFF)
    EndIf
    _WinAPI_RedrawWindow($hGUI)
    EndFunc

    [/autoit]
  • Dank dir nach genau so einer Funktion hab ich die ganze Zeit gesucht, muss wohl blind gewesen sein. Hatte nur _WinAPI_UpdateWindow($hGUI) gefunden, was leider keinen erfolg brachte.