Bitte testen

  • kann mir jemand dieses script mal in einem Ordner mit Mp3s testen, und mir genau sagen, was passiert? (und vieleicht auch warums bei mir net funzt X()

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>

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

    Opt("TrayMenuMode", 1)
    Dim $item[9999]
    Dim $files[9999]

    $soundmenue = TrayCreateMenu("Sounds")
    $exit = TrayCreateItem("Exit")
    $i = 0
    $search = FileFindFirstFile(@ScriptDir & "\*.mp3")
    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    $item[$i] = TrayCreateItem($file, $soundmenue)
    $files[$i] = $file
    $i = $i + 1
    WEnd

    While 1
    $msg = TrayGetMsg()

    If $msg = $exit Then Exit

    For $1 = 0 To $i
    If $msg = $item[$1] Then
    MsgBox(0,"",$files[$i])
    EndIf
    Next
    Sleep(1)
    WEnd

    [/autoit]


    Bei mir passiert folgendes:
    ich starte das script, die Traymenüs werden erstellt, und es ploppt sofort, die Msg-Box ohne irgendeinen Text auf, obwohl ich gar nicht ins Menü geklickt hab.

    Einmal editiert, zuletzt von Vollnoob (4. August 2007 um 12:31)

  • ... ein paar kleine Änderungen ;)

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>

    Opt("TrayMenuMode", 1)
    Dim $item[9999]
    Dim $files[9999]

    $soundmenue = TrayCreateMenu("Sounds")
    $exit = TrayCreateItem("Exit")
    $i = 0
    $search = FileFindFirstFile(@ScriptDir & "\*.mp3")
    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    $item[$i] = TrayCreateItem($file, $soundmenue)
    $files[$i] = $file
    $i = $i + 1
    WEnd

    While 1
    $msg = TrayGetMsg()

    If $msg = $exit Then Exit
    ; variable von $1 nach $j umbenannt
    ; $j bei 1 starten lassen ...
    ; $i -1
    For $j = 1 To $i-1
    If $msg = $item[$j] Then
    MsgBox(0,"",$files[$j])
    EndIf
    Next
    Sleep(1)
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von jonk (4. August 2007 um 12:59)

  • Vielen Dank,
    hauts endlich,

    kannst du mir genau erklären, was das

    [autoit]

    For $j = 1 To $i-1

    [/autoit]

    genau aussagt?

    bin noch ziehmlich neu im thema, und kapier das for next noch nicht vollständig. (programieranfänger)

  • For $j = 1 To $i-1

    In nem Satz:

    Variable $j wird von 1 bis den wert von $i-1 (also wenn $i = 10, dann hier: 9)
    gezählt.
    So kann man zb in Arrays gut arbeiten, da man sich bei einer WHile scleife das "zählen" spart :)
    schau dir im tutorial mal die schleifen an, um es zu verstehen reicht aber das:

    [autoit]

    For $i = 1 to 100
    MsgBox(0, "", "wert von $i ist " & $i)
    next ; beendet die FOR schleife, ab dann wird wiederholt :)

    [/autoit]


    (pee ist nicht da , das muss ich ausnützen *leerzeile leerzeile* *g*)

    mfg

    bernd670: auch ich hasse die überflüssigen Leerzeilen! :D

  • Hi,
    eigentlich muss es doch so heißen (For $j = 0 <<<<< ......).
    Sonst passiert beim Klick auf den ersten Titel nichts :D

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>

    Opt("TrayMenuMode", 1)
    Dim $item[9999]
    Dim $files[9999]

    $soundmenue = TrayCreateMenu("Sounds")
    $exit = TrayCreateItem("Exit")
    $i = 0
    $search = FileFindFirstFile(@ScriptDir & "\*.mp3")
    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    $item[$i] = TrayCreateItem($file, $soundmenue)
    $files[$i] = $file
    $i = $i + 1
    WEnd

    While 1
    $msg = TrayGetMsg()

    If $msg = $exit Then Exit
    ; variable von $1 nach $j umbenannt
    ; $j bei 1 starten lassen ...
    ; $i -1
    For $j = 0 To $i-1
    If $msg = $item[$j] Then
    MsgBox(0,"",$files[$j])
    EndIf
    Next
    Sleep(1)
    WEnd

    [/autoit]

    Die Schleife bedeutet, dass der erste Wert 0 ist und der letzte Wert ist der Wert von $i-1

    Bsp:

    4 Dateien
    Datei 1: $i = 0
    Datei 2: $i = 1
    Datei 3: $i = 2
    Datei 4: $i = 3
    Nach dem letzten Durchlauf der Schleife ist aber $i = 4.
    Deshalb mußt du in der 2. Schleife auch $i-1 schreiben, also hier 3 (Wert für die letzte 4. Datei :D)

    Hoffe die Erklärung ist verständlich :musik1:

  • Es geht aber noch einfacher :) und zwar so:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    #include <file.au3>

    Opt("TrayMenuMode", 1)
    Dim $item[9999]
    Dim $files[9999]

    $soundmenue = TrayCreateMenu("Sounds")
    $exit = TrayCreateItem("Exit")
    $i = 0
    $Filelist = _FileListToArray(@ScriptDir & "\", "*.mp3", 1)
    If @Error=1 Then
    MsgBox (0,"","No Files\Folders Found.")
    Exit
    EndIf
    ;~ _ArrayDisplay($Filelist, "Files")
    for $i = 1 to $Filelist[0]
    $item[$i-1] = TrayCreateItem($Filelist[$i], $soundmenue)
    $files[$i-1] = $Filelist[$i]
    Next
    While 1
    $msg = TrayGetMsg()
    If $msg = $exit Then Exit
    For $1 = 0 To $i
    If $msg = $item[$1] Then
    MsgBox(0,"",$files[$1])
    EndIf
    Next
    Sleep(1)
    WEnd

    [/autoit]

    2 Mal editiert, zuletzt von Nightraven (8. August 2007 um 15:32)

  • Danke Jungs/Mädels für die viele Mühe, habt mir sehr weiter geholfen.

    <--- Viel dazugelernt :klatschen:

  • Zitat

    Original von Nightraven
    Es geht aber noch einfacher :) und zwar so:


    Ich versteh genau wie du das meinst, aber wenn ich dieses script wieder ausführe, passiert wieder das selbe wie bei deiner letzten Version.

    es kommt sofort die messagebox, ohne inhalt.

  • Hmm? Ich hab dir hier eine version gemacht wo's dann direkt den Sound spielt. Eigentlich sollte das obere auch funtionieren. Naja egal zumindest hier mal eine version die 100% funktioniert ;)

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    #include <file.au3>
    #include <sound.au3>
    Opt("TrayMenuMode", 1)
    Dim $item[9999]
    Dim $files[9999]

    $soundmenue = TrayCreateMenu("Sounds")
    $exit = TrayCreateItem("Exit")
    $i = 0
    $Filelist = _FileListToArray(@ScriptDir, "*.mp3", 1)
    If @Error Then
    MsgBox (0,"","No Files\Folders Found.")
    Exit
    EndIf

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

    _ArrayDisplay($Filelist, "Files")

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

    for $i = 1 to $Filelist[0]
    $item[$i] = TrayCreateItem($Filelist[$i], $soundmenue)
    $files[$i] = $Filelist[$i]
    Next

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

    While 1
    $msg = TrayGetMsg()
    If $msg = $exit Then Exit
    For $1 = 1 To $i
    If $msg = $item[$1] Then
    $sound = _SoundOpen(@ScriptDir & "/" & $files[$1])
    _play()
    EndIf
    Next
    Sleep(1)
    WEnd

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

    Func _play()
    _SoundPlay($sound) ;evtl. _Soundplay($sound, 1)
    EndFunc

    [/autoit]