TrackBar + Movie

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

TrackBar + Movie

Beitrag von sen-me »

sen-me hat geschrieben:Ein anderes Problem:
Wie kann ich mittels TrackBar ein Movie steuern?
Also das die Trackbar grade anzeigt welcher Frame gespielt wird hab ich schon, nur klapt es nicht mit dem Trackbar verschieben = Movie spielt an der verschobenen stelle weiter... die trackbar kehrt immer gleich wieder zurück wo das movie war
Bild
Benutzeravatar
Ja!
Beiträge: 271
Registriert: 02.01.2006 16:13
Wohnort: Stuttgart

Beitrag von Ja! »

Kopier mal die Stelle aus Deinem Programm, wo Du die
Trackbar handelst hier her.
Vielleicht machst Du da was falsch..
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

Code: Alles auswählen

pos=getgadgetstate(trackbar)
Ergebnis = MovieSeek(#Movie, pos)

Purebasic 5.0 32bit und 64 bit

I'm back from hell
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von sen-me »

Code: Alles auswählen

If IsMovie(0)
  SetGadgetState(0, MovieStatus(0))
 EndIf

Code: Alles auswählen

If evid = #PB_Event_Gadget
  Select EventGadget()
   Case 0
    MovieSeek(0, GetGadgetState(0))
Bild
Benutzeravatar
winduff
Beiträge: 879
Registriert: 10.02.2006 21:05
Wohnort: Gießen
Kontaktdaten:

Beitrag von winduff »

öhm nen bisschen mehr code wäre nützlich, und auch kommentiert... das was da steht... hat meines erachtens nicht viel mit nem movie zu tun
Bild
AND51 hat geschrieben:...und ich würde dein Programm aus Wut zwei mal installieren, um eines genüsslicher löschen zu können, als das andere...
Benutzeravatar
Ja!
Beiträge: 271
Registriert: 02.01.2006 16:13
Wohnort: Stuttgart

Beitrag von Ja! »

Eventuell setzt Du die Trackbar mit dem SetGadgetState(0, MovieStatus(0))
zurück, bevor das MovieSeek "greifen" kann.
Schau mal genau nach, was zu erst aufgerufen wird.

Gruß
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag von jear »

@sens-me
Ein Trackbar hat einen Maximalwert, der unter 10000 liegen soll.
Nehmen wir ein Video, das genau 10000 Frames hat. Das ließe sich mit einem Trackbar vollständig kontrollieren.
Was aber mit einem Video mit mehr als 10000 Frames?
Was mit einem Video, das weniger als 10000 Frames hat?

Du musst also in Deinen Kontrollmechanismus einbauen:
- setzen des Trackbar-Maximums abhängig von der Länge des Videos
- entsprechende Berechnung einer Relation zwischen Trackbar und Video
- beim Auslesen der augenblicklichen Position aus dem Video die Umrechnung in den entsprechenden Trackbar-Wert für die Anzeige
- beim Schieben des Trackbar's die Umrechnung des ausgelesenen Trackbar-Wertes in die Position im Video

Alles einfache Berechnungen, die aber sein müssen.
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von sen-me »

Code: Alles auswählen

Repeat
 evid = WaitWindowEvent()
 
 If evid = #PB_Event_Gadget
  Select EventGadget()
   Case 0
    PauseMovie(0)
    MovieSeek(0, GetGadgetState(0))
   Case 2
    file.s = OpenFileRequester("Medie auswählen...", "", pat, 0)
    
    If file
     If IsMovie(0) : FreeMovie(0) : If IsWindow(1) : CloseWindow(1) : EndIf : EndIf
     
     If LoadMovie(0, file) = 0 Or MovieHeight(0) = -1
      Error(1, 3)
     EndIf
     
     DisableGadget(3, 0)
     SetGadgetAttribute(0, #PB_TrackBar_Maximum, MovieLength(0))
    EndIf
   Case 3
    If MovieStatus(0) = 0
     DisableGadget(0, 0)
     DisableGadget(2, 1)
     DisableGadget(4, 0)
     DisableGadget(5, 0)
     DisableGadget(6, 0)
     
     If stopped.b = 0
      If OpenWindow(1, 0, 0, MovieWidth(0), MovieHeight(0), GetFilePart(file), #PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered) = 0
       Error(1, 4)
      EndIf
     EndIf
     
     PlayMovie(0, WindowID(1))
    ElseIf MovieStatus(0) = -1
     ResumeMovie(0)
    Else
     PauseMovie(0)
    EndIf
   Case 4
    StopMovie(0)
    DisableGadget(2, 0)
    stopped.b = 1
   Case 5
    If MovieStatus(0) = -1 : was.b = 1 : ResumeMovie(0) : EndIf
    MovieSeek(0, MovieInfo(0, 0)+MovieStatus(0))
    If was = 1 : was = 0 : PauseMovie(0) : EndIf
   Case 6
    If MovieStatus(0) = -1 : was.b = 1 : ResumeMovie(0) : EndIf
    MovieSeek(0, MovieStatus(0)-MovieInfo(0, 0))
    If was = 1 : was = 0 : PauseMovie(0) : EndIf
  EndSelect
 EndIf
 
 If IsMovie(0) And MovieStatus(0) > 0
  SetGadgetState(0, MovieStatus(0))
 EndIf
Until evid = #PB_Event_CloseWindow
hab ich jetzt...

Wie kann ich die länge des videos herausfinden?
Also ich meine in Sekunden/Minuten
Bild
Benutzeravatar
Ja!
Beiträge: 271
Registriert: 02.01.2006 16:13
Wohnort: Stuttgart

Beitrag von Ja! »

Aus der Hilfe: Laenge = MovieLength(#Movie)

Das ist zwar die Länge in Frames, aber mehr brauchst ja auch gar nicht.

Mit Relation meint Jear: Wenn der User die Trackbar auf (z.B.) 5000 (also die Hälfte) setzt, und der Movie 100000 Frames hat, dann setzt Du den Movie natürlich auf 50000, also auch die Hälfte.
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von sen-me »

:? und wenn das Movie 10 Frames hat und die Trackbar 100 ?
Bild
Antworten