AxWindowsMediaPlayer & TrackBar ruckelt!!

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von sickscore.

    AxWindowsMediaPlayer & TrackBar ruckelt!!

    Hi zusammen!
    Bin momentan dabei, mir einen schicken Player zu basteln, allerdings weiß ich jetzt grad nicht mehr weiter :(
    Läuft alles perfekt bis auf eine Sache:

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. If AxWindowsMediaPlayer1.playState = WMPLib.WMPPlayState.wmppsPlaying Then
    3. TrackBar1.Value = CInt(AxWindowsMediaPlayer1.Ctlcontrols.currentPosition) 'HIER HACKT DAS GANZE!!!
    4. If AxWindowsMediaPlayer1.Ctlcontrols.currentPositionString.Length <= 7 Then
    5. Dim CurrentLength As String = AxWindowsMediaPlayer1.Ctlcontrols.currentPositionString
    6. Dim MaxLength As String = AxWindowsMediaPlayer1.currentMedia.durationString
    7. lbl_duration.Text = "00:" & CurrentLength & " / " & MaxLength
    8. Else
    9. Dim CurrentLength As String = AxWindowsMediaPlayer1.Ctlcontrols.currentPositionString
    10. Dim MaxLength As String = AxWindowsMediaPlayer1.currentMedia.durationString
    11. lbl_duration.Text = CurrentLength & " / " & MaxLength
    12. End If
    13. End If
    14. End Sub


    Ich hol mir quasi nur per Timer die aktuelle Position und lass somit die TrackBar schön mitschubsen.
    Allerdings merkt man, dass der Film alle 100ms bzw. 500ms ruckelt, je nachdem wie ich die Interval einstelle..

    Sobald ich allerdings die Zeile (Im Code markiert!) weglasse, klappt alles wunderbar! (natürlich dann ohne die Trackbar!)

    Ich denke auch mal, dass es an diesem Code liegt, mit dem ich den Film ala VLC-Player an die gewünschte Position bringen kann.

    VB.NET-Quellcode

    1. Private Sub TrackBar1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar1.ValueChanged
    2. AxWindowsMediaPlayer1.Ctlcontrols.currentPosition = TrackBar1.Value
    3. End Sub


    Denke mal, die vertragen sich nicht, die beiden Codes. Vorschläge zum Umgehen bzw. Verbessern?


    Wäre euch 1000x dankbar!! :D
    Schönes WE schonmal..


    EDIT:
    Oke, habs raus:
    Ich benutze die GTrackBar, nicht die "normale" von VB.NET.
    Wenn ich das alles mit der originalen mache, klappt ohne Probleme!

    Ich schätze mal es liegt daran, dass die VB.NET TrackBar das Event "TrackBar1_Scroll" benutzt, während die GTrackBar "GTrackBar1_ValueChanged" nimmt. Scroll fuinktioniert bei der irgendwie nicht :(


    Edit by Manschula: Die Farbe Rot ist den Moderatoren vorbehalten! --> Farbe entfernt

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Manschula“ ()

    Ich halte das eher für ein Thread-Problem. :S
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Aber wenn ich die GTrackBar1 nur mitlaufen lasse mit der Duration, dann klappts wunderbar.
    ERST sobald ich:

    VB.NET-Quellcode

    1. Private Sub GTrackBar1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GTrackBar1.ValueChanged
    2. AxWindowsMediaPlayer1.Ctlcontrols.currentPosition = GTrackBar1.Value
    3. End Sub


    mit dazunehme, hackts..eigentlich logisch, der setzt sich dann immer alle 100ms ein stück zurück..
    NUR ICH WEI? KEINE LÖSUNG DAFÜR :(

    Edit by Manschula: (Unnötiges) Vollzitat entfernt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Manschula“ ()

    sickscore schrieb:

    AxWindowsMediaPlayer1.Ctlcontrols.currentPosition = GTrackBar1.Value

    Du setzt die Position des Players permanent neu?
    Nimm diese Zeile raus!
    Der läuft allein.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Aber die brauche ich doch, damit ich die Position selbst bestimmen kann, also per "an der TrackBar ziehen"..
    Danke übrigens für die schnelle Hilfestellung!! :thumbsup:

    Edit by Manschula: (Unnötiges) Vollzitat entfernt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Manschula“ ()

    Moment.
    Ich sehe eine ProgressBar vor mir, Du schreibst von einer TrackBar. :S
    Kannst Du bitte mal kurz beschreiben, was Du eigentlich willst?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ganz einfach:
    Ich hab das AxWindowsMediaPlayer Control mit dem Ui.Mode "none" (also keine Buttons etc..nur Videofläche)
    Dazu hab ich mir noch die GTrackbar geholt (link im Startpost). Mit dieser will ich nun die aktuelle Position anzeigen lassen bzw. auch ändern können!

    Mit der "normalen" Trackbar von VB.NET klappt das ohne Probleme, weil ich da das Event "Scroll" benutzen kann, welches es aber bei der GTrackBar anscheinend nicht gibt :(

    Quasi es würde schon funktionieren mit der Standard-Trackbar, aber die andre sieht einfach um Meilen besser aus ;)

    Edit by Manschula: (Unnötiges) Vollzitat entfernt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Manschula“ ()

    Dann solltest Du im Track-Handler per Flag das Runterblasen der Position unterbinden, wenn Du ziehst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    oumann..ich bin echt kacke im erklären :(
    Bitte spring mir nicht auf den Kopf ;(

    Beim Ziehen klappt das ja auch alles. Nur beim Abspielen hackts, weil sich quasi die Value der GTrack ändert durchs abspielen.
    Bei der Normalen ist das nicht so, weil ich da als Event nicht "ValueChanged" sondern "Scroll" hernehmen kann.

    Quasi sobald der Timer tickt, ändert sich die Value der Track und diese wiederrum ändert dann wieder die currentduration vom Film. *phuuu..
    Teufelskreis eben. Bei der normalen TrackBar ist dies nicht der Fall, da ich das Event "ValueChanged" nicht abfragen muss, weil hier "Scroll" funktioniert.


    Ich hoffe irgendjemand checkt, was ich sagen will xDDD ;(

    ERLEDIGT:
    Hab mir jetzt diese hier geholt:
    codeproject.com/Articles/17395/Owner-drawn-trackbar-slider

    Die kennt die Eigenschaft "Scroll", somit kein Problem!
    Trotzdem DANKE für die schnelle Hilfestellung!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „sickscore“ ()