Sección de controles Ocx para Visual basic , Dll , Activex
<Volver> - Anterior - Siguiente
Este es un módulo de clase para vb6 que muestra una forma de crear un cuadro de diálogo de windows para abrir archivos, y poder visualizar películas y videos dentro de la ventana como una vista previa.
El código fuente para reproducir los archivos es de un ejemplo creado por Jason Hensley, que contiene varias funciones para poder ejecutar comandos y manipular los videos con la función de windows MciSendString
Créditos
Esta es la ventana para reproducir la película. Solo contiene las opciones principales: para reproducir, hacer pausa y reiniciar.
Y una opción para ver información básica del video:
El módulo de clase se puede utilizar , tanto para ver la película en el cuadro de diálogo, como también usar otra instancia y utilizarla para acceder a los comandos del MCI y reproducir los archivos desde el formulario, por ejemplo en un picbox, control Frame o en una ventana.
Para el CommonDialog contiene un método o función ( ShowDialog ) con dos parámetros principales
sPath = ShowDialog( hWndOwner as Form , lFilters as EnumFilter)
Nota. Si se quiere pasar un filtro personalizado, primero hay que establecer el valor en customFilter
.CustomFilter = "Archivos x" & Chr(0) & "*.extension del archivo" .Width = 100 Text1 = .ShowDialog(Me, eCustom)
o varias extensiones, por ejemplo esto solo muestra los tipos FLV y AVI
.CustomFilter = "Archivos de video Flash y Avi" & Chr(0) & "*.flv;*.avi" Text1 = .ShowDialog(Me, eCustom)
También contiene un evento para recuperar algunos datos del archivo seleccionado, por ejemplo el tipo, la duración, y el ícono asociado al archivo
Private Sub cDlgMoviePreview_GetMoviePropertys( _ ByVal sFileName As String, _ ByVal sFileType As String, _ ByVal sFrameRate As String, _ ByVal sLenghtMilisec As String, _ ByVal sTotalLenght As String, _ smallIcon As stdole.Picture, _ NormalIcon As stdole.Picture, _ hIcon As Long) End Sub
Algunas funciones del ejemplo de Jason Hensley para reproducir:
Cierra el dispositivo MCI, y los demás para detener, comenzar y pausar la reproducción
Ruta del archivo a reproducir
Método para poder abrir el video e indicar donde reproducirlo, por ejemplo en el form o en un control picture, etc ..
cm.openMovieWindow unPicture.hwnd, "child"
También se puede usar para reproducir en una ventana nueva. Se debe pasar en el segundo parámetro el valor "popup" u "overlapped".
Para poder indicar las dimensiones y posición de la película (los valores deben ser en pixeles).
Por ejemplo si se quiere ajustar la película al tamaño de un control picBox, es decir el ancho y alto pero no escalar:
Set cm = New cDLGMov With cm .FileName = "c:\video.flv" Call .openMovieWindow(Picture1.hwnd, "child") Call .sizeLocateMovie(0, 0, _ Picture1.ScaleX(Picture1.ScaleWidth, Picture1.ScaleMode, vbPixels), _ Picture1.ScaleY(Picture1.ScaleHeight, Picture1.ScaleMode, vbPixels)) Call .playMovie End With
Este función permite ajustar la película, es decir escalar y redimensionar al tamaño de la ventana.
Private Sub PicBox_Resize() ' Ancho y alto del video Dim lWidthMov As Long Dim lHeightMov As Long Dim HScale As Double Dim VScale As Double Dim MyScale As Double Dim lWidth As Long Dim lHeight As Long Dim x As Long Dim y As Long 'Enviar las variables para obtener la dimensión Call extractDefaultMovieSize(lWidthMov, lHeightMov) ' verificar que los valores no sean 0 por si hubo error If lWidthMov > 0 And lHeightMov > 0 Then With PicBox ' Calcular escala HScale = ((.Width / Screen.TwipsPerPixelX) / lWidthMov) VScale = ((.Height / Screen.TwipsPerPixelY) / lHeightMov) MyScale = IIf(VScale >= HScale, HScale, VScale) ' ancho y alto final lWidth = lWidthMov * MyScale lHeight = lHeightMov * MyScale ' Calcular la posición izquierda y Top x = ((.Width / Screen.TwipsPerPixelX) - lWidth) / 2 y = ((.Height / Screen.TwipsPerPixelY) - lHeight) / 2 ' redimensionar y escalar la pelicula Call sizeLocateMovie(x, y, lWidth, lHeight) End With End If End Sub
Si se quiere reproducirlo a la mitad del tamaño del picBox y en forma centrada
Dim lWidth As Long Dim lHeight As Long Dim x As Long Dim y As Long With Picture1 ' Ancho y alto lWidth = (.ScaleX(.ScaleWidth, .ScaleMode, vbPixels)) lHeight = (.ScaleY(.ScaleHeight, .ScaleMode, vbPixels)) ' x e y para centrar x = (lWidth - (lWidth / 2)) / 2 y = (lHeight - (lHeight / 2)) / 2 End With Set cMov = New cDLGMov With cMov ' indicar ruta del video .FileName = "c:\video.flv" ' indicar donde reproducir y el modo Call .openMovieWindow(Picture1.hwnd, "child") ' Establecer posición y dimensión Call .sizeLocateMovie(x, y, lWidth / 2, lHeight / 2) ' play Call .playMovie End With
Obtener dimensiones del video ( no es el valor real de la película, si no el establecido en la ventana de reproducción). Se puede pasar por referencia los valores (nWidth y nHeight para obtener el ancho y alto), por ejemplo
With cm
Dim lWidth As Long, lHeight As Long
.FileName = "c:\video.flv"
Call .openMovieWindow(Me.hwnd, "child")
.playMovie
' pasar variables
Call .extractCurrentMovieSize(0, 0, lWidth, lHeight)
MsgBox lHeight
MsgBox lWidth
End With
Esta función sirve para devolver el ancho y alto real del video. Si se cambia las dimensiones, la función igual devuelve el tamaño del video real, por mas que se cambie desde el código. Se deben pasar dos variables por referencia para obtener las dimensiones. Ejemplo
Dim lWidth As Long, lHeight As Long .FileName = "c:\video.flv" Call .openMovieWindow(Me.hwnd, "child") ' cambiar dimensiones .sizeLocateMovie 0, 0, 400, 300 ' reproducir .playMovie ' Pasar variables para obtener las dimensiones Call .extractDefaultMovieSize(lWidth, lHeight) ' Muestra el ancho y alto original por mas que se haya cambiado en 'sizeLocateMovie' MsgBox lHeight MsgBox lWidth
Para adelantar o rebobinar el video de tres modos: por milisegundos, por segundos o por el número de cuadros que se quiera .
Nota, con la función forwardByMS y FordwardBySeconds, si se quiere adelantar la película pasando como valor 1000 milisegundos o 1 segundo , no se porque motivo la función falla y no adelanta dicho valor. Si se pasa un valor igual o superior a 2000, parece funcionar correctamente. ( Igual para las de rebobinar )
Por ejemplo esto adelanta los cuadros cada 2000 milisegundos y lo coloca en pausa para visualizar cuadro por cuadro
With cm
' avanzar dos segundos
.forwardByMS 2000
.pauseMovie
End With
Esto adelanta cada 5 segundos
With cm
' avanzar
Call .forwardBySeconds(5)
Call .pauseMovie ' detener para visualizar cuadro por cuadro
Me.Caption = "Posición actual :" & CStr(.getPositionInSec)
End With
getFormatLenght Devuelve un string con el tiempo total de duración del video (Nota. el valor ya lo devuelve formateado, por ejemplo 00:53 ) Se pueden usar estas funciones para mostrar el valor en un control label o barra de estado dentro de un timer por ejemplo
getFormatPosition: devuelve un string con el valor en la posición actual ( También el valor ya lo devuelve formateado)
Nota. Si se quieren obtener los valores no formateados, es decir retornar el total de segundos, milisegundos o frames de la película, o los valores de la posición actual , usar las funciones :
Devuelve un string con el estado actual de reproducción para averiguar si se está en Pausa, en Play o detenido: (Paussed, Playing o Stopped.)
Funciones para ocultar y mostrar la película
Devuelve True o False si se está en play
Si se encuentra abierto y en reproducción un video, la función devuelve True. Si no la variale Error devuelve el número y luego se puede utilizar checkError, para devolver una descripción del error, por ejemplo "El dispositivo MCI no está disponible". Si no hay error, CheckError devuelve el mensaje "Se ha ejecutado el comando especificado"
Buscar en Recursos vb con Google
Recursos visual basic - Buscar - Privacidad - Copyright © 2005 - 2009 - www.recursosvisualbasic.com.ar