Algun experto en AxWindowsMediaPlayer, ayuda con pantalla completa

Iniciado por CAEL20, 8 Diciembre 2017, 22:43 PM

0 Miembros y 1 Visitante están viendo este tema.

CAEL20

Saludos tengo un proyecto el cual es hacer que se ejecute su pantalla completa, y se desactive el fullScreen con cualquier presion de tecla, si llego a activar la pantalla completa, pero al momento de desactivar la pantalla completa si funciona con algunas teclas, menos con los f1-f2 mas los siguiente y las fechas de direccion, cuando presiono las fechas de direccion deshabilita las teclas que si sirven  he ahi cuando pierdo el control del programa, alguien me puede ayudar para desactivar el fullScreen con todas las teclas del teclado y no me creé esos errores.

   
Código (vbnet) [Seleccionar]
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        AxWindowsMediaPlayer1.URL = Label1.Text
    End Sub

    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        If e.KeyCode = Keys.F5 Then
            Me.AxWindowsMediaPlayer1.fullScreen = True
        End If
    End Sub


    Private Sub AxWindowsMediaPlayer1_KeyDownEvent(ByVal sender As Object, ByVal e As AxWMPLib._WMPOCXEvents_KeyDownEvent) Handles AxWindowsMediaPlayer1.KeyDownEvent
        Me.AxWindowsMediaPlayer1.fullScreen = False
    End Sub

Serapis

#1
De entrada el tema debías haberlo puesto en el foro de NET.

Aunque estés importando un control Activex de vb6, estás operando en NET.

...de entrada usas (en ambos casos) el evento keydown, claramente sería mejor al menos el KeyUp y aún mejor el Click e inmejorablemente el dobleclick... dejando el clik para play/pausa.

Además para ponerlo en pantalla completa estás usando el propio formulario... si no tienes más objetos que el control WMP, vale pero si no... todavía estás pasándolo a pantalla completa pero solo si pulsas F5, pero no es coherente, sí o sí fuerzas pantalla completa... y para regeresar de ella, debes hacerlo pisando el control... tampoco es coherente...


Yo modificaría el código... de esta manera:
Con doble click, sólo si está en play o pausa, cambia el estado de pantalla completa (al otro estado).
Código (vb) [Seleccionar]

Private Sub Form1_DoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.DoubleClick, Handles wmp.DoubleClickEvent
   If ((Wmp.playState = wmppsPlaying) or (Wmp.playState = wmppsPaused)) Then
       'if (wmp.fullScreen = false) then
       '    wmp.fullScreen = True
       'else
       '    wmp.fullScreen = false
       'en if  
       wmp.fullScreen = not (wmp.fullScreen) ' más breve y claro, alternamos el estado cuandos e pulsa doble click.
   End If
End Sub


Y dejaría el evento KeyUp para cuestiones específicas... incluso pantalla completa si se pulsa la letra F
Si solo vas a usar Play-pausa, mejor usar el evento click, para alternar entre ambos estados. en esta pieza de código se usa el evento KeyUp...
Código (vb) [Seleccionar]

Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp, Handles wmp.KeyUpEvent
   Select Case e.KeyCode
       Case Keys.Space, keys.Pause    
           If Wmp.playState = wmppsPlaying Then
               Wmp.Controls.pause
           Elseif ((Wmp.playState = wmppsPaused) oralso (Wmp.playState = mppsStopped)Then
               if (wmp.url.length >0) then
                   Wmp.Controls.play
               end if
           End if
       Case Keys.Clear, Keys.Delete
           Wmp.Controls.stop
       case keys.Escape
           Wmp.Controls.stop
           if (wmp.fullScreen = True) then wmp.fullScreen = False
       case keys.F
           wmp.fullScreen = not (wmp.fullScreen)
       ' otros casos a considerar... por ejemplo, manejar volumen, pasar a la siguiente pista en la lista de reproducción (keys.PageDown) o previa (keys.pageUp), etc...
   End select
End sub


- Nota que las constantes las he puesto de memoria, es posible que se llamen de otra manera, especialmente al importarlo a NET... el wrapper, las haya modificado.
- Donde proceda coloca el conveniente try...catch...
- Por último, nota también que yo he preferido abreviar el nombre desde: AxWindowsMediaPlayer1 a wmp, luego si copias cambia donde proceda...

Eleкtro

#2
Cita de: CAEL20 en  8 Diciembre 2017, 22:43 PM
al momento de desactivar la pantalla completa si funciona con algunas teclas, menos con los f1-f2 mas los siguiente y las fechas de direccion, cuando presiono las fechas de direccion deshabilita las teclas que si sirven  he ahi cuando pierdo el control del programa, alguien me puede ayudar para desactivar el fullScreen con todas las teclas del teclado y no me creé esos errores.

Es normal, ciertas teclas de control de navegación son "suprimidas" por defecto en el evento KeyDown, puesto que son controladas por el control (y los controles hijo del control) y en teoría no las deberías controlar tú (como las teclas de dirección) ya que en principio no deberías alterar el funcionamiento esperado del control. Sobre esto ya te habló el compañero NEBIRE de forma mucho más detallada.

De todas formas, si realmente quieres hacerlo de esa manera entonces el evento que pareces estar buscando sería AxWindowsMediaPlayer.PreviewKeyDown:

Código (vbnet) [Seleccionar]
''' <summary>
''' Occurs before the <see cref="AxWindowsMediaPlayer.KeyDown"/> event when a key is pressed while focus is on this control.
''' </summary>
''' <param name="sender">
''' The source of the event.
''' </param>
''' <param name="e">
''' The <see cref="PreviewKeyDownEventArgs"/> instance containing the event data.
''' </param>
Private Sub AxWindowsMediaPlayer1_PreviewKeyDown(sender As Object, e As PreviewKeyDownEventArgs) Handles AxWindowsMediaPlayer1.PreviewKeyDown

   Dim wmp As AxWindowsMediaPlayer = DirectCast(sender, AxWindowsMediaPlayer)
   If (wmp.fullScreen) Then
       wmp.fullScreen = False
   End If

End Sub


Saludos.