Media Player TrackBar als Aktuelle Abspielzeit Problem

  • VB.NET

Es gibt 33 Antworten in diesem Thema. Der letzte Beitrag () ist von Cr4ckY.

    Media Player TrackBar als Aktuelle Abspielzeit Problem

    Hallo, ich habe meinen Media Player etwas modifiziert (song wiederholen, mute, musik entferne usw) nun möchte ich so eine Leiste einfügen, die die Aktuelle Abspielzeit in einer Trackbar und als Zahl ausgibt.


    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. TrackBar1.Maximum = AxWindowsMediaPlayer1.currentMedia.duration
    3. TrackBar1.Value = AxWindowsMediaPlayer1.Ctlcontrols.currentPosition
    4. TrackLabel.Text = "00:" & TrackBar1.Value
    5. If TrackBar1.Value >= 60 Then TrackLabel.Text = "01:" & TrackBar1.Value - 60
    6. If TrackBar1.Value >= 120 Then TrackLabel.Text = "02:" & TrackBar1.Value - 120
    7. If TrackBar1.Value >= 180 Then TrackLabel.Text = "03:" & TrackBar1.Value - 180
    8. If TrackBar1.Value >= 240 Then TrackLabel.Text = "04:" & TrackBar1.Value - 240
    9. If TrackBar1.Value >= 300 Then TrackLabel.Text = "05:" & TrackBar1.Value - 300
    10. If TrackBar1.Value >= 360 Then TrackLabel.Text = "06:" & TrackBar1.Value - 360
    11. If TrackBar1.Value >= 420 Then TrackLabel.Text = "07:" & TrackBar1.Value - 420
    12. If TrackBar1.Value >= 480 Then TrackLabel.Text = "08:" & TrackBar1.Value - 480
    13. If TrackBar1.Value >= 540 Then TrackLabel.Text = "09:" & TrackBar1.Value - 540
    14. If TrackBar1.Value >= 600 Then TrackLabel.Text = "10:" & TrackBar1.Value - 600
    15. If TrackBar1.Value >= 660 Then TrackLabel.Text = "11:" & TrackBar1.Value - 660
    16. If TrackBar1.Value >= 720 Then TrackLabel.Text = "12:" & TrackBar1.Value - 720
    17. If TrackBar1.Value >= 780 Then TrackLabel.Text = "13:" & TrackBar1.Value - 780
    18. If TrackBar1.Value >= 840 Then TrackLabel.Text = "14:" & TrackBar1.Value - 840
    19. If TrackBar1.Value >= 900 Then TrackLabel.Text = "15:" & TrackBar1.Value - 900
    20. If TrackBar1.Value >= 960 Then TrackLabel.Text = "16:" & TrackBar1.Value - 960
    21. If TrackBar1.Value >= 1020 Then TrackLabel.Text = "17:" & TrackBar1.Value - 1020
    22. If TrackBar1.Value >= 1080 Then TrackLabel.Text = "18:" & TrackBar1.Value - 1080
    23. If TrackBar1.Value >= 1140 Then TrackLabel.Text = "19:" & TrackBar1.Value - 1140
    24. End Sub
    25. Private Sub TrackBar1_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TrackBar1.MouseUp
    26. player.Ctlcontrols.currentPosition = TrackBar1.Value
    27. Timer.Enabled = True
    28. End Sub
    29. Private Sub TrackBar1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TrackBar1.MouseDown
    30. Timer.Enabled = False
    31. End Sub
    32. Private Sub TrackBar1_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar1.MouseLeave
    33. Timer.Enabled = True
    34. End Sub
    Dies habe ich nun auch damit geschafft, leider aber ensteht dort ein etwas ungünstiger Fehler.
    Immer wenn ich mit der Mouse über die Trackbar gehe (wegen Mouse down, up und leave) und die Musik noch nicht läuft crasht es.

    So, ich möchte nun das er erst diese Dinge tut, wenn die Musik auch läuft und ich mit der Mouse drüber gehe. Vll mit einem Status der NUR true ist, wenn musik läuft oder so...
    Wäre n1 wenn mir jemand helfen könnte...
    Naja wie gesagt der Code funktioniert ja, das einzige Problem ist halt, dass das Programm erst nach der Maximalen Dauer (duration) suchen soll, nicht wenn ich mit der Maus rüber gehe, sondern wenn die Musik läuft und ich mit der Maus rüber gehe...
    Wie gesagt diese Funktionen funktionieren schon einwandfrei, jedoch ensteht mit ihnen auch ein lästiger Bug, wenn du als User, bevor du ein Lied angemacht hast, über die TrackBar gehst crasht die exe.
    Dieses Problem ensteht warsch. dadurch, dass er nach einer duration sucht, diese aber noch nicht existieren kann, da kein Lied ausgewählt.
    Wenn ich nun einen Status wie "IsPlaying" oder ähnliches hätte dann könnte ich ja es so schreiben ,dass er erst nach der Maximalen Länge des Liedes (duration) sucht, um sie anzuzeigen, wenn die Musik anfängt.
    Ich hoffe ihr habt mich diesmal verstanden ;)

    MFG lolboter
    Und wie stelle ich das an ? Wenn ich ihn einfach auf enabled true setzte sucht er sofort nachdem Start des Programms, und crasht dann sofort weil man selber einen Song ersteinmal auswählen muss...
    Daher bräuchte ich ein Status der auf true oder ein Value ist, wenn ein Song gespielt wird...^^
    Code wäre n1
    Guten Abend

    Ich habe mal eine Frage
    Ich bin auch dabei ein Player zu machen
    und ich wollte mal Fragen ob man das gleiche auch mit einer Prograssbar machen kann
    und nicht mit einer Trackbar

    Danke schon mal
    MFG Chris
    Schön Abend noch
    also bei mir geht es einwandfrei.

    VB.NET-Quellcode

    1. ProgressBar1.Maximum = Format(CDbl(AxWindowsMediaPlayer1.currentMedia.duration), ".00")
    2. ProgressBar1.Value = Format(CDbl(AxWindowsMediaPlayer1.Ctlcontrols.currentPosition), ".00")


    du brauchst doch nur das tollet Beispiel von Adam ein klein wenig erweitern.
    Und den ProgrssBar Step setzt du auf 1
    ja es klapt ja so weit auch

    nur wenn ich rauf klick macht es nichts

    denn code

    VB.NET-Quellcode

    1. AxWindowsMediaPlayer1.Ctlcontrols.currentPosition = ProgressBar1.Value


    habe ich bei ProgressBar1_Click ist das da richtig ? das weiß ich nicht