Drag & Drop für Musik-Player + GUI tranparent?

  • Hallo,

    ich bin Autoit-Anfänger und ich habe mal versucht einen Mini-Musik-Player zu schreiben, den möchte ich aber noch fortsetzen.
    Deshalb habe ich zwei Fragen:
    1. Kann man ein Sound per Drag und Drop abspielen, wenn er mit der Maus in die GUI gezogen wird?
    2. Kann man die GUI so programmieren, dass sie nicht transparent ist, wenn man mit dem Mauszeiger darauf ist und halb-transparent wird, wenn man den Mauszeiger weg bewegt?

    Mein Quelltext:

    Spoiler anzeigen
    [autoit]


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

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

    Opt("TrayMenuMode",1)
    ;erstelle GUI
    Global $sound
    GUICreate("Sound Player", 320, 90, @DesktopWidth / 2 - 160, @DesktopHeight / 2 - 45, -1)
    GUISetIcon ("C:\WINDOWS\system32\shell32.dll", "-169")
    TraySetIcon ("C:\WINDOWS\system32\shell32.dll", "-169")
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    $Slider1 = GUICtrlCreateSlider(10, 10, 300, 30, BitOR($TBS_TOOLTIPS, $TBS_AUTOTICKS))
    $btn = GUICtrlCreateButton("Dateiauswahl", 10, 50, 100, 30)
    $stop = GUICtrlCreateButton("Anhalten", 110, 50, 100, 30)
    $restop = GUICtrlCreateButton("Fortsetzen", 210, 50, 100, 30)
    GUICtrlSetData ($Slider1, 50)
    GUISetState(@SW_SHOW)
    $count = 0
    ;GUI Ende
    ;erstelle Traymenü
    $stopitem = TrayCreateItem("Anhalten")
    $fortitem = TrayCreateItem("Fortsetzen")
    $datitem = TrayCreateItem("Dateiauswahl")
    TrayCreateItem("")
    $invisibleitem = TrayCreateItem("Unsichtbar")
    $visibleitem = TrayCreateItem("Sichtbar")
    TrayCreateItem("")
    $minitem = TrayCreateItem("Minimieren")
    $normitem = TrayCreateItem("Wiederherstellen")
    TrayCreateItem("")
    $exititem = TrayCreateItem("Beenden")
    ;Traymenü Ende

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    e()
    Case $btn
    NewSound()
    Case $stop
    Stop()
    Case $restop
    Weiter()
    Case $Slider1
    Lautstarke()
    EndSwitch
    $msg = TrayGetMsg()
    Select
    Case $msg = 0
    ContinueLoop
    Case $msg = $datitem
    NewSound()
    Case $msg = $stopitem
    Stop()
    Case $msg = $fortitem
    Weiter()
    Case $msg = $visibleitem
    iv()
    Case $msg = $invisibleitem
    v()
    Case $msg = $exititem
    e()
    Case $msg = $minitem
    min()
    Case $msg = $normitem
    norm()
    EndSelect

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

    WEnd

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

    Func NewSound()
    If $count > 0 Then
    _SoundClose ($sound)
    EndIf
    $var = FileOpenDialog("Bitte wählen Sie eine Sounddatei aus!", "C:\", "Musik (*.mp3;*.wma;*.wav;*.mid)", 1 + 4 )
    $sound = _SoundOpen($var, "Musik")
    $count = $count + 1
    _SoundPlay($sound)
    EndFunc

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

    Func Stop()
    _SoundPause($sound)
    EndFunc

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

    Func Weiter()
    _SoundResume($sound)
    EndFunc

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

    Func Lautstarke()
    $vol = GUICtrlRead($Slider1)
    SoundSetWaveVolume($vol)
    EndFunc

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

    Func e()
    For $i = 255 to 1 Step -1
    WinSetTrans("Sound Player", "", $i)
    Next
    Exit
    EndFunc

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

    Func v()
    WinSetState ( "Sound Player", "", @SW_HIDE)
    EndFunc

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

    Func iv()
    WinSetState ( "Sound Player", "", @SW_SHOW)
    EndFunc

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

    Func min()
    WinSetState ( "Sound Player", "", @SW_MINIMIZE)
    EndFunc

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

    Func norm()
    WinSetState ( "Sound Player", "", @SW_RESTORE)
    EndFunc

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

    Danke schomal im Vorraus!

    Einmal editiert, zuletzt von xp_fan (21. November 2009 um 14:15)

  • Willkommen im Forum!
    Drag and drop:

    [autoit]

    Case $GUI_EVENT_DROPPED
    SoundPlay(@GUI_DRAGFILE)

    [/autoit]


    Transparenz:
    Die einzige Möglichkeit, die mir spontan einfällt, ist per WinGetPos und MouseGetPos ständig die Positionen zu vergleichen.

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Hallo,

    Zitat

    2. Kann man die GUI so programmieren, dass sie nicht transparent ist, wenn man mit dem Mauszeiger darauf ist und halb-transparent wird, wenn man den Mauszeiger weg bewegt?

    [autoit]

    GUIGetCursorInfo ()

    [/autoit]

    sollte dir weiterhelfen

    [autoit]

    GUICreate("Test", 300, 300)GUISetState()

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

    Do
    $a = GUIGetCursorInfo()
    If $a[0] < 0 Or $a[1] < 0 Or $a[0] > 300 Or $a[1] > 300 Then
    ToolTip("Die Maus befindet sich ausserhalb des Fensters")
    winsettrans("Test","",60)
    Else
    ToolTip("Die Maus befindet sich über dem Fenster")
    winsettrans("Test","",250)
    EndIf

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

    Until GUIGetMsg() = -3

    [/autoit]

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    4 Mal editiert, zuletzt von Andy (20. November 2009 um 22:42)

  • Ich hätte es so gemacht:

    Spoiler anzeigen
    [autoit]

    GUICreate("Test", 300, 300)
    GUISetState()

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

    $Blendstatus = 60

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

    Do
    $a = GUIGetCursorInfo()
    If $a[0] < 0 Or $a[1] < 0 Or $a[0] > 300 Or $a[1] > 300 Then
    for $Durchlauf = $Blendstatus To 60 Step -3
    WinSetTrans("Test", "", $Durchlauf)
    Sleep(5)
    Next
    $Blendstatus = 60
    Else
    for $Durchlauf = $Blendstatus To 250 Step 5
    WinSetTrans("Test", "", $Durchlauf)
    Sleep(2.5)
    Next
    $Blendstatus = 250
    EndIf

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

    Until GUIGetMsg() = -3

    [/autoit]

    Magnus

  • ich habe auch eine gute mousehover funktion für buttons(geht auch mit andren controls)
    Edit:flackert nicht

    Spoiler anzeigen
    [autoit]


    $mouse = GUIGetCursorInfo()
    If $mouse[4] = $Button1[0] AND $Button1[1] = 0 Then
    GUICtrlSetBkColor($Button1[0],0x0000FF)
    $Button1[1] = 1
    EndIf
    If Not $mouse[4] = $Button1[0] AND $Button1[1] = 1 Then
    GUICtrlSetBkColor($Button1[0],0xC0C0C0)
    $Button1[1] = 0
    EndIf

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