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