Oppure

Loading
06/04 10:35
Carlo
Postato originariamente da nightwolf:

Beh!, credo che dipenda da quello, dal timer3, è l unico associato alla visualizzazione di controll_volume1, se tolgo timer3 il controllo non si vede, infatti se non viene attivato timer3, il control_volume1 non si vede. È l unica spiegazio e che posso dare.

dipende da cosa significa rimbalzi.
se il controllo volume appare e scompare, si.
se il volume si alza e abbassa in modo non voluto allora no.
Ultima modifica effettuata da Carlo 06/04 19:33
in programmazione tutto è permesso
06/04 10:40
nightwolf
Appare e scompare, il livello funziona perfettamente
aaa
06/04 19:45
Carlo
Postato originariamente da nightwolf:

Appare e scompare, il livello funziona perfettamente


E' normale, ogni volta che arriva un valore di volume valido il timer3 viene abilitato, guarda la riga 52 media_pleyer.Timer3.Start()


Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
                Dim str As String = RiceviDati()
             
                str = str.Replace(vbCrLf, "|")
                ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Ricevuto = " & str)
                ListBox1.TopIndex = ListBox1.Items.Count - 1
                ListBox1.HorizontalScrollbar = True
     
                Dim righe() = str.Split("|")
                Dim uso = 0 ' la prima riga
                If righe.Length = 0 Then Return
                If righe.Length > 1 Then uso = 1 ' la seconda riga
             
                ' Elaboro la stringa
                Dim valoriDivisi() As String = righe(uso).Split(";")
                If valoriDivisi.Length <> 2 Then
                    ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato = Errore i valori non sono due")
                    Return
                End If
                ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Selezionato = " & righe(uso))
                If valoriDivisi(0) = "E" Then
                    lblgradi.Text = "errore"
                    ' in valoriDivisi(1) ' il tipo d'errore da mostrare dove vuoi
                    ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato = Errore " & valoriDivisi(0) & " - " & valoriDivisi(1))
                Else
                    ' Il primo dato è riferito ai gradi della bussola
                    valoriDivisi(0) = valoriDivisi(0).Replace(".", ",") ' se ci fosse il punto decimale viene sostituito con la virgola decimale
                    If Double.TryParse(valoriDivisi(0), avanzamento) Then
                        If avanzamento <= 0 Or avanzamento >= 360 Then
                            ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato Bussola = Errore il valore " & avanzamento.ToString() & " è fuori range")
                        Else
                            lblgradi.Text = avanzamento.ToString("000°")
                            Pcboxbussola.Invalidate()
                            ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato Bussola = " & avanzamento.ToString("000°"))
                        End If
                    Else
                        ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato = Errore " & valoriDivisi(0).Substring(0, 3) & " non è un intero")
                    End If
             
                    '' Il dato in: valoriDivisi(1), è riferito al volume e è una stringa
             
                    Dim volume As Integer = 0
                    If Integer.TryParse(valoriDivisi(1), volume) Then
                        If volume < 0 Or volume > 100 Then
                            ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato Volume = Errore il valore " & volume.ToString() & " è fuori range")
                        Else
                            ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato Volume = " & valoriDivisi(1))
                            media_pleyer.lb_volume.Text = valoriDivisi(1) + "%"
                            media_pleyer.Volume_control1.value = valoriDivisi(1)
                            lb_volume.Text = valoriDivisi(1) + "%"
                            Volume_control1.value = valoriDivisi(1)
                            media_pleyer.Timer3.Start()
                            media_pleyer.AxWindowsMediaPlayer1.settings.volume = media_pleyer.Volume_control1.value
                            AxWindowsMediaPlayer1.settings.volume = media_pleyer.Volume_control1.value
                            video.Wmp1.settings.volume = video.Volume_control1.value
                        End If
                    Else
                        ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato = Errore " & valoriDivisi(1) & " non è un intero")
                    End If
                End If
End Sub


Per evitarlo devi controllare il valore del volume ed eseguire la riga: media_pleyer.Timer3.Start() solo se è diverso dall'ultimo ricevuto.
Ultima modifica effettuata da Carlo 06/04 19:46
in programmazione tutto è permesso
06/04 20:39
nightwolf
Ok, se non ho capito male dovrei, verificare che se valoriDivisi(1) = valoriDivisi(1) stai fermo, altrimenti se valoriDivisi(1) <> valoriDivisi(1) attivo il timer3
Più o meno
aaa
06/04 21:07
Carlo
Postato originariamente da nightwolf:

Ok, se non ho capito male dovrei, verificare che se valoriDivisi(1) = valoriDivisi(1) stai fermo, altrimenti se valoriDivisi(1) <> valoriDivisi(1) attivo il timer3
Più o meno


si, per farlo ti serve una variabile globale volumeOld oppure una variabile statica volumeOld che non perde il valore quando si esce dalla routine.
Inoltre il controllo è meglio farlo sul valore convertito in intero validato.
Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
    Dim str As String = RiceviDati()
    Static volumeOld As Integer ' con static il valore non si perde

    str = str.Replace(vbCrLf, "|")
    ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Ricevuto = " & str)
    ListBox1.TopIndex = ListBox1.Items.Count - 1
    ListBox1.HorizontalScrollbar = True

    Dim righe() = str.Split("|")
    Dim uso = 0
    If righe.Length = 0 Then Return ' forse non serve
    If righe.Length > 1 Then uso = 1

    ' Elaboro la stringa
    Dim valoriDivisi() As String = righe(uso).Split(";")
    If valoriDivisi.Length <> 2 Then
        ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato = Errore i valori non sono due")
        Return
    End If
    ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Selezionato = " & righe(uso))
    If valoriDivisi(0) = "E" Then
        lblgradi.Text = "errore"
        ' in valoriDivisi(1) ' il tipo d'errore da mostrare dove vuoi
        ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato = Errore " & valoriDivisi(0) & " - " & valoriDivisi(1))
    Else
        ' Il primo dato è riferito ai gradi della bussola
        valoriDivisi(0) = valoriDivisi(0).Replace(".", ",") ' se ci fosse il punto decimale viene sostituito con la virgola decimale
        If Double.TryParse(valoriDivisi(0), avanzamento) Then
            If avanzamento < 0 Or avanzamento > 360 Then
                ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato Bussola = Errore il valore " & avanzamento.ToString() & " è fuori range")
            Else
                lblgradi.Text = avanzamento.ToString("000°")
                Pcboxbussola.Invalidate()
                ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato Bussola = " & avanzamento.ToString("000°"))
            End If
        Else
            ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato = Errore " & valoriDivisi(0) & " non è un intero")
        End If

        '' Il dato in: valoriDivisi(1), è riferito al volume e è una stringa

        Dim volume As Integer = 0
        If Integer.TryParse(valoriDivisi(1), volume) Then
            If volume < 0 Or volume > 100 Then
                ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato Volume = Errore il valore " & volume.ToString() & " è fuori range")
            Else
                ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato Volume = " & valoriDivisi(1))
                If volumeOld <> volume Then ' se il volume è cambiato
                    volumeOld = volume ' memorizzo il valore
                    ' aggiorno e visualizzo
                    media_pleyer.lb_volume.Text = valoriDivisi(1) + "%"
                    media_pleyer.Volume_control1.value = valoriDivisi(1)
                    lb_volume.Text = valoriDivisi(1) + "%"
                    Volume_control1.value = valoriDivisi(1)
                    media_pleyer.Timer3.Start()
                    media_pleyer.AxWindowsMediaPlayer1.settings.volume = media_pleyer.Volume_control1.value
                    AxWindowsMediaPlayer1.settings.volume = media_pleyer.Volume_control1.value
                    video.Wmp1.settings.volume = video.Volume_control1.value
                End If
            End If
        Else
            ListBox1.Items.Add(DateTime.Now.ToLongTimeString & " - Elaborato = Errore " & valoriDivisi(1) & " non è un intero")
        End If
    End If
End Sub
Ultima modifica effettuata da Carlo 07/04 9:23
in programmazione tutto è permesso