Witam
Piszę program gdzie między innymi wyświetlam filmy. Dorobiłem też pasek scroll do filmu. Mam z nim jednak pewien problem. Jak film leci od samego początku „wskaźnik” przesuwa się prawidłowo od początku suwaka do samego końca. Problem zaczyna się gdy chcemy przewinąć film np. do tyłu klikając w dowolne miejsce suwaka. Weźmy taką sytuację:
Film puszczony został raz i wskaźnik przesunął się do samego końca. Teraz wybieram środek suwaka i klikam i to powinno odpowiadać środkowi filmu. Niestety już za pierwszym razem jest lekkie przesunięcie filmu do przodu i jak wskaźnik leci dalej do końca filmu to zatrzymuje się jakąś określoną odległość od końca suwaka. Następnym razem powtarzając proces zatrzymuje się mniej więcej 2x ta odległość. Po pewnym czasie klikając na środek zatrzymujemy się na końcu filmu a wskaźnik znajduje s]ię na środku suwaka.
Nie mam pojęcia skąd bierze się to przesuniecie i jak temu zaradzić.
Język programowania nie ma tu znaczenia podejrzewam mój błąd logiczny lub jakieś moje niedopatrzenie
oto kod:
Sub ObliczFilm() ‘obliczenie danych filmu
Dim w As Single
lDlugoscFilmu = DlugoscFilmuSekundach()
w = 500 / lDlugoscFilmu
lInterval = w
End Sub
Private Sub picPasekPostepuFilm_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles picPasekPostepuFilm.Click
'przeliczanie
Dim tempX As Single = 0 ‘ aktualna pozycja
Dim tempWskaznikX As Single = 0 ‘pozycja x kontrolki wskaźnik pozycji filmu
Dim k As Single = 0
tempX = MousePosition.X
If tempX > tempWskaznikX Then ‘jeśli aktualna jest wieksza znaczy przesuń film do przodu
tempX = tempX - tempWskaznikX
k = tempX / lInterval
tempWskaznikX = tempWskaznikX + tempX
PrzesunDoPrzoduSekundowo(k)
Else ‘inaczej do tyłu przewiń film
tempX = tempWskaznikX - tempX
k = tempX / lInterval
tempWskaznikX = tempWskaznikX - tempX
PrzesunDoTyluSekundowo(k)
End If
picWskaznikFilm.Location = New System.Drawing.Point(tempWskaznikX, tempWskaznikY)
tmrZegarFilm.Enabled = True
WznowFilm()
picStartFilm.Visible = False
picWstrzymajFilm.Visible = True
booPauza = False
End Sub
------------ funkcje przesuwające film
Public Function DlugoscFilmuMilisekundach() As Long
'zwraca długość filmu w millisekundach
Error1 = mciSendString("set movie time format ms", 0, 0, 0)
Error1 = mciSendString("status movie length", Data, 128, 0)
DlugoscFilmuMilisekundach = Val(Data)
End Function
Public Function DlugoscFilmuSekundach() As Long
DlugoscFilmuSekundach = DlugoscFilmuMilisekundach() \ 1000
End Function
' Po sekundach
Public Function PrzesunDoTyluSekundowo(ByVal numSec As Long) As Long
Error1 = mciSendString("set movie time format ms", 0, 0, 0)
Error1 = mciSendString("play movie from " & PozycjaMilisekundach() - 1000 * numSec, 0, 0, 0)
Return 0
End Function
Public Function PrzesunDoPrzoduSekundowo(ByVal numSec As Long) As Long
Error1 = mciSendString("set movie time format ms", 0, 0, 0)
Error1 = mciSendString("play movie from " & PozycjaMilisekundach() + 1000 * numSec, 0, 0, 0)
Return 0
End Function