GDI+ String halbtransparent zeichnen

  • Hallo,

    Ich bin dabei mit in TCP einzuarbeiten, und wollte auch mal nen Chat schreiben.
    Bevor ich aber soweit bin, muss der Launcher gut aussehen.

    Hier das aktuelle Script:
    http://tinyurl.com/396jhyh

    Wenn man mit der Maus über ein Icon fährt, kommt ein Hover Effekt.
    Jetzt stellt sich mir die Frage, wie es möglich ist, neben den Icons entsprechende Infotexte zu malen (daie natürlich auch einen Fade-In/Fade-Out Effekt haben sollen)
    Habe leidfer nichts brauchbares gefunden, oder falsch gesucht. Sprich ich möchte einen String (halb-)transparent "schreiben"

  • Wenn du mit _GDIPlus_GraphicsDrawStringEx() arbeitest, musst du ja einen Brush angeben, und die Farben des Brushes sind so aufgebaut:

    0x (kommt immer vor den Farbcode) FF (transparents/Alphakanal) 000000 (Farbcode)

    wenn du jetzt statt FF beispielsweise

    [autoit]

    hex(*hier ein Wert zwischen 0 und 255*, 2)

    [/autoit]

    ist die Schrift je nach zahl transparenter.

    //Edit: Oh, yxyx war schneller :D

  • So hier mal ein Beispiel: ;)

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <GUIConstants.au3>
    #include <Misc.au3>

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

    Opt("GUIOnEventMode", 1)

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

    $iGUIColorBG = 0xFFFFFFFF
    $iGUIWidth = 400
    $iGUIHeight = 400

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

    $iTrans = 255
    $iSpeed = 10

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

    $hWnd = GUICreate("Test", $iGUIWidth, $iGUIHeight)
    GUISetState()

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

    _GDIPlus_Startup()

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

    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iGUIWidth, $iGUIHeight, $hGraphic)
    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    _GDIPlus_GraphicsSetSmoothingMode($hBuffer, 2)

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

    $hBrushText = _GDIPlus_BrushCreateSolid("0x" & Hex($iTrans, 2) & "0F0FFF")

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

    $hFamily = _GDIPlus_FontFamilyCreate("Arial")
    $hFont = _GDIPlus_FontCreate($hFamily, 30)
    $hFormat = _GDIPlus_StringFormatCreate()

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

    $tLayoutRect = _GDIPlus_RectFCreate(50, 50)

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

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

    While Sleep(20)
    $iTrans += $iSpeed
    If $iTrans >= 255 Then
    $iTrans = 255
    $iSpeed *= -1
    ElseIf $iTrans <= 0 Then
    $iTrans = 0
    $iSpeed *= -1
    EndIf
    _GDIPlus_GraphicsClear($hBuffer, $iGUIColorBG)
    _GDIPlus_BrushSetSolidColor($hBrushText, "0x" & Hex($iTrans, 2) & "0F0FFF")
    _GDIPlus_GraphicsDrawStringEx($hBuffer, "AutoIt rocks!", $hFont, $tLayoutRect, $hFormat, $hBrushText)
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $iGUIWidth, $iGUIHeight)
    WEnd

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

    Func _Exit()
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_GraphicsDispose($hBuffer)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_BrushDispose($hBrushText)
    _GDIPlus_Shutdown()
    Exit
    EndFunc

    [/autoit]
  • Hab Funktionen dazu (aus meinem Defense :P )

    Spoiler anzeigen
    [autoit]


    ;Funcvars
    Global $font,$format

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

    ;Funktionen
    Func _DSStart($face="Arial",$size=12,$style=0) ;Um auch Brush angeben zu können
    Local $family=_GDIPlus_FontFamilyCreate($face)
    $font=_GDIPlus_FontCreate($family,$size,$style)
    _GDIPlus_FontFamilyDispose($family)
    $format=_GDIPlus_StringFormatCreate()
    EndFunc

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

    Func _DrawString($gra,$str,$x=0,$y=0,$brush=0)
    Local $layout=_GDIPlus_RectFCreate($x,$y)
    _GDIPlus_GraphicsDrawStringEx($gra,$str,$font,$layout,$format,$brush)
    EndFunc

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

    Func _DSEnd()
    _GDIPlus_FontDispose($font)
    _GDIPlus_StringFormatDispose($format)
    EndFunc

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

    Func _DrawStr($gra,$str,$x=0,$y=0,$brush=0,$size=12,$flag=0,$face="Arial") ;Wenn man es nicht schnell braucht und nur 1 Befehl haben will
    Local $family=_GDIPlus_FontFamilyCreate($face)
    Local $font=_GDIPlus_FontCreate($family,$size,$flag)
    _GDIPlus_FontFamilyDispose($family)
    Local $format=_GDIPlus_StringFormatCreate()
    Local $layout=_GDIPlus_RectFCreate($x,$y)
    _GDIPlus_GraphicsDrawStringEx($gra,$str,$font,$layout,$format,$brush)
    _GDIPlus_FontDispose($font)
    _GDIPlus_StringFormatDispose($format)
    EndFunc

    [/autoit]