Bilder als Buttons bei GDI+ Hintergrund Bild + Hover

  • Hallo,
    ich möchte eine Form machen mit schönen Bildern etc.
    Das Problem ist, wenn ich ein Button als Bild darstelle mit GuiCtrlCreatePic hinbatsche, dann ist mein Hintergrundbild, dass mit GDI+ dargestellt wird, schwarz.
    Nun habe ich es versuchen mit dem selben weg, wie ich das Hintergrundbild dargestellt habe, meine Buttons darzustellen.
    Leider kommt das Bild irgend wo auf dem Desktop und nicht in der Gui obwohl ich ein Parent angegeben habe.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #Include <WinAPI.au3>
    #include <IE.au3>

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

    Global $hGUI, $hImage, $hGraphic, $hImage
    Global Const $SC_DRAGMOVE = 0xF012
    Global $iImagePfad = @ScriptDir & "\Bilder\", $i

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

    _GDIPlus_StartUp()
    $hImage = _GDIPlus_ImageLoadFromFile($iImagePfad & "background.png")
    $iWidth = _GDIPlus_ImageGetWidth($hImage)
    $iHeight = _GDIPlus_ImageGetHeight($hImage)

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

    $oIE=_IECreateEmbedded()

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

    ; Create GUI
    $hGUI = GUICreate("Test", $iWidth, $iHeight, -5000, -5000, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_TOPMOST)
    $hGUI_child = GUICreate("", $iWidth, $iHeight, -5000, -5000, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_TOPMOST + $WS_EX_MDICHILD, $hGUI)
    GUISetBkColor(0, $hGUI_child)
    GUISetState(@SW_SHOW, $hGUI)
    GUISetState(@SW_SHOW, $hGUI_child)
    SetTransparentBitmap($hGUI, $hImage)
    _WinAPI_SetLayeredWindowAttributes($hGUI_child, 0x00, 0xff)

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

    GUICtrlCreateButton ("hallo",50,50,134,33)
    _GuiCtrlCreatePic ($hGUI_child,$iImagePfad & "\start_1.png",100,100)
    ;~ GUICtrlCreatePic ($iImagePfad & "\start_1.jpg",50,50,143,33)

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

    ;~ GUICtrlCreateObj ($oIE,50,50,100,100)
    ;~ _IENavigate($oIE, 'http://google.de')

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

    GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")

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

    WinMove ($hGUI,"",(@DesktopWidth/2)-($iWidth/2),(@DesktopHeight/2)-($iHeight/2))
    WinMove ($hGUI_child,"",(@DesktopWidth/2)-($iWidth/2),(@DesktopHeight/2)-($iHeight/2))

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch
    WEnd

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

    ; Clean up resources
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_ShutDown()
    Exit

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

    ; Draw PNG image
    Func MY_WM_PAINT($hWnd, $Msg, $wParam, $lParam)
    _GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 0, 0)
    _WinAPI_RedrawWindow($hGUI, 0, 0, 1)
    Return $GUI_RUNDEFMSG
    EndFunc

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

    Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
    _SendMessage($hGUI, $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)
    $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_ReleaseDC(0, $hScrDC)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
    EndFunc ;==>SetBitmap

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

    Func _GuiCtrlCreatePic ($gGui, $iPicture, $iX = 0, $iY = 0)
    $gImage = _GDIPlus_ImageLoadFromFile($iPicture)
    $gWidth = _GDIPlus_ImageGetWidth($hImage)
    $gHeight = _GDIPlus_ImageGetHeight($hImage)

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

    $iGui = GUICreate ("",$gWidth,$gHeight,$iX,$iY, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_TOPMOST, $gGui)
    GUISetBkColor(0, $iGui)
    GUISetState(@SW_SHOW, $iGui)
    SetTransparentBitmap($iGui, $gImage)
    EndFunc

    [/autoit]


    Bilder sind unten im Anhang.

    Ich hoffe ihr könnt mir helfen :)
    mfg Freaky

    PS: Wenn ihr es rausgefunden habt, und mir bei meinem zweiten Problem helfen könnt, liest bitte den Spoiler.

    Spoiler anzeigen

    Ich habe ein IE Object ausgeklammert. Weiß einer wie ich eine Webseite ohne den IE Object Rand darstellen kann? Also als ob die Webseite zu der Form gehört?

  • Hmm, leider sitze ich immer noch an dem Problem.
    Vielleicht liegt es auch daran, dass ich nur Nachts antworten kann. Aber daran kann ich nichts ändern, wenn ich schon in den USA lebe >.>
    Also Leute, bitte hilft mir oder schickt den Thread an Leute weiter, die mir vielleicht helfen können :)
    mfg Freaky

  • [autoit]

    Error opening the file.:
    #include <GDIpProgress.au3>

    [/autoit]

    Bitte die UDF mit Anhängen

  • Um per GDI+ Buttons mit Grafiken (sogar animiert) zu erstellen hab ich schonmal eine Funktionssammlung erstellt. Die müsste dein Problem lösen.

    Klick

    lg
    M

  • Danke Marsi, aber leider geht deine UDF an meiner Form nicht. Ich vermute, dass mein Background es überlapt.
    Nun bin ich bei meiner Theorie weiter gekommen.
    Ich habe jetzt erfolgreich den Button in die Gui gebracht und ich kann jetzt auslesen ob draufgedrückt wird oder nur drauf ist auf dem Button.
    Das Problem ist jetzt, ich weiß nicht wie ich den Hover effekt erstellen kann.
    Da sind eigentlich 2 Probleme.
    1. Ich weiß nicht wie ich das Bild ändern kann.
    2. Ich weiß nicht wie ich die Abfrage richtig einbaue da ich ja vermutlich das Bild nicht einfach austauschen kann.

    Vorsicht bissig :D
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <WinAPI.au3>
    #include <IE.au3>
    #include <Misc.au3>
    #include <Array.au3>

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

    Global $hGUI, $hImage, $hGraphic, $hImage, $gButtons[1][3]
    Global Const $SC_DRAGMOVE = 0xF012
    Global $iImagePfad = @ScriptDir & "\Bilder\", $i

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

    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($iImagePfad & "background.png")
    $iWidth = _GDIPlus_ImageGetWidth($hImage)
    $iHeight = _GDIPlus_ImageGetHeight($hImage)

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

    $oIE = _IECreateEmbedded()

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

    ; Create GUI
    $hGUI = GUICreate("Test", $iWidth, $iHeight, -5000, -5000, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_TOPMOST)
    $hGUI_child = GUICreate("", $iWidth, $iHeight, -5000, -5000, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_TOPMOST + $WS_EX_MDICHILD, $hGUI)
    GUISetBkColor(0, $hGUI_child)
    GUISetState(@SW_SHOW, $hGUI)
    GUISetState(@SW_SHOW, $hGUI_child)
    SetTransparentBitmap($hGUI, $hImage)
    _WinAPI_SetLayeredWindowAttributes($hGUI_child, 0x00, 0xff)

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

    $iButton1 = GUICtrlCreateButton("hallo", 50, 50, 134, 33)
    $iButton2 = _GuiCtrlCreatePic($hGUI_child, $iImagePfad & "\start_1.jpg", 100, 100)
    ;~ $iButton3 = _GuiCtrlCreatePic($hGUI, $iImagePfad & "\start_0.jpg", 200, 100)
    ;~ GUICtrlCreatePic ($iImagePfad & "\start_1.jpg",50,50,143,33)

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

    ;~ GUICtrlCreateObj ($oIE,50,50,100,100)
    ;~ _IENavigate($oIE, 'http://google.de')

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

    GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")

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

    WinMove($hGUI, "", (@DesktopWidth / 2) - ($iWidth / 2), (@DesktopHeight / 2) - ($iHeight / 2))
    WinMove($hGUI_child, "", (@DesktopWidth / 2) - ($iWidth / 2), (@DesktopHeight / 2) - ($iHeight / 2))

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch
    ToolTip(_ButtonHover($hGUI_child, $iButton2), 0, 0)

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

    WEnd

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

    ; Clean up resources
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    Exit

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

    ; Draw PNG image
    Func MY_WM_PAINT($hWnd, $Msg, $wParam, $lParam)
    _GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 0, 0)
    _WinAPI_RedrawWindow($hGUI, 0, 0, 1)
    Return $GUI_RUNDEFMSG
    EndFunc ;==>MY_WM_PAINT

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

    Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
    _SendMessage($hGUI, $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)
    $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_ReleaseDC(0, $hScrDC)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
    EndFunc ;==>SetTransparentBitmap

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

    Func _GuiCtrlCreatePic($gGui, $iPicture, $iX = 0, $iY = 0)
    $gImage = _GDIPlus_ImageLoadFromFile($iPicture)
    $gWidth = _GDIPlus_ImageGetWidth($gImage)
    $gHeight = _GDIPlus_ImageGetHeight($gImage)

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

    $iGui = GUICreate("", $gWidth, $gHeight, $iX, $iY, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $gGui)
    $iLabel = GUICtrlCreateLabel("", 0, 0, $gWidth, $gHeight)
    GUISetBkColor(0, $iGui)
    GUISetState(@SW_SHOW, $iGui)
    SetTransparentBitmap($iGui, $gImage)

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

    ;~ Local $iReturn[6] = [0, SetError(0, $iGui, $iLabel), $iX, $iY, $gWidth, $gHeight]

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

    Return SetError(0, $iGui, $iLabel)
    EndFunc ;==>_GuiCtrlCreatePic

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

    Func _ButtonCheckHover($iGui, $iButton)
    $iMouse = GUIGetCursorInfo($iGui)
    If ($iMouse[0] >= $iButton[2]) And _
    ($iMouse[0] <= $iButton[2] + $iButton[4]) And _
    ($iMouse[1] >= $iButton[3]) And _
    ($iMouse[1] <= $iButton[3] + $iButton[5]) Then ; Button hover
    If (_IsPressed("01")) Then
    Return 2
    Else
    Return 1
    EndIf
    Else
    Return False
    EndIf
    EndFunc ;==>_ButtonHover

    [/autoit]

    Ich hoffe ihr könnt mir helfen. Ich glaube sicher das mehrer Leute an sowas schon gescheitert sind :(
    mfg Freaky :)

  • Hi Freaky,

    versuche mal das hier einzubauen (ungetestet):

    Spoiler anzeigen
    [autoit]

    GUIRegisterMsg ($WM_MOUSEMOVE, "OnMouseMove")
    GUIRegisterMsg ($WM_MOUSEHOVER, "OnMouseHover")
    GUIRegisterMsg ($WM_MOUSELEAVE, "OnMouseLeave")

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

    ; ...

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

    Func OnMouseMove ($hwnd, $message, $wParam, $lParam)

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

    If ($hwnd == $iButton2) Then

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

    $tme = DllStructCreate ("DWORD cbSize; DWORD dwFlags; HWND hwndTrack; DWORD dwHoverTime;")
    DllStructSetData ($tme, "cbSize", DllStructGetSize ($tme))
    DllStructSetData ($tme, "dwFlags", BitOR (0x00000001, 0x00000002))
    DllStructSetData ($tme, "hwndTrack", $iButton2)
    DllStructSetData ($tme, "dwHoverTime", 50)

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

    DllCall ("user32.dll", "BOOL", "TrackMouseEvent", "ptr", DllStructGetPtr ($tme))

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

    EndIf

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

    Return $GUI_RUNDEFMSG

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

    EndFunc

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

    Func OnMouseHover ($hwnd, $message, $wParam, $lParam)

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

    If ($hwnd == $iButton2) Then

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

    ConsoleWrite (StringFormat ("+> WM_MOUSEHOVER\n"))

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

    EndIf

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

    Return $GUI_RUNDEFMSG

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

    EndFunc

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

    Func OnMouseLeave ($hwnd, $message, $wParam, $lParam)

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

    If ($hwnd == $iButton2) Then

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

    ConsoleWrite (StringFormat ("-> WM_MOUSELEAVE\n"))

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

    EndIf

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

    Return $GUI_RUNDEFMSG

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

    EndFunc

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


    Gruß
    Greenhorn


  • Vielen Dank, leider sehe ich darin irgend wie kein nutzen. Wie hast du es dir vorgestellt?
    Ich sehe was es vermutlich macht. Leider kann ich damit das Bild nicht ändern um den Hovereffekt darzustellen.
    Ich brauche da doch ein etwas größeren Denkanstaoß :)
    mfg Freaky

  • Hilft dir das hier weiter:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <GuiButton.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    ;~ #Include <WinAPI.au3>
    #include <IE.au3>

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

    Global $hGUI, $hImage, $hGraphic, $hImage
    Global Const $SC_DRAGMOVE = 0xF012
    Global $iImagePfad = @ScriptDir & "\Bilder\", $i

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

    Global Const $IMAGE_BITMAP = 0
    Global Const $STM_SETIMAGE = 0x0172

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

    _GDIPlus_StartUp()
    $hImage = _GDIPlus_ImageLoadFromFile($iImagePfad & "background.png")
    $hImage_Pic1 = _GDIPlus_ImageLoadFromFile($iImagePfad & "start_2.png")
    $hImage_Pic2 = _GDIPlus_ImageLoadFromFile($iImagePfad & "start_1.png")

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

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

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

    $hHBMP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    $hHBMP_Pic1 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage_Pic1)
    $hHBMP_Pic2 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage_Pic2)

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

    ;~ $oIE=_IECreateEmbedded()

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

    ; Create GUI
    $hGUI = GUICreate("Test", $iWidth, $iHeight, -1, -1, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_TOPMOST)
    $idBackgroundPic = GUICtrlCreatePic("", 0, 0, $iWidth, $iHeight)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $idPic = GUICtrlCreatePic("",50,50,126,38)
    GUISetState(@SW_SHOW, $hGUI)
    _WinAPI_DeleteObject(GUICtrlSendMsg($idBackgroundPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBMP))

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

    SetTransparentBitmap($hGUI, $hImage)

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

    ;~ GUICtrlCreatePic ($iImagePfad & "\start_1.jpg",50,50,143,33)

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

    ;~ GUICtrlCreateObj ($oIE,50,50,100,100)
    ;~ _IENavigate($oIE, 'http://google.de')

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

    GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")

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

    $isHover = False
    $mem = True

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $idPic
    MsgBox(262144, "Test", "Test")
    EndSwitch
    $aCoord = GUIGetCursorInfo($hGUI)
    If $aCoord[4] = $idPic Then

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

    If Not $isHover Then
    GUICtrlSendMsg($idPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBMP_Pic1)
    $isHover = True
    $mem = True
    EndIf
    Else
    If $mem Then
    GUICtrlSendMsg($idPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBMP_Pic2)
    $mem = False
    $isHover = False
    EndIf
    EndIf

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

    WEnd

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

    ; Clean up resources
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_ImageDispose($hImage_Pic1)
    _GDIPlus_ImageDispose($hImage_Pic2)
    _WinAPI_DeleteObject($hHBMP)
    _WinAPI_DeleteObject($hHBMP_Pic1)
    _WinAPI_DeleteObject($hHBMP_Pic2)
    _GDIPlus_ShutDown()
    Exit

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

    Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
    _SendMessage($hGUI, $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)
    $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_ReleaseDC(0, $hScrDC)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
    EndFunc ;==>SetBitmap

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    2 Mal editiert, zuletzt von UEZ (28. Dezember 2011 um 09:11)

  • Hey danke :)
    Es ist fast geschafft. Ich brauche jetzt nur das Bild als Button und ein zweites Bild als Hover dafür. Nicht ein normalen Button und ein Hover drüber :)
    Leider bekomme ich es irgend wie nicht wirklich hin mit einer Funktion um ein Button als Bild darzustellen :(

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiButton.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    ;~ #Include <WinAPI.au3>
    #include <IE.au3>

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

    Global $hGUI, $hImage, $hGraphic, $hImage
    Global Const $SC_DRAGMOVE = 0xF012
    Global $iImagePfad = @ScriptDir & "\Bilder\", $i

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

    Global Const $IMAGE_BITMAP = 0
    Global Const $STM_SETIMAGE = 0x0172

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

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

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

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

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

    $hHBMP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    $hHBMP_Button = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage_Button)

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

    $oIE=_IECreateEmbedded()

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

    ; Create GUI
    $hGUI = GUICreate("Test", $iWidth, $iHeight, -1, -1, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_TOPMOST)
    $idBackgroundPic = GUICtrlCreatePic("", 0, 0, $iWidth, $iHeight)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $idButton = _GuiCtrlCreatePic ($hGUI,$iImagePfad & "start_2.png",50,50, $BS_BITMAP)
    GUISetState(@SW_SHOW, $hGUI)
    _WinAPI_DeleteObject(GUICtrlSendMsg($idBackgroundPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBMP))

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

    SetTransparentBitmap($hGUI, $hImage)

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

    ;~ GUICtrlCreatePic ($iImagePfad & "\start_1.jpg",50,50,143,33)

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

    ;~ GUICtrlCreateObj ($oIE,50,50,100,100)
    ;~ _IENavigate($oIE, 'http://google.de')

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

    GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $idButton[1]
    _WinAPI_DeleteObject(GUICtrlSendMsg($idButton[1], $BM_SETIMAGE, $IMAGE_BITMAP, $hHBMP_Button))
    MsgBox (0,"","Ho ho ho")
    EndSwitch
    WEnd

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

    ; Clean up resources
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_ImageDispose($hImage_Button)
    _WinAPI_DeleteObject($hHBMP)
    _WinAPI_DeleteObject($hHBMP_Button)
    _GDIPlus_ShutDown()
    Exit

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

    Func _GuiCtrlCreatePic($gGui, $iPicture, $iX = 0, $iY = 0, $iStyle = "")
    $gImage = _GDIPlus_ImageLoadFromFile($iPicture)
    $gWidth = _GDIPlus_ImageGetWidth($gImage)
    $gHeight = _GDIPlus_ImageGetHeight($gImage)

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

    $iGui = GUICreate("", $gWidth, $gHeight, $iX, $iY, $WS_POPUP + $iStyle, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $gGui)
    $iLabel = GUICtrlCreateLabel("", 0, 0, $gWidth, $gHeight)
    GUISetBkColor(0, $iGui)
    GUISetState(@SW_SHOW, $iGui)
    SetTransparentBitmap($iGui, $gImage)

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

    Local $iReturn[6] = [0, SetError(0, $iGui, $iLabel), $iX, $iY, $gWidth, $gHeight]

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

    Return $iReturn
    EndFunc ;==>_GuiCtrlCreatePic

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

    Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
    _SendMessage($hGUI, $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)
    $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_ReleaseDC(0, $hScrDC)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
    EndFunc ;==>SetBitmap

    [/autoit]

    mfg Freaky

    ps: Habe im Anhang noch das zweite Bild für den Hover drangemacht.

  • Hey, das sieht ja schon richtig gut aus, danke.
    Problem ist jetzt aber, das man den Rand des Buttons sieht. Ich möchte halt, ein Bild als Button aber so das man nur das Bild sieht und nix anderes.
    Habe jetzt an deinem Beispiel versucht einfach den Button zu verkleiner, aber oben und links sieht man noch ein 1px weißen Rand >.>
    Und gibt es vll. eine etwas kleinere Lösung dafuer? Weil ich brauche 8 Buttons mit jeweils einen Hover und am Ende wird es etwas unübersichtlich :(
    Trotzdem supper Leistung danke. Bräuchte nur noch den linken und oberen Rand weg :)
    mfg Freaky

  • Hmm, nicht so ganz :(
    Habe es jetzt mal GUICtrlCreateButton mit GUICtrlCreatePic ersetzt und es wird kein Bild mehr angezeigt. Leider bringt es auch nichts, wenn ich ein Pfad zu einem Bild bei GUICtrlCreatePic einfüge.

  • Dachte mir schon, dass die Frage kommen würde. Deshalb hatte ich breits den Code im Beitrag #9 angepasst.

    Gruß,
    UEZ ;)

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Ok vielen dank. Das funktioniert auch supper :)
    Jetzt habe ich versucht das alles in eine Funktion zu machen, sodass mein ganzer Haufen kleiner wird. Leider wird nichts mehr angezeigt. Soweit ich richtig sehe, habe ich aber alles richtig uebernommen. Ich vermute es liegt daran, dass GUIGetCursorInfo das Bild garnicht mehr in der Form wieder findet. Warum dies so ist, habe ich gerade garkein blassen schimmer :(

    Dazu ist ein zweites Problem aufgetreten. Ich benöte am Ende ebenfalls ein IE Object in der Form. Leider wird das IE Object einfach ein Transparentes Fenster. Wobei, ich den Rand des IE Objectes weg haben möchte was hierbei ja schon geschehen ist :)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiButton.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    ;~ #Include <WinAPI.au3>
    #include <IE.au3>

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

    Global $hGUI, $hImage, $hGraphic, $hImage
    Global Const $SC_DRAGMOVE = 0xF012
    Global $iImagePfad = @ScriptDir & "\Bilder\", $i

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

    Global Const $IMAGE_BITMAP = 0
    Global Const $STM_SETIMAGE = 0x0172

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

    _GDIPlus_StartUp()
    $hImage = _GDIPlus_ImageLoadFromFile($iImagePfad & "background.png")
    ;~ $hImage_Pic1 = _GDIPlus_ImageLoadFromFile($iImagePfad & "start_2.png")
    ;~ $hImage_Pic2 = _GDIPlus_ImageLoadFromFile($iImagePfad & "start_1.png")

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

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

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

    $hHBMP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    ;~ $hHBMP_Pic1 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage_Pic1)
    ;~ $hHBMP_Pic2 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage_Pic2)

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

    $oIE=_IECreateEmbedded()

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

    ; Create GUI
    $hGUI = GUICreate("Test", $iWidth, $iHeight, -1, -1, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_TOPMOST)
    $idBackgroundPic = GUICtrlCreatePic("", 0, 0, $iWidth, $iHeight)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    GUICtrlCreateObj ($oIE,50,200,100,100)
    _IENavigate($oIE, 'http://google.de')

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

    GUISetState(@SW_SHOW, $hGUI)
    ;~ $idPic = GUICtrlCreatePic("",50,50,126,38)
    $iButton = _CreateButton ("start_1.png","start_1.png",100,100)
    _WinAPI_DeleteObject(GUICtrlSendMsg($idBackgroundPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBMP))

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

    SetTransparentBitmap($hGUI, $hImage)

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

    GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")

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

    $isHover = False
    $mem = True

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $iButton[1]
    MsgBox(262144, "Test", "Test")
    EndSwitch
    $aCoord = GUIGetCursorInfo($hGUI)
    ToolTip ($aCoord[4],0,0)
    If $aCoord[4] = $iButton[1] Then
    If Not $isHover Then
    GUICtrlSendMsg($iButton[1], $STM_SETIMAGE, $IMAGE_BITMAP, $iButton[2])
    $isHover = True
    $mem = True
    EndIf
    Else
    If $mem Then
    GUICtrlSendMsg($iButton[1], $STM_SETIMAGE, $IMAGE_BITMAP, $iButton[3])
    $mem = False
    $isHover = False
    EndIf
    EndIf

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

    WEnd

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

    ; Clean up resources
    _GDIPlus_ImageDispose($hImage)
    ;~ _GDIPlus_ImageDispose($hImage_Pic1)
    ;~ _GDIPlus_ImageDispose($hImage_Pic2)
    _WinAPI_DeleteObject($hHBMP)
    ;~ _WinAPI_DeleteObject($hHBMP_Pic1)
    ;~ _WinAPI_DeleteObject($hHBMP_Pic2)
    _GDIPlus_ShutDown()
    Exit

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

    Func _CreateButton ($iPicture1, $iPicture2, $iX, $iY)
    $bImage_Pic1 = _GDIPlus_ImageLoadFromFile($iPicture1)
    $bImage_Pic2 = _GDIPlus_ImageLoadFromFile($iPicture2)

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

    $bHBMP_Pic1 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($bImage_Pic1)
    $bHBMP_Pic2 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($bImage_Pic2)

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

    $bWidth = _GDIPlus_ImageGetWidth($bImage_Pic1)
    $bHeight = _GDIPlus_ImageGetHeight($bImage_Pic1)

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

    $bPicture = GUICtrlCreatePic("",$iX,$iY,$bWidth,$bHeight)

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

    Local $bReturn[5] = [3,$bPicture,$bHBMP_Pic1,$bHBMP_Pic2]
    Return $bReturn
    EndFunc

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

    Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
    _SendMessage($hGUI, $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)
    $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_ReleaseDC(0, $hScrDC)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
    EndFunc ;==>SetBitmap

    [/autoit]

    mfg Freaky

  • Heyho,
    leider sitze ich immer noch an diesem Problem.
    Mitlerweile geht es mir eher um das IE Object. Es ist einfach ein durchsitiges Loch und nicht die Internet Seite und ich finde keine Lösung dafuer ... :(
    Ich bitte euch um Hilfe.
    mfg Freaky

  • Moin Freaky,

    was die Schaltfläche betrifft:

    [autoit]

    _CreateButton ($iImagePfad & "start_1.png",$iImagePfad & "start_1.png",100,100)

    [/autoit]

    Und der eingebettete IE ist bei mir ganz normal zu sehen ...

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Constants.au3>
    #include <GDIPlus.au3>
    #include <IE.au3>
    #include <GuiButton.au3>

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

    Global $hGUI, $hImage, $hGraphic, $hImage
    Global $iImagePfad = @ScriptDir & "\Bilder\", $i

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

    Global Const $STM_SETIMAGE = 0x0172
    Global Const $SC_DRAGMOVE = 0xF012

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

    _GDIPlus_StartUp()
    $hImage = _GDIPlus_ImageLoadFromFile($iImagePfad & "background.png")
    ;~ $hImage_Pic1 = _GDIPlus_ImageLoadFromFile($iImagePfad & "start_2.png")
    ;~ $hImage_Pic2 = _GDIPlus_ImageLoadFromFile($iImagePfad & "start_1.png")

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

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

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

    $hHBMP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    ;~ $hHBMP_Pic1 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage_Pic1)
    ;~ $hHBMP_Pic2 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage_Pic2)

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

    $oIE=_IECreateEmbedded()

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

    ; Create GUI
    $hGUI = GUICreate("Test", $iWidth, $iHeight, -1, -1, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_TOPMOST)
    $idBackgroundPic = GUICtrlCreatePic("", 0, 0, $iWidth, $iHeight)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    GUICtrlCreateObj ($oIE,50,200,150,150)
    _IENavigate($oIE, 'http://google.de')

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

    ;~ $idPic = GUICtrlCreatePic("",50,50,126,38)
    $iButton = _CreateButton ($iImagePfad & "start_1.png",$iImagePfad & "start_1.png",100,100)
    GUICtrlSendMsg($idBackgroundPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBMP)

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

    SetTransparentBitmap($hGUI, $hImage)
    GUISetState(@SW_SHOW, $hGUI)

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

    GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")

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

    $isHover = False
    $mem = True

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $iButton[1]
    ContinueCase
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch
    $aCoord = GUIGetCursorInfo($hGUI)
    ToolTip ($aCoord[4],0,0)
    If $aCoord[4] = $iButton[1] Then
    If Not $isHover Then
    GUICtrlSendMsg($iButton[1], $STM_SETIMAGE, $IMAGE_BITMAP, $iButton[2])
    $isHover = True
    $mem = True
    EndIf
    Else
    If $mem Then
    GUICtrlSendMsg($iButton[1], $STM_SETIMAGE, $IMAGE_BITMAP, $iButton[3])
    $mem = False
    $isHover = False
    EndIf
    EndIf

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

    WEnd

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

    ; Clean up resources
    _GDIPlus_ImageDispose($hImage)
    ;~ _GDIPlus_ImageDispose($hImage_Pic1)
    ;~ _GDIPlus_ImageDispose($hImage_Pic2)
    _WinAPI_DeleteObject($hHBMP)
    _WinAPI_DeleteObject($iButton[2])
    _WinAPI_DeleteObject($iButton[3])
    _GDIPlus_ShutDown()
    Exit

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

    Func _CreateButton ($iPicture1, $iPicture2, $iX, $iY)

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

    Local $bImage_Pic1, $bImage_Pic2
    Local $bHBMP_Pic1, $bHBMP_Pic2
    Local $bWidth, $bHeight, $bPicture

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

    $bImage_Pic1 = _GDIPlus_ImageLoadFromFile($iPicture1)
    $bImage_Pic2 = _GDIPlus_ImageLoadFromFile($iPicture2)

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

    $bHBMP_Pic1 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($bImage_Pic1)
    $bHBMP_Pic2 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($bImage_Pic2)

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

    $bWidth = _GDIPlus_ImageGetWidth($bImage_Pic1)
    $bHeight = _GDIPlus_ImageGetHeight($bImage_Pic1)

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

    $bPicture = GUICtrlCreatePic("",$iX,$iY,$bWidth,$bHeight)

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

    Local $bReturn[5] = [3,$bPicture,$bHBMP_Pic1,$bHBMP_Pic2]
    Return $bReturn
    EndFunc

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

    Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
    _SendMessage($hGUI, $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)
    $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_ReleaseDC(0, $hScrDC)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
    EndFunc ;==>SetBitmap

    [/autoit]


    Gruß
    Greenhorn


  • Hey, vielen Dank ich idiot ... :D
    Ok zum IE Problem. Bei mir wurde es plötzlich auch gerade angezeigt. Leider, wenn ich reinklicke komme ich zu dem Object hinter meiner Form.
    Ich habe das nun gelöst, indem ich das IE Object auf eine neue Form gepackt habe und die Form als Child an die erste Form getan.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiButton.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    ;~ #Include <WinAPI.au3>
    #include <IE.au3>

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

    Global $hGUI, $hImage, $hGraphic, $hImage
    Global Const $SC_DRAGMOVE = 0xF012
    Global $iImagePfad = @ScriptDir & "\Bilder\", $i

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

    Global Const $IMAGE_BITMAP = 0
    Global Const $STM_SETIMAGE = 0x0172

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

    _GDIPlus_StartUp()
    $hImage = _GDIPlus_ImageLoadFromFile($iImagePfad & "background.png")
    ;~ $hImage_Pic1 = _GDIPlus_ImageLoadFromFile($iImagePfad & "start_2.png")
    ;~ $hImage_Pic2 = _GDIPlus_ImageLoadFromFile($iImagePfad & "start_1.png")

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

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

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

    $hHBMP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    ;~ $hHBMP_Pic1 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage_Pic1)
    ;~ $hHBMP_Pic2 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage_Pic2)

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

    $oIE=_IECreateEmbedded()

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

    ; Create GUI
    $hGUI = GUICreate("Test", $iWidth, $iHeight, -1, -1, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_TOPMOST)
    $idBackgroundPic = GUICtrlCreatePic("", 0, 0, $iWidth, $iHeight)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    GUISetState(@SW_SHOW, $hGUI)
    $idPic = GUICtrlCreatePic("",50,50,126,38)
    $iButton = _CreateButton ($iImagePfad & "start_1.png",$iImagePfad & "start_2.png",100,100)
    _WinAPI_DeleteObject(GUICtrlSendMsg($idBackgroundPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBMP))

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

    SetTransparentBitmap($hGUI, $hImage)

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

    GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")

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

    _CreateIEObject($hGUI,$oIE,200,50,200,200)
    _IENavigate($oIE, 'http://google.de')

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

    $isHover = False
    $mem = True

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $iButton[1]
    MsgBox(262144, "Test", "Test")
    EndSwitch
    $aCoord = GUIGetCursorInfo($hGUI)
    If $aCoord[4] = $iButton[1] Then
    If Not $isHover Then
    GUICtrlSendMsg($iButton[1], $STM_SETIMAGE, $IMAGE_BITMAP, $iButton[2])
    $isHover = True
    $mem = True
    EndIf
    Else
    If $mem Then
    GUICtrlSendMsg($iButton[1], $STM_SETIMAGE, $IMAGE_BITMAP, $iButton[3])
    $mem = False
    $isHover = False
    EndIf
    EndIf

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

    WEnd

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

    ; Clean up resources
    _GDIPlus_ImageDispose($hImage)
    ;~ _GDIPlus_ImageDispose($hImage_Pic1)
    ;~ _GDIPlus_ImageDispose($hImage_Pic2)
    _WinAPI_DeleteObject($hHBMP)
    ;~ _WinAPI_DeleteObject($hHBMP_Pic1)
    ;~ _WinAPI_DeleteObject($hHBMP_Pic2)
    _GDIPlus_ShutDown()
    Exit

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

    Func _CreateIEObject ($iForm,$iVar,$iX,$iY,$iW,$iH)
    $iIEForm = GUICreate ("",$iX,$iY,$iW,$iH,$WS_POPUP, $WS_EX_MDICHILD, $iForm)
    GUICtrlCreateObj ($iVar,0,0,$iW,$iH)
    GUISetState (@SW_SHOW,$iIEForm)
    EndFunc

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

    Func _CreateButton ($iPicture1, $iPicture2, $iX, $iY)
    $bImage_Pic1 = _GDIPlus_ImageLoadFromFile($iPicture1)
    $bImage_Pic2 = _GDIPlus_ImageLoadFromFile($iPicture2)

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

    $bHBMP_Pic1 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($bImage_Pic1)
    $bHBMP_Pic2 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($bImage_Pic2)

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

    $bWidth = _GDIPlus_ImageGetWidth($bImage_Pic1)
    $bHeight = _GDIPlus_ImageGetHeight($bImage_Pic1)

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

    $bPicture = GUICtrlCreatePic("",$iX,$iY,$bWidth,$bHeight)

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

    Local $bReturn[5] = [3,$bPicture,$bHBMP_Pic1,$bHBMP_Pic2]
    Return $bReturn
    EndFunc

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

    Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
    _SendMessage($hGUI, $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)
    $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_ReleaseDC(0, $hScrDC)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
    EndFunc ;==>SetBitmap

    [/autoit]


    Und hier der Code, für die Leute die es vielleicht irgend wann einmal brauchen :)
    mfg Freaky


    Edit:
    Ok, mir ist was aufgefallen. Wenn ich die Form, ueber was nicht weißes mache, dann sieht man den Schatten nicht.
    [Blockierte Grafik: http://s3.imgimg.de/uploads/background904b22d6png.png]
    Ich habe ja bereits mit UEZ Hilfe ein Hintergrund hinbekommen und ein Button ebenfalls oben drauf. Dies funktioniert supper mit dem Schatten:
    [Blockierte Grafik: http://s3.imgimg.de/uploads/background2672aa147png.png]
    Ich brauche jetzt aber bei dem zweiten Beispiel den Button als Bilder und nicht normaler Button.
    Hier ist noch einmal der Code, der so ist wie ich es brauche aber nur der Button Falsch ist.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <WinAPI.au3>
    #include <GDIpProgress.au3>
    #include <IE.au3>
    #include <Misc.au3>
    #include <GuiButton.au3>

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

    Global $hGUI, $hImage, $hGraphic, $hImage
    Global Const $SC_DRAGMOVE = 0xF012
    Global Const $IMAGE_BITMAP = 0
    Global Const $STM_SETIMAGE = 0x0172
    Global $iImagePfad = @ScriptDir & "\Bilder\", $i

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

    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($iImagePfad & "background.png")
    $hHBMP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    $iWidth = _GDIPlus_ImageGetWidth($hImage)
    $iHeight = _GDIPlus_ImageGetHeight($hImage)

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

    $hImage_Button = _GDIPlus_ImageLoadFromFile($iImagePfad & "start_0.jpg")
    $hHBMP_Button = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage_Button)

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

    $oIE = _IECreateEmbedded()

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

    ; Create GUI
    $hGUI = GUICreate("Test", $iWidth, $iHeight, -5000, -5000, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_TOPMOST)
    $hGUI_child = GUICreate("", $iWidth, $iHeight, -5000, -5000, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_TOPMOST + $WS_EX_MDICHILD, $hGUI)
    GUISetBkColor(0, $hGUI_child)

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

    $idBackgroundPic = GUICtrlCreatePic("", 0, 0, $iWidth, $iHeight)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    GUISetState(@SW_SHOW, $hGUI)
    GUISetState(@SW_SHOW, $hGUI_child)
    SetTransparentBitmap($hGUI, $hImage)
    _WinAPI_SetLayeredWindowAttributes($hGUI_child, 0x00, 0xff)

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

    _WinAPI_DeleteObject(GUICtrlSendMsg($idBackgroundPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBMP))

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

    $iButton1 = GUICtrlCreateButton("hallo", 50, 50, 134, 33,$BS_BITMAP)
    $iButton2 = _GuiCtrlCreatePic($hGUI_child, $iImagePfad & "\start_1.jpg", 100, 100)
    ;~ $iButton3 = _GuiCtrlCreatePic($hGUI, $iImagePfad & "\start_0.jpg", 200, 100)
    ;~ GUICtrlCreatePic ($iImagePfad & "\start_1.jpg",50,50,143,33)

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

    ;~ GUICtrlCreateObj ($oIE,50,50,100,100)
    ;~ _IENavigate($oIE, 'http://google.de')

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

    GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")

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

    WinMove($hGUI, "", (@DesktopWidth / 2) - ($iWidth / 2), (@DesktopHeight / 2) - ($iHeight / 2))
    WinMove($hGUI_child, "", (@DesktopWidth / 2) - ($iWidth / 2), (@DesktopHeight / 2) - ($iHeight / 2))

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $iButton2[1]
    _WinAPI_DeleteObject(GUICtrlSendMsg($iButton2[1], $BM_SETIMAGE, $IMAGE_BITMAP, $hHBMP_Button))
    _WinAPI_DeleteObject(GUICtrlSendMsg($iButton1, $BM_SETIMAGE, $IMAGE_BITMAP, $hHBMP_Button))
    EndSwitch

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

    If _ButtonHover($hGUI_child, $iButton2) Then
    _WinAPI_DeleteObject(GUICtrlSendMsg($iButton2[1], $BM_SETIMAGE, $IMAGE_BITMAP, $hHBMP_Button))
    EndIf
    WEnd

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

    ; Clean up resources
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    Exit

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

    ; Draw PNG image
    Func MY_WM_PAINT($hWnd, $Msg, $wParam, $lParam)
    _GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 0, 0)
    _WinAPI_RedrawWindow($hGUI, 0, 0, 1)
    Return $GUI_RUNDEFMSG
    EndFunc ;==>MY_WM_PAINT

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

    Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
    _SendMessage($hGUI, $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)
    $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_ReleaseDC(0, $hScrDC)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
    EndFunc ;==>SetTransparentBitmap

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

    Func _GuiCtrlCreatePic($gGui, $iPicture, $iX = 0, $iY = 0)
    $gImage = _GDIPlus_ImageLoadFromFile($iPicture)
    $gWidth = _GDIPlus_ImageGetWidth($gImage)
    $gHeight = _GDIPlus_ImageGetHeight($gImage)

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

    $iGui = GUICreate("", $gWidth, $gHeight, $iX, $iY, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $gGui)
    $iLabel = GUICtrlCreateLabel("", 0, 0, $gWidth, $gHeight)
    GUISetBkColor(0, $iGui)
    GUISetState(@SW_SHOW, $iGui)
    SetTransparentBitmap($iGui, $gImage)

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

    Local $iReturn[6] = [0, SetError(0, $iGui, $iLabel), $iX, $iY, $gWidth, $gHeight]

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

    Return $iReturn
    EndFunc ;==>_GuiCtrlCreatePic

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

    Func _ButtonHover($iGui, $iButton)
    $iMouse = GUIGetCursorInfo($iGui)
    If ($iMouse[0] >= $iButton[2]) And _
    ($iMouse[0] <= $iButton[2] + $iButton[4]) And _
    ($iMouse[1] >= $iButton[3]) And _
    ($iMouse[1] <= $iButton[3] + $iButton[5]) Then ; Button hover
    If (_IsPressed("01")) Then
    Return 2
    Else
    Return 1
    EndIf
    Else
    Return False
    EndIf
    EndFunc ;==>_ButtonHover

    [/autoit]


    Ich hoffe ihr könnt mir jetzt immer noch helfen :(
    mfg Freaky

    2 Mal editiert, zuletzt von Freaky (7. Januar 2012 um 06:36)