Seite 1 von 1

TrackBarGadget bei Movies steuern [gelöst]

Verfasst: 28.11.2016 13:57
von MenschMarkus
Hallo zusammen.

Kann mir bitte jemand sagen wie ich beim Abspielen eines Movies die Trackbar automatisch aktualisieren kann, und zwar ohne dass ich die Maus im Fenster bewegen muss?

Hier mal mein kleiner Versuch:

Code: Alles auswählen

EnableExplicit

If Not InitMovie()
    MessageRequester("Fehler","Kann Movie Bibliothek nicht öffnen",#MB_ICONERROR)
    End
EndIf


Enumeration
    #moviewin
    #moviectrl
EndEnumeration
Enumeration
    #startstop01
    #speedup
    #tracbar
    #movie
EndEnumeration


Global FileName.s
Global width.i, height.i, movielen.i, SlowmoThread.i, RunMovThread.i, position.q, speedpos.q
Global event.i, EventWin.i

OpenWindow(#moviewin,100,140,640,480,"Movie")
OpenWindow(#moviectrl,100,10,640,90,"Movie Control")
ButtonGadget(#startstop01,3,3,150,30,"Start/Stop",#PB_Button_Toggle)
ButtonGadget(#speedup,160,3,150,30,"Slowmo",#PB_Button_Toggle)
TrackBarGadget(#tracbar,3,70,300,20,1,100)


Procedure tracbar(speedpos)
    SetGadgetState(#tracbar,speedpos)                            
EndProcedure

Procedure   playmov(value.i)
    If value = 0 ;start Movie
        PlayMovie(#movie,WindowID(#moviewin))
    ElseIf value = 1 ;Pause movie
        PauseMovie(#movie)
    ElseIf value = 2 ;restart movie
        ResumeMovie(#movie)
    EndIf
EndProcedure

Procedure speedup(speedpos.i)     ;Thread
    Repeat
        speedpos + 1
        MovieSeek(#movie,speedpos)
        playmov(2)
        playmov(1)
        Delay(200)
        ;tracbar(speedpos)               ;Das geht so nicht !?
        SetWindowTitle(#moviectrl,"Movie Position: " + Str(speedpos))    ;Das geht aber schon !
    ForEver    
EndProcedure


FileName = OpenFileRequester("Movie","","Videodateien|*.avi;*.mpg;*.mkv|Alle Dateien|*.*",0)
If FileName <> ""
    If LoadMovie(#movie,FileName) = 0
        MessageRequester("Fehler","Konnte Videodatei nicht öffnen",#MB_ICONERROR)
        End
    Else
        width = MovieWidth(#movie)
        height = MovieHeight(#movie)
        movielen = MovieLength(#movie)
        SetGadgetAttribute(#tracbar,#PB_TrackBar_Maximum,movielen)
        ResizeWindow(#moviewin,#PB_Ignore,#PB_Ignore,width,height)
        playmov(0)
        Repeat
            event = WaitWindowEvent()
            EventWin = EventWindow()
            If EventWin = #moviectrl
                Select event
                    Case #PB_Event_Gadget
                        Select EventGadget()
                            Case #startstop01
                                If GetGadgetState(#startstop01) = 1
                                    position = MovieStatus(#movie)
                                    playmov(1)
                                    SetWindowTitle(#moviewin,"Movie " + Str(position))
                                    DisableGadget(#speedup,1)
                                Else
                                    SetWindowTitle(#moviewin,"Movie ")
                                    playmov(2)
                                    DisableGadget(#speedup,0)
                                EndIf
                            Case #speedup
                                If GetGadgetState(#speedup) = 1
                                    speedpos = MovieStatus(#movie)
                                    playmov(1)
                                    SlowmoThread = CreateThread(@speedup(),speedpos)
                                    If IsThread(SlowmoThread)
                                        DisableGadget(#startstop01,1)
                                    EndIf
                                Else
                                    If IsThread(SlowmoThread)
                                        KillThread(SlowmoThread)
                                        DisableGadget(#startstop01,0)
                                    EndIf
                                    playmov(2)
                                EndIf
                            Case #tracbar
                                If GetGadgetState(#startstop01) = 1
                                    speedpos = GetGadgetState(#tracbar)
                                    MovieSeek(#movie,speedpos)
                                    playmov(2)
                                    playmov(1)
                                    SetGadgetState(#tracbar,speedpos)
                                EndIf
                        EndSelect
                    Case #PB_Event_CloseWindow
                        Break
                EndSelect
            EndIf
        ForEver
        StopMovie(#movie)
        FreeMovie(#movie)
    EndIf
EndIf
End

Re: TrackBarGadget bei Movies steuern

Verfasst: 28.11.2016 14:35
von True29
hier sind 2 fehler drin.

Code: Alles auswählen

 event = WindowEvent() 
hier hattest du waitwindowevent benutzt welches auf eine eingabe wartet.

Code: Alles auswählen

SetGadgetState(#tracbar,MovieStatus(#movie)) 
diesen code dann außerhalb des event case blocks jedoch innerhalb der programmschleife benutzt um den trackbar zu setzten.

so funktioniert das ganze dann auch.

Re: TrackBarGadget bei Movies steuern

Verfasst: 28.11.2016 15:25
von MenschMarkus
tks true29