Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Arrastrar ficheros sobre un control MediaPlayer (VB6)

Estas en el tema de Arrastrar ficheros sobre un control MediaPlayer (VB6) en el foro de Visual Basic clásico en Foros del Web. Como me aburro, vuelvo a preguntar algo que me gustaría solucionar y que, aunque lo comenté en otro post, después le cambié el título al ...
  #1 (permalink)  
Antiguo 05/09/2009, 13:00
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
De acuerdo Arrastrar ficheros sobre un control MediaPlayer (VB6) (SOLUCIONADO)

Como me aburro, vuelvo a preguntar algo que me gustaría solucionar y que, aunque lo comenté en otro post, después le cambié el título al post (¿estará bien dicho 'post'?, yo es que soy de números ), y centré el tema en imágenes transparentes.

Hoy quiero abrir de nuevo este tema por si alguien conoce una solución (aunque sea un poco chapuza) para conseguir que un control MediaPlayer permita y comunique el arrastrado de ficheros sobre él, o técnicamente creo que sería ¿como conseguir generar un evento OLEDragDrop en un control MediaPlayer (al arrastrar un fichero sobre él)?

En fín, se agradecerá cualquier idea.

Saludos.

Última edición por pkj; 07/09/2009 a las 07:15
  #2 (permalink)  
Antiguo 05/09/2009, 21:25
Avatar de seba123neo  
Fecha de Ingreso: febrero-2007
Ubicación: Esperanza, Santa Fe
Mensajes: 1.046
Antigüedad: 17 años, 2 meses
Puntos: 19
Respuesta: Arrastrar ficheros sobre un control MediaPlayer (VB6)

Hola, lo que podes hacer es como una playlist con un listbox y asi usas los eventos de Drag de ese control, y ahi sacas facil en pocas lineas de codigo el archivo que estas queriendo reproducir, la otra es hacerlo directamente en el windows media player, la verdad no he visto codigo para hacerlo directo con algun evento o algo, lo he solucionado usando esto, puede ser largo el codigo usando algunas api's de windows, pero otra no vi, y anda bien, si alguno sabe otra bienvenido.

En un Modulo:

Código vb:
Ver original
  1. Option Explicit
  2.  
  3. Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  4. Public Declare Sub DragAcceptFiles Lib "shell32.dll" (ByVal hWnd As Long, ByVal fAccept As Long)
  5. Private Declare Function DragQueryFile Lib "shell32.dll" Alias "DragQueryFileA" (ByVal hDrop As Long, ByVal UINT As Long, ByVal lpStr As String, ByVal ch As Long) As Long
  6. Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  7.  
  8. Public Const WM_DROPFILES = &H233
  9. Public Const GWL_WNDPROC = -4
  10. Public lProcOld As Long
  11.  
  12. Public Function Drag_Drop_WindowsMediaPlayer(ByVal hWnd As Long, ByVal Mensaje_Windows As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  13.    Dim n_Archivos As Long
  14.    Dim x As Long
  15.    Dim Archivo As String * 128
  16.    
  17.    If Mensaje_Windows = WM_DROPFILES Then
  18.       n_Archivos = DragQueryFile(wParam, -1, Archivo, 127)
  19.       For x = 1 To n_Archivos
  20.          Call DragQueryFile(wParam, x - 1, Archivo, 127)
  21.          Form1.WindowsMediaPlayer1.URL = Archivo
  22.          Debug.Print Archivo
  23.       Next x
  24.       Exit Function
  25.    End If
  26.    Drag_Drop_WindowsMediaPlayer = CallWindowProc(lProcOld, hWnd, Mensaje_Windows, wParam, lParam)
  27. End Function

en el Form:

Código vb:
Ver original
  1. Option Explicit
  2.  
  3. Private Sub Form_Load()
  4.     Call DragAcceptFiles(hWnd, True)
  5.     lProcOld = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf Drag_Drop_WindowsMediaPlayer)
  6. End Sub
  7.  
  8. Private Sub Form_Unload(Cancel As Integer)
  9.     Call DragAcceptFiles(hWnd, False)
  10.     Call SetWindowLong(hWnd, GWL_WNDPROC, lProcOld)
  11. End Sub

saludos.
__________________
" Todos Somos Ignorantes; lo que pasa es que no todos ignoramos las mismas cosas " - Albert Einstein
  #3 (permalink)  
Antiguo 06/09/2009, 04:56
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Arrastrar ficheros sobre un control MediaPlayer (VB6)

Muchas gracias por tu ayuda, Seba.

Me ha costado horas por mi mala cabeza pero he conseguido que funcione.

El programa se vuelve un poco inestable, pero parece ser solo durante la depuración cuando más problemas dá, ya que cuando activo el evento, al salir del programa se cierra incluso el VB6, chafandote los cambios.
Lo he solucionado con algo que ya usaba y que evita que se active cuando lo estoy depurando, sin tener que andar luego acordándome de permitir la activación cada vez que tengo que compilar. El caso es que el .exe no empiece a hacer cosas raras. Lo observaré un tiempo.

De todas formas, muchas gracias por la solución. Había perdido la esperanza de encontrar una.

Saludos.
  #4 (permalink)  
Antiguo 06/09/2009, 11:59
Avatar de seba123neo  
Fecha de Ingreso: febrero-2007
Ubicación: Esperanza, Santa Fe
Mensajes: 1.046
Antigüedad: 17 años, 2 meses
Puntos: 19
Respuesta: Arrastrar ficheros sobre un control MediaPlayer (VB6)

fijate que en el modulo dice:

Código vb:
Ver original
  1. Form1.WindowsMediaPlayer1.URL = Archivo

ahi tenes que poner el nombre dle form tuyo y el nombre del control tuyo, porque si lo pegas y lo probas asi, y el control no existe te va a tirar un error que te saca del visual basic ya que estas haciendo un Hook al mensaje WM_DROPFILES, tampoco lo pares del boton de stop del visual basic no se debe hacer eso.

saludos.
__________________
" Todos Somos Ignorantes; lo que pasa es que no todos ignoramos las mismas cosas " - Albert Einstein
  #5 (permalink)  
Antiguo 07/09/2009, 02:53
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Arrastrar ficheros sobre un control MediaPlayer (VB6)

Sí, por alucinante que me pareciese incluso a mí, de primeras entedí exactamente lo que hacía la función, ya que he usado cosas parecidas.
El problema fué que, primero al copiar y pegar metí la pata y se me quedó una copia de las lineas de desactivación en el form_Load, con lo que nada más cargarse se descargaba y me volví loco buscando el fallo.
Luego resulta que cambié el exit function por un goto finfuncion, pero "por H o por B", lo escribí donde no era y nunca pasaba por la última línea, (cuando debía hacerlo todo el tiempo mientras no arrastrases nada), con lo que algo se saturaba y bloqueaba el programa y todo el VB6.
Cuando conseguí que por fín funcionase, resulta que mi mejor opción de adaptación era cargar los ficheros en un DataObject como los que generan los controles que permiten arrastrar, pero soy tan burro que una vez cargado, al lanzarlo a la sub a la que todos los controles lanzan sus DataObject's, el caso es que llegaba vacío y no supe adivinar por qué, ya que cargarse se cargaba por que el fichero llegaba y el Data.Files.Count tenía un valor > 0.
En fín, al final tuve que pasarlos a un ListBox y procesarlos aparte.

El caso es que la inestabilidad continúa en el editor de VB, y no he podido evitarlo cambiando las activaciones y desactivaciones de sitio y tal. Pero como fácilmente he conseguido que no se cargue con el editor, "no poblemo".

Muchas gracias por el interés. Y no le dés muchas vueltas, será algo de mi XP o cualquier incompatibilidad, o, (creo que esta vez no he hecho nada mal, pero nunca se sabe,) igual es mi culpa.

PD: Por cierto, no he comentado nada en esta sección, pero es para un programa que he subido en la sección de Audio/Video y Multimedia.
Si quieres ver el resultado, date una vuelta por:
http://www.forosdelweb.com/f3/quiero...0/#post3073653
(creo que el título fue un error, pero ya no lo voy a cambiar)
Seguramente lo actualice en breve con la nueva función.

Saludos.

Última edición por pkj; 07/09/2009 a las 07:26
  #6 (permalink)  
Antiguo 04/10/2009, 12:09
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Arrastrar ficheros sobre un control MediaPlayer (VB6)

Después de un tiempo, usando un control MediaPlayer en otro sitio, descubrí que se puede hacer que el Form que contiene el control reciba los ficheros arrastrados sobre el control siempre que el control tenga el valor .Visible = False.

Al cargar un video este se ve, aunque la barra de posicion no consigo que se vea en modo ventana. En pantalla completa sin embargo la barra si se deja activar.
El caso es que al arrastrar ficheros sobre el video que estás viendo, como está en modo Visible = False, no recibe los ficheros, sino que pasan a través del video y llegan al Form, siendo este el que los captura.

Si alguien sabe como activar la barra de posición en modo ventana sin poner el modo .Visible = True, por favor que me lo explique y creo que se solucionarán mis problemas. El caso es que me vuelvo loco para mostrar/ocultar los controles que quiero.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:06.