Transparent

  • Hallo zusammen,

    ich habe ein Problem und zwar geht es um die Transparents.
    Ich möchte ein Vorschaufenster erstellen der vor dem Hauptfenster erscheint, doch das Vorschaufenster soll transparent sein bzw. das Bild soll Transparent angezeigt werden.
    Wie man auf den Bildern sieht ist das eine Bild (transparenteditorfont.jpg) im Bildbearbeitungprogramm Transparent, und in dem anderen Bild (editorfond.jpg) beim ausführen des Script Untransparent.
    Ich möchte das man nur die Schrift sieht (wie im Bildbearbeitungsprogramm).

    Ich habe schon verzeifelt bei AutoIt nach Themen wie diese gesucht aber nichts gefunden.
    Bitte helft mir, ich wäre euch sehr dankbar.

    MfG

    M3HM3T

  • Hmm, danke für den link aber der Code von diesem Forum klappt nicht, da spint der PC voll herum, ?( keine ahnung warum.

  • Hast du auch alle Includes drin?

    [autoit]

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

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

    ;~ Splash
    Global Const $AC_SRC_ALPHA = 1

    [/autoit]


    Und stimmt der Pfad zum PNG ? ( $pngSRC )

  • Mach mal $DS_MODALFRAME raus :) Also:
    $Splash = GUICreate("", $width, $height, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
    und mach mal einen @error-Test:

    Spoiler anzeigen
    [autoit]

    $hImage = _GDIPlus_ImageLoadFromFile($pngSrc)
    MsgBox(0, '', @error)

    [/autoit]

    Und nein, naders bekommt man keine Transparenz.

  • Jetzt klappt es danke.
    Aber so viel code für ein transparentes bild anzeigen zu lassen, geht das nicht viel einfacher?
    Das Bild muss ja auch nicht unbedingt langsam kommen und wieder langsam gehen.

  • Entfernt bitte das $DS_MODALFRAME. Das gehört nicht an diese Stelle! Wenn man es überhaupt verwendet, als Style reinschreiben. Manchmal kommt es durch diesen Eintrag dazu, dass das Bild nicht angezeigt wird.

    Der benötigte Code ohne Einblende ist das:

    Spoiler anzeigen
    [autoit]

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

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

    ;~ Splash
    Global Const $AC_SRC_ALPHA = 1

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

    _GDIPlus_Startup()

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

    $pngSrc = @ScriptDir & "\editorfont.png"

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

    $hImage = _GDIPlus_ImageLoadFromFile($pngSrc)
    $width = _GDIPlus_ImageGetWidth($hImage)
    $height = _GDIPlus_ImageGetHeight($hImage)

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

    $Splash = GUICreate("", $width, $height, -1, -1, $WS_POPUP, $WS_EX_LAYERED+$WS_EX_TOPMOST+$WS_EX_TOOLWINDOW)
    SetBitmap($Splash, $hImage, 255)
    GUISetState()
    Sleep(1000)
    GUIDelete($Splash)

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

    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()

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

    Func SetBitmap($hGUI, $hImage, $iOpacity)
    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", $AC_SRC_ALPHA)
    _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]
  • Das habe ich ja raus getahn und es funktioniert ja jetzt auch.
    Aber ich meine das es nur sehr viel Code ist für ein Transparentes bild anzeigen zu lassen.
    Ich habe mal ein Post gefunden das war das gleiche bloß mit sehr wenig Code und das auch ohne UDFs, bloß das ich den Post nicht mehr finde, schade.

  • Ähhm, ja. Das kommt auf die Transparenz an. Wenn du genau eine Farbe völlig Transparent haben willst und sonst nichts, reicht das:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    #include <WindowsConstants.au3>

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

    $Splash = GUICreate("dd f", 571, 79, -1, -1, $WS_POPUP, $WS_EX_LAYERED+$WS_EX_TOPMOST+$WS_EX_TOOLWINDOW)
    GUISetbkColor(0xFFFFFF)
    GUICtrlCreatePic("editorfont.gif",0,0,571,79)
    GUISetState(@SW_SHOW)
    Sleep(10000)
    GUIDelete($Splash)

    [/autoit]

    ( GIF nur, da damit eine gleichmäßige Farbe erreicht iwrd. Der hintergrund des GIF MUSS weiß sein !)

    //Edit: was geht bei dir nicht? Du musst schoon den richtigen Pfad zum Bild angeben ... UND $DS_MODALFRAME rauslöschen

  • ok ich will halt png files verwenden weil ich damit die ecken abrunden will und so mit der funktion die ich dafür bereits verwende kann ich die ecken schon abrunden ohne probleme aber sehr unsauber deswegen habe ich gehofft es geht vielleicht ich poste dir mal den source villeicht kannste da ja helfen

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <WinAPI.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ComboConstants.au3>
    #include <ListViewConstants.au3>
    #include <StaticConstants.au3>
    #include <ButtonConstants.au3>
    #include <ListBoxConstants.au3>
    #include <TabConstants.au3>
    #include <EditConstants.au3>
    #include <DateTimeConstants.au3>
    #include <SliderConstants.au3>
    #include <TreeViewConstants.au3>
    #include <ProgressConstants.au3>
    #include <AVIConstants.au3>
    #include <UpDownConstants.au3>
    #include<Array.au3>
    #include<File.au3>
    #include <WinAPI.au3>
    #include-once
    #NoTrayIcon

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

    ;~ Splash
    Global Const $AC_SRC_ALPHA = 1

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

    _GDIPlus_Startup()

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

    $pngSrc = @ScriptDir & "\rd.png"
    $hImage = _GDIPlus_ImageLoadFromFile($pngSrc)
    $width = _GDIPlus_ImageGetWidth($hImage)
    $height = _GDIPlus_ImageGetHeight($hImage)

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

    FileInstall("rd.bmp",@TempDir & "\rd.bmp")
    FileInstall("Start.jpg",@TempDir & "\Start.jpg")
    FileInstall("Options.jpg",@TempDir & "\Options.jpg")
    FileInstall("Website.jpg",@TempDir & "\Website.jpg")
    FileInstall("Close.bmp",@TempDir & "\Close.bmp")
    $Lname = FileReadLine("Launcher.txt",2)
    $notice = FileRead("notice.txt")
    $HTT = FileReadLine("Launcher.txt",4)
    $Form1 = GUICreate($Lname, $width, $height, -1, -1, $WS_POPUP, $WS_EX_LAYERED+$WS_EX_TOPMOST+$WS_EX_TOOLWINDOW)
    SetBitmap($Form1, $hImage, 255)
    _GuiRoundCorners($Form1, 0, 0, 65, 65)
    $Pic2 = GUICtrlCreatePic(@TempDir & "\Start.jpg", 38, 265, 130, 30, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic3 = GUICtrlCreatePic(@TempDir & "\Options.jpg", 212, 265, 130, 30, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic4 = GUICtrlCreatePic(@TempDir & "\Website.jpg", 382, 265, 130, 30, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic5 = GUICtrlCreatePic(@TempDir & "\Close.bmp", 517, 15, 20, 20, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))

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

    GUICtrlCreateLabel("",15,15,520,155,0,$GUI_WS_EX_PARENTDRAG)
    GUICtrlSetBkColor(-1,$GUI_BKCOLOR_TRANSPARENT)
    $Edit1 = GUICtrlCreateEdit("", 38, 168, 474, 89)
    GUICtrlSetData(-1, $notice)
    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlSetColor(-1, 0xffffff)
    GUISetState(@SW_SHOW)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Pic2
    _1()
    Case $Pic3
    _2()
    Case $Pic4
    _3()
    Case $Pic5
    _4()
    EndSwitch
    WEnd

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

    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()

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

    Func SetBitmap($hGUI, $hImage, $iOpacity)
    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", $AC_SRC_ALPHA)
    _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

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

    Func _GuiRoundCorners($hWnd, $x1, $y1, $x3, $y3)
    Dim $pos, $ret, $ret2
    $pos = WinGetPos($hWnd)
    $ret = DllCall('gdi32.dll', 'long', 'CreateRoundRectRgn', _
    'long', $x1, _
    'long', $y1, _
    'long', $pos[2], _
    'long', $pos[3], _
    'long', $x3, _
    'long', $y3)
    If $ret[0] Then
    $ret2 = DllCall('user32.dll', 'long', 'SetWindowRgn', 'hwnd', $hWnd, 'long', $ret[0], 'int', 1)
    If $ret2[0] Then
    Return 1
    Else
    Return 0
    EndIf
    Else
    Return 0
    EndIf
    EndFunc

    [/autoit]


    MfG LogiVidia

  • Achso mit GIF also, ok danke!

    3 Mal editiert, zuletzt von m3hm3t (13. Juni 2008 um 18:20)