Label auf GDI+ Background

  • Hallo,
    ich habe da so eine schöne Form mit PNG Hintergrund und so. Ich möchte nun ein Label drauf benutzen.
    Funktioniert so erst mal ja garnicht, nech :D
    Dann habe ich einfach eine neue Form gemacht und dies als Child gesetzt und dem Child habe ich das Label gebene und dies funktioniert wunderbar.
    Nun das Problem. Ich sehe ein häsligen grauen Kasten als Hintergrund vom Label.
    Wie bekomme ich nun den Hintergrund vom Child/Label weg?

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <Constants.au3>
    #include <StaticConstants.au3>
    #include <GDIPlus.au3>
    #include <IE.au3>
    #include <Array.au3>

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

    Global $iImagePfad = @ScriptDir & "\Bilder\"

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

    ;~ Global Const $IMAGE_BITMAP = 0
    Global Const $SC_DRAGMOVE = 0xF012
    Global Const $STM_SETIMAGE = 0x0172
    ;~ Global Const $LWA_ALPHA = 0x00000002

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

    Global $hWnd, $oIE, $hBmp, $hImage, $hBrush, $iWidth, $iHeight, $hbrOld, $iButtonHover

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

    _GDIPlus_Startup()

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

    $hImage = _GDIPlus_ImageLoadFromFile($iImagePfad & "background.png")

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

    $iWidth = _GDIPlus_ImageGetWidth($hImage)
    $iHeight = _GDIPlus_ImageGetHeight($hImage)

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

    $hBmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)

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

    ; Create the main window
    $hWnd = GUICreate("Test", $iWidth, $iHeight, -1, -1, BitOR($WS_POPUP, $WS_CLIPCHILDREN), BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST))
    GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")

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

    $iLabel = _GuiCreateLabel ($hWnd, "test", 10,10,100,20)

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

    GUISetState(@SW_SHOW, $hWnd)

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

    SetTransparentBitmap($hWnd, $hImage)

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

    _WinAPI_DeleteObject($hBmp)
    _GDIPlus_ImageDispose($hImage)

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

    ; Message loop
    While (True)

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

    Switch (GUIGetMsg())
    Case $GUI_EVENT_CLOSE
    GUIDelete($hWnd)
    ExitLoop
    EndSwitch
    WEnd

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

    _WinAPI_DeleteObject($hBrush)
    _GDIPlus_Shutdown()

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

    Func _GuiCreateLabel ($iHwnd, $iText, $iX, $iY, $iW, $iH)
    GUICreate ("",$iW, $iH, $iX, $iY,BitOR($WS_POPUP, $WS_VISIBLE,$WS_BORDER), $WS_EX_MDICHILD, $iHwnd)
    GUICtrlCreateLabel ($iText,2,0,$iW,$iH,-1,$WS_EX_TRANSPARENT )
    EndFunc

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

    Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
    _SendMessage($hWnd, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
    EndFunc ;==>_WM_LBUTTONDOWN

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

    Func SetTransparentBitmap($hGUI, $hImage, $iOpacity = 0xFF)
    Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend
    $hScrDC = _WinAPI_GetDC(0)
    $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
    _WinAPI_ReleaseDC(0, $hScrDC)
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    $hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
    $tSize = DllStructCreate($tagSIZE)
    $pSize = DllStructGetPtr($tSize)
    DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
    DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
    $tSource = DllStructCreate($tagPOINT)
    $pSource = DllStructGetPtr($tSource)
    $tBlend = DllStructCreate($tagBLENDFUNCTION)
    $pBlend = DllStructGetPtr($tBlend)
    DllStructSetData($tBlend, "Alpha", $iOpacity)
    DllStructSetData($tBlend, "Format", 1)
    _WinAPI_UpdateLayeredWindow($hGUI, 0, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
    EndFunc ;==>SetTransparentBitmap

    [/autoit]


    mfg Freaky

    ps: Das Hintergrundbild ist im Anhang und muss in einem Ordner Bilder leigen das im Hauptverzeichnis des Scripts liegt.

  • Hi,

    also normalerweise zeichnet man den Fensterhintergrund in der WM_ERASEBKGRND oder der WM_PAINT.
    Allerdings kenne ich mich nicht mit Ebenenfenstern aus (Layered Windows).

    Irgendwie sind wir damals darauf gekommen, dass Du deine Steuerelemente noch einmal in Kindfenster "wrappen" musst, damit diese überhaupt zu sehen sind. Aber ehrlich gesagt ist das alles Murks. Das muss auch auf dem normalen Wege funktionieren, allerdings kann ich Dir da nicht so auf die Schnelle zur Hand gehen.

    Frag doch mal ProgAndy was er dazu meint. Er kennt sich mit Ebenenfenstern besser aus. ;)


    Gruß
    Greenhorn


  • Am besten erstellst du nur eine GUI für den Hintergrund und eine für die Controls. Der Control-GUI gibst du dann per _WinAPI_SetLayeredWindowAttributes einen transparenten Hintergrund.

  • Hey,
    danke. Dies funktioniert in der AutoIt Hilfe wie immer supper. Leider funktioniert das ganze mit meinem Problem irgend wie mal garnicht.
    Ich kann die Transparents auf 50 setzen und es ist durchsichtig, trotzdem ist der Kasten da und die Schirft wird auch durchsichtig. Ich möchte aber nur den Hintergrund durchsichtig haben und nicht die Schirft :/

    So habe ich es ausprobiert:

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <Constants.au3>
    #include <StaticConstants.au3>
    #include <GDIPlus.au3>
    #include <IE.au3>
    #include <Array.au3>

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

    Global $iImagePfad = @ScriptDir & "\Bilder\"

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

    ;~ Global Const $IMAGE_BITMAP = 0
    Global Const $SC_DRAGMOVE = 0xF012
    Global Const $STM_SETIMAGE = 0x0172
    ;~ Global Const $LWA_ALPHA = 0x00000002

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

    Global $hWnd, $oIE, $hBmp, $hImage, $hBrush, $iWidth, $iHeight, $hbrOld, $iButtonHover

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

    _GDIPlus_Startup()

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

    $hImage = _GDIPlus_ImageLoadFromFile($iImagePfad & "background.png")

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

    $iWidth = _GDIPlus_ImageGetWidth($hImage)
    $iHeight = _GDIPlus_ImageGetHeight($hImage)

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

    $hBmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)

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

    ; Create the main window
    $hWnd = GUICreate("Test", $iWidth, $iHeight, -1, -1, BitOR($WS_POPUP, $WS_CLIPCHILDREN), BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST))
    GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")

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

    $iLabel = _GuiCreateLabel ($hWnd, "test", 10,10,100,20)

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

    GUISetState(@SW_SHOW, $hWnd)

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

    SetTransparentBitmap($hWnd, $hImage)

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

    _WinAPI_DeleteObject($hBmp)
    _GDIPlus_ImageDispose($hImage)

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

    ; Message loop
    While (True)

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

    Switch (GUIGetMsg())
    Case $GUI_EVENT_CLOSE
    GUIDelete($hWnd)
    ExitLoop
    EndSwitch
    WEnd

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

    _WinAPI_DeleteObject($hBrush)
    _GDIPlus_Shutdown()

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

    Func _GuiCreateLabel ($iHwnd, $iText, $iX, $iY, $iW, $iH)
    $iGui = GUICreate ("",$iW, $iH, $iX, $iY,BitOR($WS_POPUP, $WS_VISIBLE,$WS_BORDER), BitOR ($WS_EX_MDICHILD,$WS_EX_LAYERED), $iHwnd)
    GUICtrlCreateLabel ($iText,2,0,$iW,$iH,-1,$GUI_WS_EX_PARENTDRAG )
    _WinAPI_SetLayeredWindowAttributes($iGui, 0xABCDEF, 255)
    EndFunc

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

    Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
    _SendMessage($hWnd, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
    EndFunc ;==>_WM_LBUTTONDOWN

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

    Func SetTransparentBitmap($hGUI, $hImage, $iOpacity = 0xFF)
    Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend
    $hScrDC = _WinAPI_GetDC(0)
    $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
    _WinAPI_ReleaseDC(0, $hScrDC)
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    $hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
    $tSize = DllStructCreate($tagSIZE)
    $pSize = DllStructGetPtr($tSize)
    DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
    DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
    $tSource = DllStructCreate($tagPOINT)
    $pSource = DllStructGetPtr($tSource)
    $tBlend = DllStructCreate($tagBLENDFUNCTION)
    $pBlend = DllStructGetPtr($tBlend)
    DllStructSetData($tBlend, "Alpha", $iOpacity)
    DllStructSetData($tBlend, "Format", 1)
    _WinAPI_UpdateLayeredWindow($hGUI, 0, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
    EndFunc ;==>SetTransparentBitmap

    [/autoit]
  • Du musst den Hintergrund der GUI in der "durchsichtigen" Farbe einfärben, damit er verschwindet. (GUISetColor(0xABCDEF))

  • Hey danke.
    Jetzt sieht man den Hintergrund nicht mehr :)
    So, nun kommen aber 2 weitere Probleme dabei raus.
    1. Die Schrift vom Label ist kaum lesbar und das ändern der Größe und Farbe hilft da nicht wirklich.
    2. Man sieht nun ein schwarzen Rand, also es entsteht eine Box und die ist nicht vom Label.
    Wie kann ich diese 2 Sachen behebn?

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <Constants.au3>
    #include <StaticConstants.au3>
    #include <GDIPlus.au3>
    #include <IE.au3>
    #include <Array.au3>

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

    Global $iImagePfad = @ScriptDir & "\Bilder\"

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

    ;~ Global Const $IMAGE_BITMAP = 0
    Global Const $SC_DRAGMOVE = 0xF012
    Global Const $STM_SETIMAGE = 0x0172
    ;~ Global Const $LWA_ALPHA = 0x00000002

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

    Global $hWnd, $oIE, $hBmp, $hImage, $hBrush, $iWidth, $iHeight, $hbrOld, $iButtonHover

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

    _GDIPlus_Startup()

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

    $hImage = _GDIPlus_ImageLoadFromFile($iImagePfad & "background.png")

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

    $iWidth = _GDIPlus_ImageGetWidth($hImage)
    $iHeight = _GDIPlus_ImageGetHeight($hImage)

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

    $hBmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)

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

    ; Create the main window
    $hWnd = GUICreate("Test", $iWidth, $iHeight, -1, -1, BitOR($WS_POPUP, $WS_CLIPCHILDREN), BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST))
    GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")

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

    $iLabel = _GuiCreateLabel ($hWnd, "test", 0,0,100,20)

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

    GUISetState(@SW_SHOW, $hWnd)

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

    SetTransparentBitmap($hWnd, $hImage)

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

    _WinAPI_DeleteObject($hBmp)
    _GDIPlus_ImageDispose($hImage)

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

    ; Message loop
    While (True)

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

    Switch (GUIGetMsg())
    Case $GUI_EVENT_CLOSE
    GUIDelete($hWnd)
    ExitLoop
    EndSwitch
    WEnd

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

    _WinAPI_DeleteObject($hBrush)
    _GDIPlus_Shutdown()

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

    Func _GuiCreateLabel ($iHwnd, $iText, $iX, $iY, $iW, $iH)
    $iGui = GUICreate ("",$iW, $iH, $iX, $iY,BitOR($WS_POPUP, $WS_VISIBLE,$WS_BORDER), BitOR ($WS_EX_MDICHILD,$WS_EX_LAYERED), $iHwnd)
    GUICtrlCreateLabel ($iText,2,0,$iW,$iH,-1,$GUI_WS_EX_PARENTDRAG )
    GUICtrlSetColor (-1,0xff0000)
    GUICtrlSetFont (-1,10,400,0,"Arial")
    GUISetBkColor(0xABCDEF, $iGui)
    _WinAPI_SetLayeredWindowAttributes($iGui, 0xABCDEF, 255)
    EndFunc

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

    Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
    _SendMessage($hWnd, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
    EndFunc ;==>_WM_LBUTTONDOWN

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

    Func SetTransparentBitmap($hGUI, $hImage, $iOpacity = 0xFF)
    Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend
    $hScrDC = _WinAPI_GetDC(0)
    $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
    _WinAPI_ReleaseDC(0, $hScrDC)
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    $hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
    $tSize = DllStructCreate($tagSIZE)
    $pSize = DllStructGetPtr($tSize)
    DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
    DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
    $tSource = DllStructCreate($tagPOINT)
    $pSource = DllStructGetPtr($tSource)
    $tBlend = DllStructCreate($tagBLENDFUNCTION)
    $pBlend = DllStructGetPtr($tBlend)
    DllStructSetData($tBlend, "Alpha", $iOpacity)
    DllStructSetData($tBlend, "Format", 1)
    _WinAPI_UpdateLayeredWindow($hGUI, 0, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
    EndFunc ;==>SetTransparentBitmap

    [/autoit]


    mfg Freaky

    Einmal editiert, zuletzt von Freaky (6. März 2012 um 01:54)

  • Lasse doch die Transparenz vom Label weg und setze die Hintergrundfarbe vom Label schwarz.

    Spoiler anzeigen
    [autoit]


    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>

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

    _GDIPlus_Startup()
    Global Const $hImage_BG = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\background.png")
    Global Const $iW = _GDIPlus_ImageGetWidth($hImage_BG)
    Global Const $iH = _GDIPlus_ImageGetHeight($hImage_BG)
    Global Const $hGUI = GUICreate("", $iW, $iH, -1, -1, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_TOPMOST)
    SetTransparentBitmap($hGUI, $hImage_BG)
    Global Const $iFW = 90
    Global Const $iFH = 50

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

    Global Const $hGUI_Child = GUICreate("", $iFW, $iFH, 100, 100, $WS_POPUP, $WS_EX_MDICHILD, $hGUI)
    Global Const $idLabel = GUICtrlCreateLabel("Test", 0, 0, $iFW, $iFH)
    GUICtrlSetBkColor(-1, 0)
    GUICtrlSetColor(-1, 0xF0F0F0)
    GUICtrlSetFont(-1, 32, 400, 0, "Arial", 4)
    GUISetState(@SW_SHOW, $hGUI)
    GUISetState(@SW_SHOW, $hGUI_Child)

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

    _GDIPlus_ImageDispose($hImage_BG)

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

    Global Const $SC_DRAGMOVE = 0xF012
    GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")

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

    Do
    Until GUIGetMsg() = -3

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

    _GDIPlus_Shutdown()
    Exit

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

    Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
    _SendMessage($hWnd, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
    EndFunc ;==>_WM_LBUTTONDOWN

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

    Func SetTransparentBitmap($hGUI, $hImage, $iOpacity = 0xFF)
    Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend
    $hScrDC = _WinAPI_GetDC(0)
    $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
    _WinAPI_ReleaseDC(0, $hScrDC)
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    $hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
    $tSize = DllStructCreate($tagSIZE)
    $pSize = DllStructGetPtr($tSize)
    DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
    DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
    $tSource = DllStructCreate($tagPOINT)
    $pSource = DllStructGetPtr($tSource)
    $tBlend = DllStructCreate($tagBLENDFUNCTION)
    $pBlend = DllStructGetPtr($tBlend)
    DllStructSetData($tBlend, "Alpha", $iOpacity)
    DllStructSetData($tBlend, "Format", 1)
    _WinAPI_UpdateLayeredWindow($hGUI, 0, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
    EndFunc ;==>SetTransparentBitmap

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Hey, der Punkt is nicht den Hintergrund schwarz zu haben.
    Ich möchte ein sauberen Text ohne Hintergrund auf meiner Form haben. Mein normales Bild ist natürlich nicht das langweilige schwarze Bild, dass was ich für das Beispiel benutzt habe.
    Das was bis jetzt am nächsten dran ist, ist das von progandy, aber es ist nicht genau das was ich haben möchte.
    mfg Freaky

  • Probiers mal mit:

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

    _GDIPlus_GraphicsSetSmoothingMode($hGraphics, $iSmooth)

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

    $hGraphics Handle to a Graphics object
    $iSmooth Smoothing mode:
    0 - Smoothing is not applied
    1 - Smoothing is applied using an 8 X 4 box filter
    2 - Smoothing is applied using an 8 X 8 box filter

    [/autoit]
  • Hey,
    danke. Es funktioniert jetzt. Leider sieht es nun etwas nicht so schön aus in meiner Form.
    [Blockierte Grafik: http://s3.imgimg.de/uploads/ladeb072a407png.png]
    Oben wie es aussehen soll, unten wie es aussieht.
    Gibt es eine Möglichkeit die Qualität vom Label zu verbessern, sodass es wie auf dem Bild aussieht?


    Dieses Problem hatte ich auch schon einmal, als ich in einem Speicher-Gerätekontext einen Text gezeichnet habe und dann den Mem-DC in den originalen Speicherkontext geblittet habe. Ich nehme an hier wird es sich ähnlich oder genauso verhalten.
    Eine Lösung habe ich dafür bisher allerdings nicht gefunden, leider.

    Versuche es doch einmal so herum (nicht getestet):

    [autoit]

    ; ...
    SetTransparentBitmap($hWnd, $hImage) ; Zuerst "SetTransparentBitmap",
    $iLabel = _GuiCreateLabel ($hWnd, "test", 0,0,100,20) ; und dann "_GuiCreateLabel" aufrufen.

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

    GUISetState(@SW_SHOW, $hWnd)
    ; ...

    [/autoit]


    Gruß
    Greenhorn


  • Nimm' mal eine dunkle Transparentfarbe:

    [autoit]


    Func _GuiCreateLabel ($iHwnd, $iText, $iX, $iY, $iW, $iH)
    $iGui = GUICreate ("",$iW, $iH, $iX, $iY,BitOR($WS_POPUP, $WS_VISIBLE), BitOR ($WS_EX_MDICHILD,$WS_EX_LAYERED), $iHwnd)
    GUICtrlCreateLabel ($iText,2,0,$iW,$iH,-1,$GUI_WS_EX_PARENTDRAG )
    GUICtrlSetColor (-1,0xff0000)
    GUICtrlSetFont (-1,10,400,0,"Arial", 4) ;teste auch mal 5 anstatt 4
    GUISetBkColor(0x010000, $iGui)
    _WinAPI_SetLayeredWindowAttributes($iGui, 0x010000, 255)
    EndFunc

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Probiers mal mit:

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

    _GDIPlus_GraphicsSetSmoothingMode($hGraphics, $iSmooth)

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

    $hGraphics Handle to a Graphics object
    $iSmooth Smoothing mode:
    0 - Smoothing is not applied
    1 - Smoothing is applied using an 8 X 4 box filter
    2 - Smoothing is applied using an 8 X 8 box filter

    [/autoit]

    Hey, danke aber leider kann ich kaum GDI+
    Desweiteren muss ich den Text alle paar Sekunden aktualliseren und dann muss ich den Text immer säubern befor ich drüber schreibe und das bekomme ich nicht hin.

    Probiert und funktioniert leider nicht. Trotzdem danke :)

    Wenn ich ein andere Hintergrundfarbe auswähle, wird diese nicht nicht stark schöner. Gibt es da keine andere lösung die mich zum Ziehl führt? Vielleicht mit der WinApi draufzeichenen?
    Sorry kenne mich da nicht so aus.
    Und aus der 4 zu 5 ändern, bringt nicht viel, da man dann den Hintergrund sieht.
    mfg Freaky

  • Gruß,
    UEZ
    Wenn ich ein andere Hintergrundfarbe auswähle, wird diese nicht nicht stark schöner. Gibt es da keine andere lösung die mich zum Ziehl führt? Vielleicht mit der WinApi draufzeichenen?
    Sorry kenne mich da nicht so aus.
    Und aus der 4 zu 5 ändern, bringt nicht viel, da man dann den Hintergrund sieht.
    mfg Freaky


    Ich wette mit Dir, wenn Du _WinAPI_SetLayeredWindowAttributes in der Funktion weglässt, dann ist die Schrift wieder normal.

    Du kannst natürlich auch versuchen mit der WinAPI den Text zu zeichnen.

    Sieh Dir mal _WinAPI_DrawText dazu an ...


    Gruß
    Greenhorn


  • Hey,
    ich habe mal _WinAPI_SetLayeredWindowAttributes weg gelassen und man sieht dann die Hintergrundfarbe vom Label.
    Und ist es möglich den Text, den man mit _WinAPI_DrawText erstellt, auch ändern?
    mfg Freaky