Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sir Pereira

[RESOLVIDO] Media Player não passa p/ o seguinte

Mensagens Recomendadas

Sir Pereira

Boas,

estou a criar algo a fazer o mesmo efeito que uma Playlist com o controlo do WMP, e tenho este código:

    
Private Sub AxWindowsMediaPlayer1_PlayStateChange(ByVal sender As Object, ByVal e As AxWMPLib._WMPOCXEvents_PlayStateChangeEvent) Handles AxWindowsMediaPlayer1.PlayStateChange

        If e.newState = 8 Then
            frmPainel.lst_videos.SelectedIndex += 1

            Dim url As String = frmPainel.lst_videos.Items.Item(frmPainel.lst_videos.SelectedIndex).ToString

            MsgBox("URL: " & url.ToString)

            AxWindowsMediaPlayer1.URL = url
            ' AxWindowsMediaPlayer1.launchURL("file:///" & url)
            'AxWindowsMediaPlayer1.Ctlcontrols.play()
            ' frmPainel.lst_videos.Items.
        Else
            MsgBox([Enum].Parse(GetType(WMPLib.WMPPlayState), e.newState.ToString))
        End If

    End Sub

Já tentei de inúmeras formas! Ele simplesmente não o reproduz. Com o LaunchURL diz que não é um ficheiro válido (mesmo com aquele "file:///" ali ou sem ele.

Enfim, já não sei o que hei-de tentar. Sugestões?

Cumps

EDIT:

Finalmente! Passado 2 dias de tentativas consegui descobrir que o erro estava sim no PlayState, mas agora diz-me que o SelectedIndex não é válido com valor de '2'. Mas então como posso mudar o valor do SelectedIndex de forma a que consiga ir buscar o seu valor (caminho do ficheiro a tocar)?

Isto tudo está numa ListBox.

Cumps

    Private Sub AxWindowsMediaPlayer1_PlayStateChange(ByVal sender As Object, ByVal e As AxWMPLib._WMPOCXEvents_PlayStateChangeEvent) Handles AxWindowsMediaPlayer1.PlayStateChange

        If AxWindowsMediaPlayer1.playState = WMPLib.WMPPlayState.wmppsStopped Then
            frmPainel.lst_videos.SelectedIndex += 1

            Dim url As String = frmPainel.lst_videos.Items.Item(frmPainel.lst_videos.SelectedIndex).ToString

            MsgBox("URL: " & url.ToString)

            AxWindowsMediaPlayer1.URL = url
            'AxWindowsMediaPlayer1.launchURL("file:\\" & url)
            AxWindowsMediaPlayer1.Ctlcontrols.play()
            ' frmPainel.lst_videos.Items.
        Else
            MsgBox([Enum].Parse(GetType(WMPLib.WMPPlayState), e.newState.ToString))
        End If

    End Sub

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Diz-te isso porque provavelmente não tem mais itens na lista.

Tens de controlar os índices, por exemplo, para voltar ao primeiro caso chegue ao fim:

If frmPainel.lst_videos.SelectedIndex = frmPainel.lst_videos.Items.Count-1 Then
    frmPainel.lst_videos.SelectedIndex=0
Else
    frmPainel.lst_videos.SelectedIndex+=1
End if


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Sir Pereira

Hmm, após verificar o teu código, penso que o erro estava a ser meu noutro lado. No botão que inicia a janela com o Player, no evento onClick estava a declarar que o SelectedIndex devia ser 0 (para garantir que havia algo seleccionado antes da janela iniciar), mudei para -1 e funcionou.

Outra coisa, tenho um botão de Up e Down ao lado da Listbox, e queria que ao clicar em cada um, o item seleccionado fosse para cima ou para baixo.

    Private Sub btn_upItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_upItem.Click
        Dim item As Object = lst_videos.SelectedItem
        If Not item Is Nothing Then
            Dim index As Integer = lst_videos.Items.IndexOf(item)
            If index <> 0 Then
                lst_videos.Items.RemoveAt(index)
                index -= 1
                lst_videos.Items.Insert(index, item)
                lst_videos.SelectedIndex = index
            End If
        End If
    End Sub

    Private Sub btn_downItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_downItem.Click
        Dim item As Object = lst_videos.SelectedItem
        If Not item Is Nothing Then
            Dim index As Integer = lst_videos.Items.IndexOf(item)
            If index < lst_videos.Items.Count - 1 Then
                lst_videos.Items.RemoveAt(index)
                index += 1
                lst_videos.Items.Insert(index, item)
                lst_videos.SelectedIndex = index
            End If
        End If
    End Sub

Tenho este código, mas curiosamente, a mudança de ordem só funciona em alguns items...

Sugestões?

EDIT:

Já encontrei um fix para o código, se alguém quiser:

    Private Sub btn_upItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_upItem.Click
        'do nothing if the top item is selected.

        If Me.lst_videos.SelectedIndex <> 0 Then
            mSelectedIndex = Me.lst_videos.SelectedIndex
            mOtherIndex = mSelectedIndex - 1
            lst_videos.Items.Insert(mSelectedIndex + 1, lst_videos.Items(mOtherIndex))
            lst_videos.Items.RemoveAt(mOtherIndex)
        End If
    End Sub

    Private Sub btn_downItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_downItem.Click
        'do nothing if the bottom item is selected.
        If Me.lst_videos.SelectedIndex <> Me.lst_videos.Items.Count - 1 Then
            mSelectedIndex = Me.lst_videos.SelectedIndex
            mOtherIndex = mSelectedIndex + 1
            lst_videos.Items.Insert(mSelectedIndex, lst_videos.Items(mOtherIndex))
            lst_videos.Items.RemoveAt(mOtherIndex + 1)
        End If
    End Sub

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.