PDAclub.pl - Forum użytkowników technologii mobilnych
Windows Mobile (Classic, Professional, Standard), Windows Phone 6.x oraz 7/8.x/10 => Oprogramowanie PPC => Dla programistów => Wątek zaczęty przez: Żbik w 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ć ?? ???
-
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;
}
-
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.