Bug im GUICtrlSetOnEvent bzw. GUICtrlSetBkColor?

  • Hi Leute,

    ich hab da ein Problem mit dem GUICtrlSetOnEvent in zusammenhang mit GUICtrlSetBkColor.

    Das Skript zum testen!
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Opt('GUIOnEventMode', 1)

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

    GUICreate("", 100, 100)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit')
    GUISetState()

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

    GUICtrlCreateInput("", 10, 10, 80)
    GUICtrlSetOnEvent(-1, "_Input")

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

    GUICtrlCreateButton("2", 10, 50, 80)
    GUICtrlSetOnEvent(-1, "_Button")
    GUICtrlSetBkColor(-1, 0xFFFFFF)

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Exit()
    Exit
    EndFunc

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

    Func _Input()
    MsgBox(0, "_Input", "_Input")
    EndFunc

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

    Func _Button()
    MsgBox(0, "_Button", "_Button")
    EndFunc

    [/autoit]


    Da ich das Problem nicht lange umschreiben möchte bzw. meine Beschreibung möglicherweise falsch verstanden wird,

    führt doch einfach mal diese drei Schritte aus, dann versteht ihr was mein Problem ist.

    OS:WIN_XP/Service Pack 3 CPU:X86 OS:X86 AutoIt:3.3.6.1

    • Klickt mit der Maus in das Inputfeld, gebt etwas ein und drückt dann auf Return.
      => Es erscheint die Nachricht "_Input".
      => Soweit alles OK!
    • Schließt die Nachricht.
      Klickt mit der Maus auf den "Button".
      Es erscheint die Nachricht "_Button"
      => Immernoch alles OK!
    • Schließt die Nachricht.
      Klickt mit der Maus wieder in das Inputfeld, gebt etwas ein und drückt dann auf Return
      => Es erscheint wieder die Nachricht "_Input".
      Schließt die Nachricht.
      Es erscheint die Nachricht "_Button"
      => ERROR...Das sollte nicht passieren!

    Kommentiert man die Zeile

    [autoit]

    GUICtrlSetBkColor(-1, 0xFFFFFF)

    [/autoit]


    aus, dann funktionierts wieder wunderbar.


    Was meint ihr zu dem Bug?
    Ist das vielleicht gar kein Bug?


    Als Workaround hab ich mir überlegt, ein Bild auf den Button zu legen.
    Müsste ich aber erst recherchieren, da ich das bisher noch nie gemacht habe.

    Wie sieht es mit GDIPlus aus? Kann man damit den Button "anmalen"?
    Hatte auch bisher mit GDIPlus noch nichts am Hut.

    PS:
    Diesen Bug hab ich in der Schach.au3 (Inhalt von Quellcode.zip) gefunden.

    PPS:
    GUICtrlSetDefColor scheint auch betroffen zu sein... ?(

    Einmal editiert, zuletzt von Cyberdyne (12. Dezember 2010 um 03:32)

  • Ich glaube mich zu erinnern dass hierfür schon vor langer Zeit ein Ticket erstellt wurde. Durch das setzen der Hintergrundfarbe reagiert der Button wie wenn der Stil $BS_DEFPUSHBUTTON benutzt worden wäre.

    Edit: stimmt Bug ist schon gemeldet:

    wird aber nicht gefixt, war damals im GuiGetMsg-Modus umschreiben geht nicht. Hier ist der Problem-Thread dazu:
    [ offen ] Bug oder GuiGetMsg() will nicht wie ich will

    mfg autoBert

    Einmal editiert, zuletzt von autoBert (10. Dezember 2010 um 19:43)

  • Ok, dann ist das geklärt,
    danke dir 8)

    Ich stell mal vorerst noch nicht auf gelöst, damit jemand noch dazu etwas zu sagen kann

    Als Workaround hab ich mir überlegt, ein Bild auf den Button zu legen.
    Müsste ich aber erst recherchieren, da ich das bisher noch nie gemacht habe.

    Wie sieht es mit GDIPlus aus? Kann man damit den Button "anmalen"?
    Hatte auch bisher mit GDIPlus noch nichts am Hut.

    Besonders das mit GDIPlus interessiert mich. ;)

  • Danke für den Hinweis Ineluki!

    Habe damit und noch mit anderen Möglichkeiten etwas rumexperimentiert.

    [...]
    Wie Ihr hier, [ offen ] Bug im GUICtrlSetOnEvent bzw. GUICtrlSetBkColor?, nachlesen könnt, ist das ein Bug in AutoIt.
    Ich wollte den Bug umgehen, indem ich

    • ein Bild über den Button lege
    • ein Image Control benutze
    • mit GDI+ den Button anmale


    leider haben mir (nach etlichen Tests) diese 3 Möglichkeiten gar nicht gefallen :(
    [...]

    Auf jedenfall hab ichs dann doch noch geschafft und zwar mit Hilfe eines 2. Bugs und einem Hook
    Nachlesen: [Vorlaufphase] µitLight Dezember '10/Januar '11
    Bin mit dieser Lösung sehr zufrieden, da ich so den farbigen Button behalten kann ;)

    [gelöst]