Buttonschönheitsfehler bei schwarzer BK-Color

  • Wenn man einen schwarzen Button hat, der nicht die Standarthöhe hat, sondern z.B. 20, der Text ist weiß, dann kommt das Problem, dass wenn man den Button anklickt, sodass er im Fokus ist, praktisch der Hintergrund von dem Text auf dem Button den Markierung (Pünktchen) auf dem Button, die den Fokus darstellen sollen, verdeckt, was nicht so schön aussieht. (Hoffe das war verständlich)
    Kann man daran überhaupt was ändern? Bezweifle ich nämlich eher...

    Spoiler anzeigen
    [autoit]

    GUICreate("",150,40)
    GUICtrlCreateButton("Oaofaol",10,10,130,20)
    GUICtrlSetBkColor(-1,0x000000)
    GUICtrlSetColor(-1,0xFFFFFF)

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

    GUISetState()

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

    WHile GUIGetMsg() <> -3
    Sleep(10)
    WEnd

    [/autoit]

    Dann noch etwas anderes:
    Wie weise ich einem Button andere Farben zu und setze gleichzeitig einen Style? Denn wenn ich erst die Farbe änder, und dann den Style, wird nur der Style übernommen, andersrum werden nur die Farben übernommen...

    Einmal editiert, zuletzt von NoName (21. Februar 2009 um 17:39)

    • Offizieller Beitrag

    Das erste Problem kannst Du dadurch lösen, dass Du einen kleineren Font benutzt:

    Spoiler anzeigen
    [autoit]


    GUICreate("", 150, 40)
    GUICtrlCreateButton("Oaofaol", 10, 10, 130, 20)
    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 7)

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

    GUISetState()

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

    While GUIGetMsg() <> -3
    Sleep(10)
    WEnd

    [/autoit]

    Den Rest habe ich nicht verstanden. Wie meinst Du das?

  • vielleicht hilft Dir das weiter zum Verständnis ...

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #Include <Array.au3>

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

    GUICreate("",150,80)
    $button1 = GUICtrlCreateButton("Statusanzeige",10,10,130,20)
    GUICtrlSetBkColor(-1,0x000000)
    GUICtrlSetColor(-1,0xFFFFFF)
    GUICtrlSetFont(-1, 7)
    $button2 = GUICtrlCreateButton("klick mich ...",10,40,130,20)
    GUICtrlSetBkColor(-1,0x000000)
    GUICtrlSetColor(-1,0xFFFFFF)
    GUICtrlSetFont(-1, 7)
    GUISetState()
    Global $states[6]
    $states[0] = $GUI_DISABLE
    $states[1] = $GUI_ENABLE
    $states[2] = $GUI_SHOW
    $states[3] = $GUI_HIDE
    $states[4] = $GUI_FOCUS
    $states[5] = $GUI_NOFOCUS
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $button1

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

    Case $msg = $button2
    $color = "0x" & Hex(Random(0,16777215),6)
    $ran = Random(0,5)
    GUICtrlSetBkColor($button1,$color)
    GUICtrlSetState($button1,$states[$ran])
    GUICtrlSetData($button1,$states[$ran])
    EndSelect
    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. ;)

  • Ok, das erste ist schonmal gelöst, danke.
    Zum zweiten dann:
    So soll das ganze aussehen, nur dass der Button schwarz sein soll und der Text darauf weiß.

    Spoiler anzeigen
    [autoit]

    GUICreate("", 150, 150)
    GUICtrlCreateButton("H" & @CRLF & "a" & @CRLF & "l" & @CRLF & "l" & @CRLF & "o", 50, 10, 20, 130)

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

    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlSetFont(-1, 7)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetStyle(-1, BitOR(0x0300, 0x2000))

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

    GUISetState()

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

    While GUIGetMsg() <> -3
    Sleep(10)
    WEnd

    [/autoit]

    Wie man aber sehen kann habe ich die Farben gesetzt. Wenn ich jetzt die Reihenfolge vom Farben- und Stylesetzen vertausche, setzt er nur den Multiline-Style (nicht den Center).

    Spoiler anzeigen
    [autoit]

    GUICreate("", 150, 150)
    GUICtrlCreateButton("H" & @CRLF & "a" & @CRLF & "l" & @CRLF & "l" & @CRLF & "o", 50, 10, 20, 130)

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

    GUICtrlSetStyle(-1, BitOR(0x0300, 0x2000))
    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlSetFont(-1, 7)
    GUICtrlSetColor(-1, 0xFFFFFF)

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

    GUISetState()

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

    While GUIGetMsg() <> -3
    Sleep(10)
    WEnd

    [/autoit]

    Nur will ih halt, dass Farben und Styles zutreffen...

  • Farbige Buttons verwenden den Ownerdraw-Style. Das Einfärben ist aber in AutoIt nur schlecht implementiert, daher wird der button ganz flach.

    Spoiler anzeigen
    [autoit]

    #include<ButtonConstants.au3>
    GUICreate("", 150, 150)
    GUICtrlCreateButton("H" & @CRLF & "a" & @CRLF & "l" & @CRLF & "l" & @CRLF & "o", 50, 10, 20, 130)

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

    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlSetFont(-1, 7)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetStyle(-1, BitOR(0x0300, 0x2000,$BS_OWNERDRAW))

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

    GUISetState()

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

    While GUIGetMsg() <> -3
    Sleep(10)
    WEnd

    [/autoit]
  • Bei mir ist da kein Unterschied zu der einen von mir schon geposteten Version. Also der Text ist zwar mit dem Multilinestyle gemacht, aber der Centerstyle fällt wieder weg...

  • Ich sags ja. Der Button wird dann nicht von Windows, sondern von AutoIt gezeichnet und die Implementierung ist sehr einfach ausgefallen und Styles somit weitgehend ignoriert.

  • Achso, ich dachte mit $BS_OWNERDRAW könnte man das ändern. Gibt es denn sonst keine Möglichkeit?

  • Den OWNERDRAW-Style setzen und die Farben nicht mit den AutoIt-Kommandos setzen, sondern wie im Beispiel zu GUIRegisterMsg.