Bug bei CtrlsetBkcolor ???

  • Hallo,

    ich habe ein ganz komisches Phänomen. Sourcecode zu schicken ist wieder schwierig, weil ganz viele Module und der Auftraggeber das nicht möchte.

    Dynamsiche Anzahl an Combos:

    $Combo_Befehlsauswahl1_ID[$j] = GUICtrlCreateCombo()

    Alles funktioniert einwandfrei. Die Combos werden richtig ausgelesen - alles funktioniert.

    Nun möchte die Combos einfärben.

    GUICtrlSetColor($Combo_Befehlsauswahl1_ID[$t_ebene],0xAA0000) funktioniert.

    GUICtrlSetBkColor($Combo_Befehlsauswahl1_ID[$t_ebene],0xAA0000) funktioniert nicht !!! (exakt gleiche Stelle im Code mit richtigem $Combo_Befehlsauswahl1_ID[$t_ebene])

    Wenn ich direkt nach dem GUICtrlCreateCombo() den Befehl GUICtrlSetBkColor(-1,0xAA0000) ausführe, funktioniert es ebenfalls.

    Ich verstehe es nicht. Leider. Kann mir jemand helfen?

    $Combo_Befehlsauswahl1_ID[$t_ebene] ist eine Globale Variable.

  • Ich kann bei autoit keinen Bug Erkennen

    [autoit]

    Example()

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

    Func Example()
    Local $msg
    GUICreate("Meine GUI combo")
    $combo1 = GUICtrlCreateCombo("item1", 10, 10)
    GUICtrlSetData(-1, "item2|item3", "item3")

    $combo2 = GUICtrlCreateCombo("item1", 10, 40)
    GUICtrlSetData(-1, "item2|item3", "item3")

    $combo3 = GUICtrlCreateCombo("item1", 10, 70)
    GUICtrlSetData(-1, "item2|item3", "item3")

    $combo4 = GUICtrlCreateCombo("item1", 10, 100)
    GUICtrlSetData(-1, "item2|item3", "item3")

    GUICtrlSetColor($combo1, 0xAA0000)

    GUICtrlSetBkColor($combo2, 0xAA0000)

    GUICtrlSetBkColor($combo3, 0xAA00AA)

    GUICtrlSetColor($combo4, 0xFFFFFF)
    GUICtrlSetBkColor($combo4, 0x000000)
    GUISetState()

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

    While 1
    $msg = GUIGetMsg()

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

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    EndFunc ;==>Example

    [/autoit]
    • Offizieller Beitrag

    Es geht darum Controls in einem Array Mit GuiCtrlBkColor einzufärben, vermutlich in einer Schleife.


    Es ist völlig Rille, ob die ComboBox-ID in einer "normalen" Variablen oder in einem Array abgelegt wird.
    Ich gehe mal stark von einem Indexfehler aus. GUICtrlSetBkColor können wir als Fehlerquelle ganz sicher ausschließen.
    Aber solange kein Code vorliegt können wir auch den Fehler nicht näher lokalisieren - das ist der Nachteil an "Geheimprojekten" :rofl:

  • Ich weiß, dass es Wurscht ist ob das Control einer Variable oder einem Array zugeordnet ist.
    Nur ich denke mal das das Problem von einem Arrayfehler oder ähnlichem kommt, deshalb hab ich auf darauf verwiesen, da das Script das so nicht enthält.

  • Ok, ok. Ich schicke euch den Wahnsinn.

    Also ihr müsst die "Motorsteuerung.au3" starten.

    Dann unten auf "Starte den Zauber..." drücken.

    Dann seht ihr, wie im Sekundentakt die Comboschrift rot eingefärbt wird und schön von oben nach unten durchläuft.

    Nun geht ihr in das Modul "Oberflaeche.au3" ganz nach unten (Func Faerbe()).

    Da kommentiert ihr den funktionierenden Teil bitte aus und nehmt drunter den nicht funktionierenden Teil rein.

    Dann das Programm neu starten und wieder "Starte den Zauber..." drücken. Und nun seht ihr mein Problem.

    Vielleicht könnt ihr mir dann noch sagen, warum man das Programm nicht mehr beenden kann, bzw. was ich machen muss, um aus dieser Schleife zu bekommen.

    (vermutlich muss ich die Func Run_All() beenden und darf diese nicht in einer Endlosschleife betreiben - wäre schön, wenn das gehen würde...)

    Vielen Dank für eure Hilfe.

  • [autoit]

    func faerbe($t_ebene)
    ; Funktioniert nicht
    ;~ #cs
    GUICtrlSetBkColor($Combo_Befehlsauswahl1_ID[$t_ebene],0xAA0000)
    GUICtrlSetState ($Combo_Befehlsauswahl1_ID[$t_ebene],$GUI_ENABLE)
    GUICtrlSetBkColor($Combo_Befehlsauswahl2_ID[$t_ebene],0xAA0000)
    GUICtrlSetState ($Combo_Befehlsauswahl2_ID[$t_ebene],$GUI_ENABLE)
    GUICtrlSetBkColor($Combo_Befehlsauswahl3_ID[$t_ebene],0xAA0000)
    GUICtrlSetState ($Combo_Befehlsauswahl3_ID[$t_ebene],$GUI_ENABLE)
    GUICtrlSetBkColor($Combo_Befehlsauswahl4_ID[$t_ebene],0xAA0000)
    GUICtrlSetState ($Combo_Befehlsauswahl4_ID[$t_ebene],$GUI_ENABLE)
    ; Färbe letzten Eintrag wieder schwarz
    $temp = $t_ebene -1
    if $t_ebene = $Anzahl_Ausgaenge+1 then $temp = $Anzahl_Befehle
    GUICtrlSetBkColor($Combo_Befehlsauswahl1_ID[$temp],0xFFFFFF)
    GUICtrlSetState ($Combo_Befehlsauswahl1_ID[$temp],$GUI_ENABLE)
    GUICtrlSetBkColor($Combo_Befehlsauswahl2_ID[$temp],0xFFFFFF)
    GUICtrlSetState ($Combo_Befehlsauswahl2_ID[$temp],$GUI_ENABLE)
    GUICtrlSetBkColor($Combo_Befehlsauswahl3_ID[$temp],0xFFFFFF)
    GUICtrlSetState ($Combo_Befehlsauswahl3_ID[$temp],$GUI_ENABLE)
    GUICtrlSetBkColor($Combo_Befehlsauswahl4_ID[$temp],0xFFFFFF)
    GUICtrlSetState ($Combo_Befehlsauswahl4_ID[$temp],$GUI_ENABLE)
    Sleep(1000)
    ;~ #ce
    ; Funktioniert:
    ;~ GUICtrlSetColor($Combo_Befehlsauswahl1_ID[$t_ebene],0xAA0000)
    ;~ GUICtrlSetColor($Combo_Befehlsauswahl2_ID[$t_ebene],0xAA0000)
    ;~ GUICtrlSetColor($Combo_Befehlsauswahl3_ID[$t_ebene],0xAA0000)
    ;~ GUICtrlSetColor($Combo_Befehlsauswahl4_ID[$t_ebene],0xAA0000)
    ;~ ; Färbe letzten Eintrag wieder schwarz
    ;~ $temp = $t_ebene -1
    ;~ if $t_ebene = $Anzahl_Ausgaenge+1 then $temp = $Anzahl_Befehle
    ;~ GUICtrlSetColor($Combo_Befehlsauswahl1_ID[$temp],0x0)
    ;~ GUICtrlSetColor($Combo_Befehlsauswahl2_ID[$temp],0x0)
    ;~ GUICtrlSetColor($Combo_Befehlsauswahl3_ID[$temp],0x0)
    ;~ GUICtrlSetColor($Combo_Befehlsauswahl4_ID[$temp],0x0)
    ;~ Sleep(1000)
    EndFunc

    [/autoit]

    das element braucht 1 mal den Focus, nicht wie das input

    und warum du nicht rauskommst ist einfach, du bist in einer schleife gefangen, diese musst du entweder verlassen ( die function z.B. als adllibregister aufrufen lassen oder durch If abfragen bzw eventmode usw.

  • Vielen Dank.

    Ich hätte jetzt noch 3 Fragen:

    Was bedeutet denn "Fokus"?
    Warum gibt es einen Unterschied zwischen GUICtrlSetColor und GUICtrlSetBkColor?
    Warum reicht nicht einfach die ID ? Ich habe diese ComboBox doch nie DISABLE geschalten?

    Viele Grüße und wirklich Danke.

  • Huch !!!

    Jetzt habe ich deine Skriptänderung ausprobiert und es funktioniert nicht.
    Noch schlimmer. Ich habe meine .zip Änderungen nochmals runtergeladen und die funktionieren auch nicht. Auf einem anderen Rechner hat es exakt so funktioniert?

    Sollzustand:

    Es soll sich nach dem Startbutton immer eine komplette Zeile rot färben und dann nach einer Sekunde nach unten wandern.
    Hier auf dem Rechner verhält sich nun SetColor genauso falsch wie SetBkColor (es färbt sich lange Zeit gar nichts und dann wahllos irgendwelche Combos).
    Wie ist das bei Euch???

  • habe die zip runtergeladen, diesen oben geposteten bereich geändert und dann deine maschindings gestartet und es hat funktioniert

  • Ääffz. Jetzt habe ich meine Version 3.3.1.1 (Beta) runtergeschmissen und Version 3.3.6.1 installiert und siehe da: Es funktioniert !!!
    War wohl noch ein Bug drin :)

    @Ezzora: Kannst du mir dennoch die 3 Fragen beantworten - ich bin so neugierig und möchte dieselben Fehler nicht nochmal machen.
    Danke.

  • dost0011,

    mit einer beta proggt man auch keine produktiv-Soft... ;)

    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. ;)

  • Was bedeutet denn "Fokus"?
    Warum gibt es einen Unterschied zwischen GUICtrlSetColor und GUICtrlSetBkColor?
    Warum reicht nicht einfach die ID ? Ich habe diese ComboBox doch nie DISABLE geschalten?

    1: Focus ist bei den meisten Controls die "gepunktete Umrandung", es kann dann meist mit der Eingabetaste aktiviert werden
    2: GuiCtrlSetColor färbt ein Control an sich ein (meistens die Schrift), GuiCtrlSetBkColor die Hintergrundfarbe.
    3: Der Focus wird so auf dieses Control gesetzt - warum genau das notwendig ist, weiß ich nicht :S