Hilfe zu transparenten gui

  • hi Leute brauch mal wieder eure hilfe

    Ich hab ne normale gui als popupwindow erstellt und will jetzt nen transparenten hintergrund

    kann mir jemand sagen wie ich dieses komische beche in transparent machen kann?

    nochmal ich will nicht das fenster sondern den hintergrund transparent machen

    Einmal editiert, zuletzt von alexanderschill (25. Juli 2010 um 14:35)

  • ne du verstehst mich falsch ich will nich die ganze gui transparent machen sondern nur den hintergrund

    • Offizieller Beitrag

    Schau dir mal das Beispiel zu _WinAPI_CreateRectRgn an. Damit solltest du dir was basten können.

  • sry das beispiel von sprenger geht leider nich und von winapi hab ich keinen dunst kann mir nich jemand ganz konkret sagen wie ich das hinkriege

  • https://autoit.de/index.php?page=Thread&threadID=9231

    eine andere, leichter Verständlichere Methode wäre folgende:

    Du erstellst dein "normales" GUI. Setzt es mit WinSetTrans auf volle Transparenz. Außerdem erstellst du für jedes weitere Control (Button, Listbox, usw.) ein eigenes Unter-GUI. Ein sog. Child-GUI, dazu benutzt du den Window-Style $WS_POPUP und den Ex-Style $WS_EX_MDICHILD. Dieses Child GUI hat genau die Abmessungen deines Controls; Folglich füllt das Control das Child GUI komplett aus, und du hast ein "schwebendes" Control

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $hGUI = GUICreate("")
    GUISetState(5,$hGUI)
    WinSetTrans($hGUI,"",0)

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

    $hChildGUI = GUICreate("",200,200,20,20,$WS_POPUP,$WS_EX_MDICHILD,$hGUI)
    GUICtrlCreateList("ESC zum beenden",0,0,200,200)
    GUISetState(5,$hChildGUI)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    EndSwitch
    Wend

    [/autoit]
  • dann ist der hintergrund aber trotzdem nich transparent und diese form mit gdi zu zeichnen ist glaub ich etwas kompliziert

  • danke für die tipps, aber leider kann ich damit nicht viel anfangen, da ich ja auch noch buttons hinzufügen will und die, falls ich ein child erstell immer durchsichtig sind

    wie kann ich auf der bestehenden GDI gui einen button erstellen

    Einmal editiert, zuletzt von alexanderschill (25. Juli 2010 um 16:43)

  • Ähm, DU willst ein Fenster, das das IPhone-PNG-Bild als Hintergrund hat, oder.... 8| ?
    Wenn das die Lösung ist:

    Spoiler anzeigen
    [autoit]

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

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

    ;Load Image and Size:
    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Iphone.png")
    $hWidth = _GDIPlus_ImageGetWidth($hImage)
    $hHeight = _GDIPlus_ImageGetHeight($hImage)

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

    ; Create layered window
    $hWnd = GUICreate("Layered Window", $hWidth, $hHeight, -1, -1, $WS_POPUP, BitOr( $WS_EX_LAYERED, $WS_EX_TOOLWINDOW))
    GUISetState(@SW_SHOW)
    SetBitmap($hWnd, $hImage, 255)

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

    ;Main-GUI
    $aWnd = GUICreate("Main Gui", $hWidth, $hHeight, 0,0, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $hWnd)
    GUISetBkColor(0x000000)
    GUICtrlCreatePic("", 0, 0, 0, 0);ohne diese Zeile wird kein Label angezeigt, keine Ahnung warum???
    GUICtrlCreateIcon("shell32.dll", 10, 20, 20)
    GUICtrlCreateButton("Button", 10, 70, 100)
    GUICtrlCreateLabel("Label",10,100)
    GUISetState(@SW_SHOW)

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

    Do
    Sleep(10)

    until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Func SetBitmap($hGUI, $hImage, $iOpacity)
    Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend

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

    $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, $hScrDC, 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]


    Dann wäre das von mir davor genannte Beispiel richtig gewesen. :cursing:

  • So würd ichs mit GDI+ machen. ;)

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>

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

    Opt("GUIOnEventMode", 1)

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

    Global $hWnd, $hGraphic, $hBitmap, $backbuffer
    Global $ScreenDc, $dc, $tSize, $pSize, $tSource, $pSource, $tBlend, $pBlend, $tPoint, $pPoint, $gdibitmap
    Global $title = "GDI+ Beispiel: Transparentes Fenster", _
    $width = 150, _
    $height = 150

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

    _StartUp()

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

    _GDIPlus_GraphicsDrawRoundedRect($backbuffer, 0, 0, $width - 1, $height - 1, 15)

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

    _UpDate()

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

    While 1
    Sleep(100)
    WEnd

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

    Func _StartUp()
    $hWnd = GUICreate($title, $width, $height, -1, -1, 0x80000000, BitOR(0x00000080, 0x00080000, 0x00000008))
    GUISetOnEvent(-3, "_ShutDown")
    GUISetState()

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

    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $hGraphic)
    $backbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    _GDIPlus_GraphicsSetSmoothingMode($backbuffer, 4)

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

    $ScreenDc = _WinAPI_GetDC($hWnd)
    $dc = _WinAPI_CreateCompatibleDC($ScreenDc)

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

    $tSize = DllStructCreate($tagSIZE)
    $pSize = DllStructGetPtr($tSize)
    DllStructSetData($tSize, "X", $width)
    DllStructSetData($tSize, "Y", $height)
    $tSource = DllStructCreate($tagPOINT)
    $pSource = DllStructGetPtr($tSource)
    $tBlend = DllStructCreate($tagBLENDFUNCTION)
    $pBlend = DllStructGetPtr($tBlend)
    DllStructSetData($tBlend, "Alpha", 255)
    DllStructSetData($tBlend, "Format", 1)
    $tPoint = DllStructCreate($tagPOINT)
    $pPoint = DllStructGetPtr($tPoint)
    DllStructSetData($tPoint, "X", 0)
    DllStructSetData($tPoint, "Y", 0)
    EndFunc

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

    Func _ShutDown()
    _WinAPI_DeleteDC($dc)
    _WinAPI_ReleaseDC($hWnd, $ScreenDc)
    _GDIPlus_GraphicsDispose($backbuffer)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    GUIDelete($hWnd)
    Exit
    EndFunc

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

    Func _UpDate()
    $gdibitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap)
    _WinAPI_SelectObject($dc, $gdibitmap)
    _WinAPI_UpdateLayeredWindow($hWnd, $ScreenDc, 0, $pSize, $dc, $pSource, 0, $pBlend, 2)
    _WinAPI_DeleteObject($gdibitmap)
    EndFunc

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

    Func _GDIPlus_GraphicsDrawRoundedRect($hGraphics, $iX, $iY, $iWidth, $iHeight, $iRadius = 30, $Pen = "")
    _GDIPlus_GraphicsDrawArc($hGraphics, $iX, $iY, $iRadius, $iRadius, 180, 90, $Pen)
    _GDIPlus_GraphicsDrawArc($hGraphics, $iX + $iWidth - $iRadius, $iY, $iRadius, $iRadius, 270, 90, $Pen)
    _GDIPlus_GraphicsDrawArc($hGraphics, $iX, $iY + $iHeight - $iRadius, $iRadius, $iRadius, 90, 90, $Pen)
    _GDIPlus_GraphicsDrawArc($hGraphics, $iX + $iWidth - $iRadius, $iY + $iHeight - $iRadius, $iRadius, $iRadius, 360, 90, $Pen)

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

    _GDIPlus_GraphicsDrawLine($hGraphics, $iX + $iRadius / 2, $iY, $iX + $iWidth - $iRadius / 2, $iY, $Pen)
    _GDIPlus_GraphicsDrawLine($hGraphics, $iX, $iY + $iRadius / 2, $iX, $iY + $iHeight - $iRadius / 2, $Pen)
    _GDIPlus_GraphicsDrawLine($hGraphics, $iX + $iRadius / 2, $iY + $iHeight, $iX + $iWidth - $iRadius / 2, $iY + $iHeight, $Pen)
    _GDIPlus_GraphicsDrawLine($hGraphics, $iX + $iWidth, $iY + $iRadius / 2, $iX + $iWidth, $iY + $iHeight - $iRadius / 2, $Pen)
    EndFunc

    [/autoit]

    Edit:
    Buttons kannst du auch darauf erstellen, wenn du es mit Childs machst. :)

    Zitat

    [Heute, 11:39] Raupi: Soll ich es dir machen?
    [Heute, 11:47] BugFix: "Soll ich es dir machen? " - also Raupi !! bitte nicht so öffentlich :rofl:

    Zitat

    [Heute, 11:51] BugFix: und ich werde es mir jetzt machen - das Mittagessen :P

    AMsg UDF v1.00.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%
    OwnStyle UDF Version 1.10.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%

  • also danke aber ich möchte jetzt ein weiteres bild einbinden, aber wenn der hintergrund des bildes weiß ist zeigt es den weißen hintergrund nicht an

    Wie kann ich es schaffen, dass ich ein bild ganz normal in die childgui einbinden kann

  • Zeig doch mal bitte jetzt dein Script was du gemacht hast vllt. können wir dann ja mal besser verstehen was du möchtest

    EDIT:
    Meintest du das so?

    Spoiler anzeigen
    [autoit]

    $hGui = GUICreate ("Iphone",464,897,Default,Default,0x80000000,0x00080000)
    GUICtrlCreatePic (@ScriptDir & "\Iphone.bmp",0,0,464,897,Default,0x00100000)
    GUISetBkColor (0xFFFFFF,$hGui)
    DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $hGui, "long", 0xFFFFFF, "byte", 255, "long",True)
    GUISetState (@SW_SHOW)

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

    While 1
    Switch GUIGetMsg ()
    Case -3
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • hi autobert

    Ich verstehe nicht ganz was dein beitrag zu bedeuten hat, oder wie er mir helfen könnte ich suche einfach nur ein script, das eine transpoarente gui anzeigt, aber ganz normal funktioniert (mit GUICTRLCREATEPIC, etc)