Reproducir sonido en evento MouseMOve, pero que no sea eterno

Iniciado por MandingoPC, 18 Diciembre 2011, 00:59 AM

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

MandingoPC

Reproduzco sonido con el iResult = mciExecute al pasar el raton sobre un boton. Obviamente es un sonido muy corto. EL problema es q la más mínima pulsacion q haga sobre el boton, vuelve a sonar. Por ende si sigo desplasando x otros botones se traba y no suena, y luego suea todo junto.

Hay algfuna forma de que cuando ya estoy sobre un elemento, no suene más hasta que lo abandone, y luego suene de nuevo cuando lo paso de nuevo x ese elmento?

Sanlegas

Usa banderas, con una variable global tipo boolean

Dim Flag As Boolean

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

if Not Flag then
      Flag = True
      ReproduceSonido ' La funcion para reproducir el sonido
      Flag = False
end if

End Sub

Salu2 !

BlackZeroX

#2
Si es solo una vez en cada momento que el mouse este en la VENTANA que deseas, es decir:

* Supongamos que tienes 1 Form y dentro tienes un PictureBox, y la situacion deseada seria:
-> Moverse en el form No reproducir sonido.
-> Moverse sobre el PictureBox solo reproducir 1 sola vez, sin importar cuantas veces se mueva el mouse...

(*Recomiendo por que no se usa demasiado el procesador):
***Si es esto lo que deseas, nesesitaras hacer un HOOK al mouse a nivel Theard Local...

(-No recomendado, ya que de esta manera se usa demasiado el procesador):
***Tambien puedes implementar el procedimiento con un Timer... algo asi:

Aquí te dejo mas o menos el codigo (Si tiene alguna falla es por que lo hice aqui en el foro):

Código (Vb) [Seleccionar]


Option Explicit

Private Type POINTAPI
    x                                       As Long
    y                                       As Long
End Type

Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Private hWinLastMouseMove As Long
Private hWinActivateSound As Long

Private Sub Form_Load()
    hWinActivateSound = Picture1.hWnd
    Timer1.Interval = 100
    Timer1.Enabled = True
End Sub

Private Function getCurrentWindowFromMousePoint() As Long
Dim udtMousePoint As POINTAPI
    GetCursorPos udtMousePoint
    getCurrentWindowFromMousePoint = WindowFromPoint(udtMousePoint.x, udtMousePoint.y)
End Function

Private Sub playMySound()
    Beep
End Sub

Private Sub Timer1_Timer()
Dim hWinNow As Long
    hWinNow = getCurrentWindowFromMousePoint
    If (hWinLastMouseMove = hWinNow) Then Exit Sub
    hWinLastMouseMove = hWinNow
    If Not (hWinActivateSound = hWinNow) Then Exit Sub
    Call playMySound
End Sub



Dulces Lunas!¡.
The Dark Shadow is my passion.

MandingoPC

BlackZeroX (Astaroth), Dios es una infernalidad de código, ya que pensaba hcerlo a mas o menos 25 botones omg. Pero funciona, ya veré que hacer para q ande en los 25 botones. NO creo q tenga q copuiar y pegar eso 25 veces, lo anlizaré bien yveré como es, gracias.

Tenient101, el código no funcona. Osea hace lo mismo, no para de reproducir si se sigue moviendo el mouse sobre el objeto. El sonido se reproduce siepre.

BlackZeroX

Pista:
Usa For Next y sustituye la variable hWinActivateSound  por un array... en el timer solo recorrelo... (Solo si son ventanas espesificas), pero de lo contrario si es un CONJUNTO de ventanas de una familia X, por ejemplo, TODOS los CommandButton de un form (fom.controls) realiza un For Each a la clase controls verificando si es un CommandButton (  if control is CommandButton then ...)... en este ultimo no veo la necesidad de crear un array... en todo debes comparar un Handle anterior para que no suenen mas de 1 vez enc ada ocación...

Dulces Lunas!¡.
The Dark Shadow is my passion.