Wie sich-verändernde GUI transparent machen?

  • Nabend zusammen :)


    Also ich stehe im Moment vor folgendem Problem: Ich habe eine Art Music-Player der über ein GUI bedient wird und normal im Fnester offen ist... Nun möchte ich aber, dass wenn ich auf dem Desktop bin, die Bedienoberfläche praktisch so hier aussehen soll... Das Fenster ansich also transparent, aber die verschiedenen Button (.png) und Labels sichtbar (Buttons sind im Moment noch nicht transparent angepasst, aber das ist ja kein Problem)...
    Nur da auch eine Anzeige im Intervall aktualisiert wird, hab ich mein Script etwas verändert, um den Effekt deutlich zu machen...
    Was ich da machen möchte, geht nur leider über meine Kenntnisse drüber hinaus, aber ich hoffe auf Hilfe :)

    Der Quellcode (auch im File mit drin):

    [autoit]

    ;#NoTrayIcon

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

    #include <GUIConstants.au3>
    #include <SliderConstants.au3>
    #include <WindowsConstants.au3>

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

    If WinExists("test") Then Exit
    AutoItWinSetTitle("test")

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

    Opt("GUIOnEventMode", 1)
    $GUI_Handle = GUICreate("test", 208, 45, 0, 0, $WS_POPUPWINDOW)
    GUICtrlSetOnEvent(GUICtrlCreatePic(@ScriptDir & "\Icons (Musik)\Back 1.bmp", 1, 2, 24, 25), "test")
    GUICtrlSetOnEvent(GUICtrlCreatePic(@ScriptDir & "\Icons (Musik)\Pause 1.bmp", 28, 1, 26, 27), "test")
    GUICtrlSetOnEvent(GUICtrlCreatePic(@ScriptDir & "\Icons (Musik)\Next 1.bmp", 57, 2, 24, 25), "test")
    $1 = GUICtrlCreateLabel("test", 85, 1, 96, 26)
    GUICtrlSetFont(-1, 8)
    $2 = GUICtrlCreateLabel("test", 85, 14, 96)
    GUICtrlSetFont(-1, 8)
    GUICtrlSetOnEvent(GUICtrlCreatePic(@ScriptDir & "\Icons (Musik)\Mini 1.bmp", 184, 1, 11, 11), "Mini_Fenster")
    GUICtrlSetOnEvent(GUICtrlCreatePic(@ScriptDir & "\Icons (Musik)\Exit 1.bmp", 196, 1, 11, 11), "Exit_Fenster")
    GUICtrlSetOnEvent(GUICtrlCreatePic(@ScriptDir & "\Icons (Musik)\Ordner 1.bmp", 184, 14, 11, 11), "test")
    ;GUICtrlCreateLabel("", 195, 12, 13, 16, -1, $GUI_WS_EX_PARENTDRAG)
    ;GUICtrlSetCursor (-1, 0)
    GUICtrlCreateCheckbox("", 3, 29, 13, 13)
    GUICtrlSetData(-1, 100)
    GUICtrlSetOnEvent(GUICtrlCreateSlider(16, 27, 192, 20, $TBS_NOTICKS), "test")
    GUICtrlSetLimit(-1, 100, 1) ; 3. Parameter auf 1, damit noch was zu hören ist
    GUICtrlSetData(-1, 96) ; 2. Parameter nicht auf 100, damit Slider nicht ganz rechts ist
    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(100)
    WinSetTitle($GUI_Handle, "", @SEC)
    GUICtrlSetData($1, @SEC)
    GUICtrlSetData($2, @SEC)
    Maus_Koordinaten_Abfrage()
    WEnd

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

    Func Exit_Fenster()
    Exit
    EndFunc

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

    Func Mini_Fenster()
    GUISetState(@SW_MINIMIZE)
    EndFunc

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

    Func test()
    MsgBox(0, "", "test")
    EndFunc

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

    Func Maus_Koordinaten_Abfrage()
    $Maus = GUIGetCursorInfo($GUI_Handle)
    If $Maus[0] >= 1 and $Maus[0] < 25 and $Maus[1] >= 2 and $Maus[1] < 27 Then ; Back-Button
    GUICtrlSetImage(3, @ScriptDir & "\Icons (Musik)\Back 2.bmp")
    Else
    GUICtrlSetImage(3, @ScriptDir & "\Icons (Musik)\Back 1.bmp")
    EndIf
    If $Maus[0] >= 28 and $Maus[0] < 54 and $Maus[1] >= 1 and $Maus[1] < 28 Then ; Play/Pause-Button
    If 1 Then ; playing
    GUICtrlSetImage(4, @ScriptDir & "\Icons (Musik)\Pause 2.bmp")
    Else
    GUICtrlSetImage(4, @ScriptDir & "\Icons (Musik)\Play 2.bmp")
    EndIf
    Else
    If 1 Then ; paused
    GUICtrlSetImage(4, @ScriptDir & "\Icons (Musik)\Play 1.bmp")
    Else
    GUICtrlSetImage(4, @ScriptDir & "\Icons (Musik)\Pause 1.bmp")
    EndIf
    EndIf
    If $Maus[0] >= 57 and $Maus[0] < 81 and $Maus[1] >= 2 and $Maus[1] < 27 Then ; Next-Button
    GUICtrlSetImage(5, @ScriptDir & "\Icons (Musik)\Next 2.bmp")
    Else
    GUICtrlSetImage(5, @ScriptDir & "\Icons (Musik)\Next 1.bmp")
    EndIf
    If $Maus[0] >= 184 and $Maus[0] < 195 and $Maus[1] >= 1 and $Maus[1] < 12 Then ; Mini-Button
    GUICtrlSetImage(8, @ScriptDir & "\Icons (Musik)\Mini 2.bmp")
    Else
    GUICtrlSetImage(8, @ScriptDir & "\Icons (Musik)\Mini 1.bmp")
    EndIf
    If $Maus[0] >= 196 and $Maus[0] < 207 and $Maus[1] >= 1 and $Maus[1] < 12 Then ; Exit-Button
    GUICtrlSetImage(9, @ScriptDir & "\Icons (Musik)\Exit 2.bmp")
    Else
    GUICtrlSetImage(9, @ScriptDir & "\Icons (Musik)\Exit 1.bmp")
    EndIf
    If $Maus[0] >= 184 and $Maus[0] < 195 and $Maus[1] >= 14 and $Maus[1] < 25 Then ; Ordner-Button
    GUICtrlSetImage(10, @ScriptDir & "\Icons (Musik)\Ordner 2.bmp")
    Else
    GUICtrlSetImage(10, @ScriptDir & "\Icons (Musik)\Ordner 1.bmp")
    EndIf
    EndFunc

    [/autoit]

    PS: Mit GDI/GDI+ kenn ich mich wirklich gar nicht aus und würde mich da auch ungern hineinarbeiten (hatte es mal veruscht, aber kam net weiter)...

    autoit.de/wcf/attachment/7420/

  • Also spontan fällt mir nur diese Möglichkeit ein:

    [autoit]

    $WinName = "AutoIt Help" ;== Den Namen des Fensters eingeben
    Global $i = 250
    HotKeySet("{F5}", "Trans")
    While 1
    Sleep(111)
    WEnd
    Func Trans()
    WinSetTrans($WinName, "", $i)
    $i -=5
    Global $i
    EndFunc

    [/autoit]


    Dabei werden aber auch die anderen Sachen mit transparent. Man kann das aber auch nur alleine für den Hintergrund machen, aber ich weiß nicht mehr wie das geht. Vielleicht gibt dir das o.g. aber schonmal einen Denkanstoß/Tipp.
    EDIT: Es gibt noch einen Style für die GUI, hab ihn aber noch nicht getestet: $WS_EX_TRANSPARENT mit #include
    Ansonsten such mal nach "Schwebende Buttons" hieß das glaub ich von Bugfix, das ist glaub ich genau das, was du brauchst
    EDIT2: Jo genau hier ist es: "Schwebende" Button - Skriptbeispiel

    2 Mal editiert, zuletzt von Aquaplant (20. Januar 2010 um 23:53)

  • Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WinAPI.au3>
    ;#NoTrayIcon

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

    #include <SliderConstants.au3>
    #include <WindowsConstants.au3>

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

    If WinExists("test") Then Exit
    AutoItWinSetTitle("test")

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

    Opt("GUIOnEventMode", 1)
    $GUI_Handle = GUICreate("test", 208, 45, 0, 0, $WS_POPUPWINDOW,$WS_EX_LAYERED)
    GUISetBkColor(0xEFEFEF)
    $GUI_Back = GUICtrlCreatePic(@ScriptDir & "\Icons (Musik)\Back 1.bmp", 1, 2, 24, 25)
    GUICtrlSetOnEvent(-1, "test")
    $GUI_Pause = GUICtrlCreatePic(@ScriptDir & "\Icons (Musik)\Pause 1.bmp", 28, 1, 26, 27)
    GUICtrlSetOnEvent(-1, "test")
    $GUI_Next = GUICtrlCreatePic(@ScriptDir & "\Icons (Musik)\Next 1.bmp", 57, 2, 24, 25)
    GUICtrlSetOnEvent(-1, "test")
    $1 = GUICtrlCreateLabel("test", 85, 1, 96, 26)
    GUICtrlSetFont(-1, 8)
    $2 = GUICtrlCreateLabel("test", 85, 14, 96)
    GUICtrlSetFont(-1, 8)
    $GUI_Mini = GUICtrlCreatePic(@ScriptDir & "\Icons (Musik)\Mini 1.bmp", 184, 1, 11, 11)
    GUICtrlSetOnEvent(-1, "Mini_Fenster")
    $GUI_Exit = GUICtrlCreatePic(@ScriptDir & "\Icons (Musik)\Exit 1.bmp", 196, 1, 11, 11)
    GUICtrlSetOnEvent(-1, "Exit_Fenster")
    $GUI_Ordner = GUICtrlCreatePic(@ScriptDir & "\Icons (Musik)\Ordner 1.bmp", 184, 14, 11, 11)
    GUICtrlSetOnEvent(-1, "test")
    ;GUICtrlCreateLabel("", 195, 12, 13, 16, -1, $GUI_WS_EX_PARENTDRAG)
    ;GUICtrlSetCursor (-1, 0)
    GUICtrlCreateCheckbox("", 3, 29, 13, 13)
    GUICtrlSetData(-1, 100)
    GUICtrlSetOnEvent(GUICtrlCreateSlider(16, 27, 192, 20, $TBS_NOTICKS), "test")
    GUICtrlSetLimit(-1, 100, 1) ; 3. Parameter auf 1, damit noch was zu hören ist
    GUICtrlSetData(-1, 96) ; 2. Parameter nicht auf 100, damit Slider nicht ganz rechts ist
    GUISetState(@SW_SHOW)

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

    Global $iSec = @SEC, $aMouse = GUIGetCursorInfo($GUI_Handle), $iPlaying = 0

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

    _WinAPI_SetLayeredWindowAttributes($GUI_Handle,0xEFEFEF,255) ; 3ter Parameter für Transparenz

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

    While 1
    Sleep(100)
    If @SEC <> $iSec Then
    $iSec = @SEC
    WinSetTitle($GUI_Handle, "", $iSec)
    GUICtrlSetData($1, $iSec)
    GUICtrlSetData($2, $iSec)
    EndIf
    Maus_Koordinaten_Abfrage()
    WEnd

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

    Func Exit_Fenster()
    Exit
    EndFunc

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

    Func Mini_Fenster()
    GUISetState(@SW_MINIMIZE)
    EndFunc

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

    Func test()
    MsgBox(0, "", "test")
    EndFunc

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

    Func Maus_Koordinaten_Abfrage()
    $Maus = GUIGetCursorInfo($GUI_Handle)
    If $Maus[4] <> $aMouse[4] Then
    $aMouse = $Maus
    _ResetIcons()
    Switch $Maus[4]
    Case $GUI_Back
    GUICtrlSetImage($GUI_Back, @ScriptDir & "\Icons (Musik)\Back 2.bmp")
    Case $GUI_Pause
    If $iPlaying Then
    GUICtrlSetImage($GUI_Pause, @ScriptDir & "\Icons (Musik)\Play 2.bmp")
    Else
    GUICtrlSetImage($GUI_Pause, @ScriptDir & "\Icons (Musik)\Pause 2.bmp")
    EndIf

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

    Case $GUI_Next
    GUICtrlSetImage($GUI_Next, @ScriptDir & "\Icons (Musik)\Next 2.bmp")
    Case $GUI_Mini
    GUICtrlSetImage($GUI_Mini, @ScriptDir & "\Icons (Musik)\Mini 2.bmp")
    Case $GUI_Exit
    GUICtrlSetImage($GUI_Exit, @ScriptDir & "\Icons (Musik)\Exit 2.bmp")
    Case $GUI_Ordner
    GUICtrlSetImage($GUI_Ordner, @ScriptDir & "\Icons (Musik)\Ordner 2.bmp")
    Case Else

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

    EndSwitch
    EndIf
    EndFunc

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

    Func _ResetIcons()
    GUICtrlSetImage(3, @ScriptDir & "\Icons (Musik)\Back 1.bmp")
    If $iPlaying Then
    GUICtrlSetImage(4, @ScriptDir & "\Icons (Musik)\Play 1.bmp")
    Else
    GUICtrlSetImage(4, @ScriptDir & "\Icons (Musik)\Pause 1.bmp")
    EndIf
    GUICtrlSetImage(5, @ScriptDir & "\Icons (Musik)\Next 1.bmp")
    GUICtrlSetImage(8, @ScriptDir & "\Icons (Musik)\Mini 1.bmp")
    GUICtrlSetImage(9, @ScriptDir & "\Icons (Musik)\Exit 1.bmp")
    GUICtrlSetImage(10, @ScriptDir & "\Icons (Musik)\Ordner 1.bmp")
    EndFunc

    [/autoit]

    Leider ist das keine zufriedenstellende Lösung (in meinen Augen.)
    Du könntest natürlich mit Child GUI's arbeiten, und nur das Haupt-GUI Transparent schalten