2 Bilder übereinander ohne HIntergrund

  • Hallo.
    Ich versuche schon seit gestern etwas, was ich nicht hinbekomme.
    Ich würde gerne 2 Bilder in einer GUI übereinander erstellen. Doch beim zweiten Bild drückt sich der Hintergrund immer durch das erste Bild durch.
    Gibt es eine möglichkeit das zu unterlassen.
    So kann man sich das Vorstellen (s.Anhang)
    Das Script zu diesem Beispiel wäre jetzt:

    Spoiler anzeigen
    [autoit]

    $hGUI = GUICreate("2 Bilder", 400, 400)
    GUISetBkColor(0xFF0000)
    GUICtrlCreatePic(@DesktopDir & "\Hund.jpg", 10, 10, 300, 300)
    GUICtrlCreateIcon(@DesktopDir & "\Player 1.ico", -1, 50, 50, 50, 50)
    GUISetState()

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

    DO
    Sleep(10)
    until GUIGetMsg() = -3
    Exit

    [/autoit]

    [Blockierte Grafik: http://www.autoit.de/file:///C:/Users/Christian/Desktop/2_2%20Bilder.jpg]

    Edit: Ich will, dass dieser rote Hinterteil des schwarzen Männchens weggeht ;)

  • häng doch mal bitte die Bilder mit an, sonst muss ich mir auch noch selber welche suchen ...

    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. ;)

  • Also soll dieses figürchen da den hintergrund von dem hund annehmen?

    dann musst du nur den hintergrund von der figur zu dem des hundes machen (also dieses warme weiß)
    seh ich das so richtig?

    MfG
    Alizame

  • Hi Alizame.
    Das Problem ist, (glaube ich zumindest ;) ), dass dieses Figürchen keinen Hintergrund hat.
    Aber weil sie 50x50 dargestellt wird:

    GUICtrlCreateIcon(@DesktopDir & "\Player 1.ico", -1, 50, 50, 50, 50)

    ist sie trotzdem ein Rechteck. Deshalb scheint glaub ich der rote Hintergrund der GUI durch. Und außerdem ist das eigentlich nur ein Beispielskript. In meinem anderen Skript sollen sich die Bilder auch ab und zu
    auf dem anderen Bild bewegen, und ich kann ja nicht dauernd den Hintergrund verändern.

  • Nur für die Leute die es wissen wollen.
    Ich hab mal ähnliche Threads gesucht. Und bin dadurch auf die Lösung gekommen.
    Hier ist die Lösung mit der UDF __SetIconAlpha

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.4.0
    Author: myName

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------
    #include <GUIConstantsEx.au3>
    #include <WinAPI.au3>

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

    $hGUI = GUICreate("2 Bilder", 400, 400)
    GUISetBkColor(0xFF0000)
    GUICtrlCreatePic(@DesktopDir & "\Hund.jpg", 10, 10, 300, 300)
    $hPic = GUICtrlCreatePic('', 50, 50, 50, 50)
    __SetIconAlpha($hPic, @DesktopDir & "\Player 1.ico", 0, 50, 50)

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

    GUISetState()

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

    DO
    Sleep(10)
    until GUIGetMsg() = -3
    Exit

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

    Func __SetIconAlpha($hWnd, $sIcon, $iIndex, $iWidth, $iHeight)
    If Not IsHWnd($hWnd) Then
    $hWnd = GUICtrlGetHandle($hWnd)
    If $hWnd = 0 Then
    Return SetError(1, 0, 0)
    EndIf
    EndIf
    Local $hIcon = __WinAPI_ShellExtractIcons($sIcon, $iIndex, $iWidth, $iHeight)
    If $hIcon = 0 Then
    Return SetError(1, 0, 0)
    EndIf
    Local $hBitmap, $hObj, $hDC, $hMem, $hSv
    $hDC = _WinAPI_GetDC($hWnd)
    $hMem = _WinAPI_CreateCompatibleDC($hDC)
    $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iWidth, $iHeight)
    $hSv = _WinAPI_SelectObject($hMem, $hBitmap)
    _WinAPI_DrawIconEx($hMem, 0, 0, $hIcon, $iWidth, $iHeight, 0, 0, 2)
    _WinAPI_ReleaseDC($hWnd, $hDC)
    _WinAPI_SelectObject($hMem, $hSv)
    _WinAPI_DeleteDC($hMem)
    _WinAPI_DestroyIcon($hIcon)
    _WinAPI_DeleteObject(_SendMessage($hWnd, 0x0172, 0, 0))
    _SendMessage($hWnd, 0x0172, 0, $hBitmap)
    $hObj = _SendMessage($hWnd, 0x0173)
    If $hObj <> $hBitmap Then
    _WinAPI_DeleteObject($hBitmap)
    EndIf
    Return 1
    EndFunc ;==>_SetIconAlpha

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

    Func __WinAPI_ShellExtractIcons($sIcon, $iIndex, $iWidth, $iHeight)
    Local $Ret = DllCall('shell32.dll', 'int', 'SHExtractIconsW', 'wstr', $sIcon, 'int', $iIndex, 'int', $iWidth, 'int', $iHeight, 'ptr*', 0, 'ptr*', 0, 'int', 1, 'int', 0)
    If (@error) Or ($Ret[0] = 0) Or ($Ret[5] = Ptr(0)) Then
    Return SetError(1, 0, 0)
    EndIf
    Return $Ret[5]
    EndFunc ;==>_WinAPI_ShellExtractIcons

    [/autoit]

    Danke an alle