Zdarzenie scroll i nie tylko

  • 2 Odpowiedzi
  • 1125 Wyświetleń

0 użytkowników i 1 Gość przegląda ten wątek.

*

Offline Żbik

  • 23
Zdarzenie scroll i nie tylko
« dnia: Grudzień 03, 2008, 07:52:53 »
Mam problem z brakiem zdarzenia scroll w netcf.

Mianowicie piszę sobie coś ala odtwarzacz mp3 i nie potrafię zrobić tak aby scrollbar uaktualniał swoją pozycję wraz z aktualnym czasem odtwarzanego pliku i jednocześnie żeby można było przewijając tego scrollbara.
Albo jedno, albo drugie.

Wynika to z tego że wywołując zdarzenie ValueChanged do przewijania (bo nie ma scroll....chyba?) , po każdym automatycznym uaktualnieniu pozycji scrollbara, czyli zmianie jego pozycji skokowo, skacze też odtwarzany plik. Jak temu zaradzić ?? ???
« Ostatnia zmiana: Grudzień 20, 2008, 05:09:37 wysłana przez Żbik »

*

Offline inzkulozik

  • 15
  • Płeć: Mężczyzna
  • Sprzęt: HTC TyTN II
Odp: Zdarzenie scroll i nie tylko
« Odpowiedź #1 dnia: Grudzień 03, 2008, 09:04:11 »
Wynika to z tego że wywołując zdarzenie ValueChanged do przewijania (bo nie ma scroll....chyba?) , po każdym automatycznym uaktualnieniu pozycji scrollbara, czyli zmianie jego pozycji skokowo, skacze też odtwarzany plik. Jak temu zaradzić ?? ???

Jest jakiś problem w tym, aby przed tym jak sam uaktualniasz pozycję ustawić sobie np. jakiegoś booleana i sprawdzać go w zdarzeniu?

W swoim programiku miałem coś tego typu:
    private void tbTrackPosition_ValueChanged ( object sender, EventArgs e )
    {
      if ( Fposition == -1 ) { return; }
      if ( Fposition == tbTrackPosition.Value ) { return; } //gdy != to wiadomo, ze user zmienia

      iTunesEngine.SetPlayerPosition( (int)tbTrackPosition.Value );
      Fposition = (int)tbTrackPosition.Value;
    }
« Ostatnia zmiana: Grudzień 03, 2008, 09:10:04 wysłana przez inzkulozik »
pozdrawiam

*

Offline Żbik

  • 23
Odp: Zdarzenie scroll i nie tylko
« Odpowiedź #2 dnia: Grudzień 13, 2008, 10:12:10 »
Po małych zmianach prawie działa, tylko co któreś przewinięcie scrolla, ten staje w miejscu razem z licznikiem czasu na labelu. Tak jakby timer się zatrzymał, a sprawdziłem że chodzi. Przewijanie działa po tym tak, że w momencie przewinięcia, uaktualnia prawidłowo pozycję utworu, czas na labelu, utwór leci prawidłowo a scroll / label stoją. Dlaczego tak się dzieje? Aha jak zmniejszę częstotliwość timera ze 100 do 1000 ms to objawy te występują przeważnie od pierwszego ręcznego przewinięcia.

Private Sub ScrollBar1_ValueChanged(ByVal sender As Object, ByVal e _
    As System.EventArgs) Handles ScrollBar1.ValueChanged

        If ScrollBar1.Value = Convert.ToInt32((CurPos * 100) / DurationVar) Then Exit Sub

        Try
            If player.currentMedia.duration <> 0 Then
                Dim NewPerc As Double = Convert.ToDouble(ScrollBar1.Value) / 100
                Dim DurationVar As Integer = Convert.ToInt32(player.currentMedia.duration * 1000)
                Dim NewPos As Integer = (DurationVar * NewPerc) / 1000

                player.controls.currentPosition = NewPos

            Else
                ScrollBar1.Value = 0
            End If
        Catch ex As Exception
            lblInfo.Text = "błąd scrolla"
        End Try
        End If
    End Sub

    Private Sub ScrollUpdate()
        CurPos = Convert.ToInt32(player.controls.currentPosition * 1000)
        DurationVar = Convert.ToInt32(player.currentMedia.duration * 1000)
        If DurationVar > 0 Then
            ScrollBar1.Value = Convert.ToInt32((CurPos * 100) / DurationVar)
        End If
    End Sub

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e _
                            As System.EventArgs) Handles Timer1.Tick
        If player.playState = WMPLib.WMPPlayState.wmppsStopped Then
            StopSong()
        Else
            lblCzas.Text = player.controls.currentPositionString & " / " _
            & player.currentMedia.durationString
            ScrollUpdate()
        End If
    End Sub


2)
Można wyłączyć kursor w textboxie? Chcę żeby można było zaznaczać text, żeby było menu kontekstowe do edycji tego tekstu i z tym nie mam problemu tylko wkurza mnie ten kursor, a nie mogę za chiny się go pozbyć. Czy trzeba użyć innej kontrolki? Jakiej?

Pewnie głupie dla wielu pytania. Dla mnie amatora niestety nie. Dzięki za wszelkie wskazówki.
« Ostatnia zmiana: Styczeń 22, 2009, 21:31:17 wysłana przez Żbik »