Transperentes Gif wird nicht transperent angezeigt

  • Hey@all

    Ich habe ein GuiCtrlCreate mit einem Gif gemacht, das einen transperenten Bereich hat.
    Leider wird dies nicht unterstützt. Es wird legetlich wird ein weißer Bereich angezeigt.

    Wie kann ich das verbessern?
    Ich habe das Bild mit GIMP erstellt, es wird aber immer ein transperenter Bereich angezeigt.

    MfG AntiSpeed

    Nur keine Hektik - das Leben ist stressig genug

  • Hier Skript:

    Spoiler anzeigen
    [autoit]


    $bg="BackGround.gif"
    $menu="Menu.gif"
    $txt="titel"
    $width=500
    $heigth=200
    $left=50
    $top=50
    $HGui = GUICreate($txt,$width,$heigth,$left,$top,$WS_POPUP)
    $heigth_menu=20
    GUICtrlCreatePic($bg,0,0+$heigth_menu,$width,$heigth-$heigth_menu)
    GUICtrlCreatePic($menu,0,0,$width,$heigth_menu,-1,$GUI_WS_EX_PARENTDRAG)
    $width_action=20
    $abstand=4
    GUICtrlCreatePic("exit.jpg",$abstand,$abstand,$heigth_menu-2*$abstand,$heigth_menu-2*$abstand) ;icon
    GUICtrlCreateLabel($txt,$heigth_menu+$abstand,$abstand,-1,$GUI_BKCOLOR_TRANSPARENT )
    GUICtrlSetBkColor(-1,-2)
    GUICtrlCreatePic("exit.jpg",$width-$width_action-$abstand,$abstand,$width_action,$heigth_menu-2*$abstand) ;close
    GUICtrlCreatePic("exit.jpg",$width-2*$width_action-2*$abstand,$abstand,$width_action,$heigth_menu-2*$abstand) ;verkleinern,vergrößern
    GUICtrlCreatePic("exit.jpg",$width-3*$width_action-3*$abstand,$abstand,$width_action,$heigth_menu-2*$abstand) ;minimate
    GUICtrlCreateButton("Button 2", 10, 30, 150)
    GUICtrlSetBkColor(-1,-2)
    GUICtrlCreateButton("Button 3", 10, 60, 150)
    GUICtrlSetBkColor(-1,-2)
    GUICtrlCreateButton("Button 4", 10, 90, 150)
    GUICtrlSetBkColor(-1,-2)
    GUICtrlCreateButton("Exit", 10, 120, 150)
    GUICtrlSetBkColor(-1,-2)
    GUISetState(@SW_SHOW)

    [/autoit]

    Nur keine Hektik - das Leben ist stressig genug

    Einmal editiert, zuletzt von Antispeed (7. Juli 2010 um 10:11)

  • GUICtrlCreatePic kann keine Transparenzen so weit ich weiß.
    Dazu musst du GDI+ verwenden.

  • Das ist nicht perfekt, aber so in etwa funktioniert es: (Es gibt noch Anzeigefehler bei Halbtransparenten Pixeln)

    Spoiler anzeigen
    [autoit]

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

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

    Global $hGUI, $hImage, $hGraphics
    _GDIPlus_Startup()
    OnAutoItExitRegister("_OnExit")

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

    $hGUI = GUICreate("test", 300, 200)
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    $hImage = _GDIPlus_ImageLoadFromFile(@MyDocumentsDir & "\Eigene Bilder\palogo.png")

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

    GUIRegisterMsg($WM_PAINT, "_MY_PAINT")
    GUISetState()

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

    Do

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

    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Func _MY_PAINT($hWnd, $uMsg, $wParam, $lParam)

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

    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hImage, 10, 10, 260, 52)

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

    Return $GUI_RUNDEFMSG
    EndFunc

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

    Func _OnExit()
    GUIRegisterMsg($WM_PAINT, "")
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    EndFunc

    [/autoit]
  • Hmm. Bei mir funkts. net:

    Spoiler anzeigen
    [autoit]


    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <Misc.au3>
    #include <GDIPlus.au3>
    #include <ScreenCapture.au3>
    #include <WinAPI.au3>
    Global $hGUI, $hImage, $hGraphics
    _GDIPlus_Startup()

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

    $hGUI = GUICreate("test", 300, 200,-1,-1,$WS_POPUP)
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    $hImage = _GDIPlus_ImageLoadFromFile("bg.jpg")

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

    GUIRegisterMsg($WM_PAINT, "_MY_PAINT")
    GUISetState()

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

    Do

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

    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    GUIRegisterMsg($WM_PAINT, "")
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()

    [/autoit]


    Da sind immer noch weiße Ecken...
    Mein bild im anhang.

  • In deinem Code steht jpg. Das ist nie transparent...
    Aber die GUI ist ja auch rechteckig, das musst du anderweitig ändern.

  • Sry.. So jetzt habe ich in GIF geändert und es hat so weit funkt.
    Aber die GUI ist noch an den Rändern zusehen, wo es transperent ist.

    Nur keine Hektik - das Leben ist stressig genug


  • Aber die GUI ist noch an den Rändern zusehen, wo es transperent ist.

    das ist doch Sinn und Zweck, dass die darunterliegende Gui zu sehen ist :!:

    Sry.. So jetzt habe ich in GIF geändert und es hat so weit funkt.

    schön, dann ist dein Problem ja gelöst, schön wäre es allerdings auch wenn du den Thread auf gelöst setzt. Einfach 1. Beitrag bearbeiten, Präfix (nähe Überschrift) ändern und speichern (absenden)

    mfg (Auto)Bert

  • Ich möchte jetzt aber noch wissen, wie man die GUI an dieser Stelle transperent bekommt.
    _GuiSetRoundCorners möchte ich nicht benutzen.

    Nur keine Hektik - das Leben ist stressig genug

  • Dann solltest du eventuell die Transparenz über eine bestimmte Farbe erstellen: _WinAPI_SetLayeredWindowAttributes ;)
    Oder such mal nach PNG GUI bei autoitscript.com

  • Das Beispiel sollte alles erklären: http://www.autoitscript.com/forum/index.php?showtopic=74560&st=0

    Spoiler anzeigen

    #include <GUIConstants.au3>
    #include <Constants.au3>
    #include <WindowsConstants.au3>
    #include <WINAPI.au3>


    #Region - GUI Create
    $gui = GUICreate("trans", 300, 400, -1, -1, -1, $WS_EX_LAYERED)
    GUICtrlCreateLabel("This is text on a transparent Layered GUI", 10, 10, 200, 20, -1, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetTip(-1, "Click label to drag layered window")
    $layButt = GUICtrlCreateButton("Button", 10, 40, 40)
    GUISetBkColor(0xABCDEF)
    _WinAPI_SetLayeredWindowAttributes($gui, 0x010101)
    GUISetState()

    $guicontrol = GUICreate("ControlGUI", 300, 400, 100, 100)
    $checkTrans = GUICtrlCreateCheckbox("Transparent color 0xABCDEF (Checked) Or 0x010101", 10, 10)
    $checkBorder = GUICtrlCreateCheckbox("POPUP-Style", 10, 30)
    GUICtrlCreateLabel("Transparency for Layered GUI", 10, 50)
    $slidTrans = GUICtrlCreateSlider(10, 70, 200, 30)
    GUICtrlSetLimit($slidTrans, 255, 0)
    GUICtrlSetData(-1, 255)
    GUISetState()
    #EndRegion - GUI Create

    #Region - GUI SelectLoop
    While 1
    $extMsg = GUIGetMsg(1)
    $msg = $extMsg[0]
    Switch $extMsg[1]
    Case $guicontrol
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $checkTrans Or $msg = $slidTrans

    ; Change Attributes of Trans-Color and Window Transparency

    If BitAND(GUICtrlRead($checkTrans), $GUI_CHECKED) = $GUI_CHECKED Then
    _WinAPI_SetLayeredWindowAttributes($gui, 0xABCDEF, GUICtrlRead($slidTrans))
    Else
    _WinAPI_SetLayeredWindowAttributes($gui, 0x010101, GUICtrlRead($slidTrans))
    EndIf

    Case $msg = $checkBorder
    If BitAND(GUICtrlRead($checkBorder), $GUI_CHECKED) = $GUI_CHECKED Then
    GUISetStyle($WS_POPUP, -1, $gui)
    Else
    GUISetStyle($GUI_SS_DEFAULT_GUI, -1, $gui)
    EndIf
    EndSelect
    Case $gui
    Select
    Case $msg = $layButt
    Dim $transcolor, $alpha
    $info = _WinAPI_GetLayeredWindowAttributes($gui,$transcolor, $alpha)
    MsgBox(0, 'Layered GUI', "Button on layered Window Clicked" & @CRLF & "Information about this window: " & @CRLF & _
    "Transparent Color: " & $transcolor & @CRLF & _
    "Alpha Value: " & $alpha & @CRLF & _
    "LWA_COLORKEY: " & (BitAND($info,$LWA_COLORKEY)=$LWA_COLORKEY) & @CRLF & _
    "LWA_ALPHA: " & (BitAND($info,$LWA_ALPHA)=$LWA_ALPHA) )
    Case $msg = $GUI_EVENT_CLOSE
    Exit MsgBox(0, '', "Close from Layered GUI")
    EndSelect
    EndSwitch
    WEnd
    #EndRegion - GUI SelectLoop