Tray-Menü generieren + OnEvent

  • Huhu,

    also ich habe folgendes Problem (es geht grundsätzlich um einen Musik-Player):
    Ich lasse aus einer .txt, die ein bestimmtes Muster hat, automatisch ein Tray-Menü erstellen... Das klappt soweit auch genau, wie ich mir das vorstelle :)
    Jede Zeile der .txt hat eine gleichmäßige Struktur, aber die Anzahl der Zeilen variiert.

    Nun möchte ich aber auch wenn ich mich im Tray-Menü so durchhangel, dass ich direkt die Songs auswählen kann; sprich wenn ich den Titel eines Songs klicke, möchte ich den dazugehörigen Pfad aus der .txt geliefert bekommen...
    Bisher habe ich schon Möglichkeiten mit "TrayItemSetOnEvent" und "TrayItemGetText" probiert, aber leider nichts funktionierendes gefunden, da immer der letzte Eintrag der .txt im Hinterkopf des Scripts ist...

    Da muss es doch eine Möglichkeit geben das ganze so zu basteln, wie das gewollt ist :)


    Beste Grüße und ich hoffe auf Denkanstöße :) Andy


    PS: Script + .txt im Anhang

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>
    #include <File.au3>

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

    Opt('TrayAutoPause', 0)
    Opt('TrayMenuMode', 1)
    Opt('TrayOnEventMode', 1)

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

    $Tracklist = @ScriptDir & "\List.txt"
    $Tracks_Pfad = "C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Eigene Musik\z.Music (Script)\"

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

    Tray_Erstellen()
    While 1
    Sleep(100)
    WEnd

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

    Func Tray_Erstellen()
    $Tray_Interpret_2 = "..."
    $Tray_Album_2 = "..."
    TrayCreateItem(_FileCountLines($Tracklist) & " Tracks")
    TrayItemSetState(-1, $TRAY_DISABLE)
    TrayCreateItem("")
    $File = FileOpen($Tracklist, 0)
    For $i = 1 to _FileCountLines($Tracklist) Step +1
    Global $Tray_Line_Track = FileReadLine($File, $i)
    $Tray_Name = StringTrimLeft($Tray_Line_Track, StringLen($Tracks_Pfad))
    $Tray_Titel = StringTrimRight(StringMid($Tray_Line_Track, StringInStr($Tray_Line_Track, " - ", 0, 3) + 3), 4)
    $Tray_Interpret = StringTrimRight($Tray_Name, StringLen($Tray_Name) - StringInStr($Tray_Name, " - ") + 1)
    $Tray_Album = StringTrimLeft(StringTrimRight($Tray_Name, StringLen($Tray_Name) - StringInStr($Tray_Name, " - ", 0, 2) + 1), StringLen($Tray_Interpret) + 3)
    If $Tray_Interpret <> $Tray_Interpret_2 Then
    $Track_aus_Album = 1
    $Menu_Interpret = TrayCreateMenu($Tray_Interpret)
    EndIf
    $Tray_Interpret_2 = $Tray_Interpret
    If $Tray_Album = "" Then
    $Track_aus_Album = 0
    TrayCreateItem($Tray_Titel, $Menu_Interpret)
    ElseIf $Tray_Album <> $Tray_Album_2 Then
    If $Track_aus_Album = 0 Then
    TrayCreateItem("", $Menu_Interpret)
    $Track_aus_Album = 1
    EndIf
    $Menu_Album = TrayCreateMenu($Tray_Album, $Menu_Interpret)
    TrayCreateItem($Tray_Titel, $Menu_Album)
    Else
    TrayCreateItem($Tray_Titel, $Menu_Album)
    EndIf
    $Tray_Album_2 = $Tray_Album
    Next
    TrayCreateItem("")
    TrayCreateItem("Beenden")
    TrayItemSetOnEvent(-1, "_Exit")
    FileClose($File)
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]
  • ... eine Möglichkeit:

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>
    #include <File.au3>

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

    Opt('TrayAutoPause', 0)
    Opt('TrayMenuMode', 1)
    Opt('TrayOnEventMode', 1)

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

    $Tracklist = @ScriptDir & "\List.txt"
    $Tracks_Pfad = "C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Eigene Musik\z.Music (Script)\"

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

    Tray_Erstellen()
    While 1
    Sleep(100)
    WEnd

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

    Func Tray_Erstellen()
    $Tray_Interpret_2 = "..."
    $Tray_Album_2 = "..."
    $Tracks = _FileCountLines($Tracklist) ; <-- ein Aufruf sollte doch genügen
    TrayCreateItem($Tracks & " Tracks")
    TrayItemSetState(-1, $TRAY_DISABLE)
    TrayCreateItem("")
    $File = FileOpen($Tracklist, 0)
    For $i = 1 to $Tracks
    $Tray_Line_Track = FileReadLine($File) ; <-- das $i macht es nur langsamer
    $Tray_Name = StringTrimLeft($Tray_Line_Track, StringLen($Tracks_Pfad))
    $Tray_Titel = StringTrimRight(StringMid($Tray_Line_Track, StringInStr($Tray_Line_Track, " - ", 0, 3) + 3), 4)
    $Tray_Interpret = StringTrimRight($Tray_Name, StringLen($Tray_Name) - StringInStr($Tray_Name, " - ") + 1)
    $Tray_Album = StringTrimLeft(StringTrimRight($Tray_Name, StringLen($Tray_Name) - StringInStr($Tray_Name, " - ", 0, 2) + 1), StringLen($Tray_Interpret) + 3)
    If $Tray_Interpret <> $Tray_Interpret_2 Then
    $Track_aus_Album = 1
    $Menu_Interpret = TrayCreateMenu($Tray_Interpret)
    EndIf
    $Tray_Interpret_2 = $Tray_Interpret
    If $Tray_Album = "" Then
    $Track_aus_Album = 0
    $Menu_Titel = TrayCreateItem($Tray_Titel, $Menu_Interpret) ; <-- MenüID merken
    ElseIf $Tray_Album <> $Tray_Album_2 Then
    If $Track_aus_Album = 0 Then
    TrayCreateItem("", $Menu_Interpret)
    $Track_aus_Album = 1
    EndIf
    $Menu_Album = TrayCreateMenu($Tray_Album, $Menu_Interpret)
    $Menu_Titel = TrayCreateItem($Tray_Titel, $Menu_Album) ; <-- MenüID merken
    Else
    $Menu_Titel = TrayCreateItem($Tray_Titel, $Menu_Album) ; <-- MenüID merken
    EndIf
    TrayItemSetOnEvent($Menu_Titel, "_Play") ; <-- Funktion für Trayevent (Klick)
    Assign("Menu_Track" & $Menu_Titel, $Tray_Line_Track, 2) ; <-- Globale Variable $Menu_Trackmenüid mit Pfad füllen
    $Tray_Album_2 = $Tray_Album
    Next
    TrayCreateItem("")
    TrayCreateItem("Beenden")
    TrayItemSetOnEvent(-1, "_Exit")
    FileClose($File)
    EndFunc

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

    Func _Play()
    MsgBox(0, "Aktueller Titel", Eval("Menu_Track" & @TRAY_ID))
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]
  • Hey, vielen lieben Dank Dir :)

    Es klappt einwandtfrei, genauso, wie ich mir es vorstelle, nur auf sowas wäre ich nie gekommen... Hatte mit "assign" und "eval" noch nie was gemacht...

    Also vielen Dank für die top Hilfe und Grüße :rolleyes:

  • Neues Problem:

    Bei einer größeren Playlist (probiert mit ~700 Zeilen) wird je nach dem, wie Interpreten- und Album-Anzahl ist, das Tray nur in Berücksichtigung der ersten 400-500 Zeilen erstellt und der letzte Punkt ist zwar Interpret-Album-Titel führt aber die Exit-Funktion aus...

    Woran kann das liegen? Vllt eine Grenze seitens AutoIt?

    BG Andy :)

    Einmal editiert, zuletzt von AndyTR (27. September 2010 um 17:12)