Jump to content
  • 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

Recommended Posts

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

Share this post


Link to post
Share on other 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"

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.