Tienda | Foros | Blogs | EN |
 

Ayuda con Visual Basic

Seguir
Hola, necesita ayuda con visual basic 6, necesito hacer un soft con varios botones, ejemplo 10 botones, de los cuales cada uno le asigno un wav distinto, necesito checarlos y que queden presionados, al momento de yo presionar otro botón, solo se reproduzcan los wav de dichos botones marcados pero en serie, al momento de terminar uno comienza el otro.

les agradezco ayuda


6 Soluciones propuestas

Hola, es bastante facil hacer lo que necesitas, te copio el codigo necesario y ya sabras hacer las adaptaciones necesarias. Para provarlo en un form coloca 3 checks y dales el estilo Graphical para que se vean como botones y copia el codigo que esta abajo, obviamente los archivos que en mi caso se llaman Sonido1.wav, sonido2.wav y sonido3.wav tu los tendrás en otro directorio y con otros nombres, así que solo habrá que cambiar esta información y listo. Garantizado que funciona.

'=============================================================================
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Integer, ByVal hwndCallback As Integer) As Integer

Private Sub Check1_Click()
If Check1.Value = 1 Then 'reproduce el archivo si esta presionado el check
mciSendString "OPEN C:\Sonido1.wav TYPE waveaudio ALIAS Sonido1", "", 0, 0
mciSendString "PLAY Sonido1 FROM 0", "", 0, 0
Else ' detiene la reproduccion
mciSendString "STOP Sonido1", "", 0, 0
mciSendString "CLOSE Sonido1", "", 0, 0
End If
End Sub

Private Sub Check2_Click()
If Check2.Value = 1 Then 'reproduce el archivo si esta presionado el check
mciSendString "OPEN C:\Sonido2.wav TYPE waveaudio ALIAS Sonido2", "", 0, 0
mciSendString "PLAY Sonido2 FROM 0", "", 0, 0
Else ' detiene la reproduccion
mciSendString "STOP Sonido2", "", 0, 0
mciSendString "CLOSE Sonido2", "", 0, 0
End If

End Sub

Private Sub Check3_Click()
If Check3.Value = 1 Then 'reproduce el archivo si esta presionado el check
mciSendString "OPEN C:\Sonido3.wav TYPE waveaudio ALIAS Sonido3", "", 0, 0
mciSendString "PLAY Sonido3 FROM 0", "", 0, 0
Else ' detiene la reproduccion
mciSendString "STOP Sonido3", "", 0, 0
mciSendString "CLOSE Sonido3", "", 0, 0
End If

End Sub
Perdón, parece que entendí mal la necesidad y te indique otro código, lo que necesitas es mas fácil aun, aquí te pongo el código, para probarlo solo debes colocar 3 checks de tipo matriz de controles (Check1(0), Check1(1), Check1(2)...etc)
y tener los archivos en el directorio C con los nombres indicados y LISTO.


Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long

Dim Lista(3) As String 'para tener la lista de canciones o sonidos wav (solo puse 3 posiciones)

Private Sub Command1_Click()
Dim Pos As Integer
For Pos = 0 To 2 'para pasar de uno en uno por los checks
If Check1(Pos).Value = 1 Then ' validamos si el check tipo boton está presionado y tocamos el archivo asociado en el array de sonidos
sndPlaySound Lista(Pos), 0
End If
Next Pos

End Sub

Private Sub Form_Load()
' asignamos en el array la ubicación de los archivos, cada indice del array coincide con el indice del check
Lista(0) = "C:\Sonido1.wav"
Lista(1) = "C:\Sonido2.wav"
Lista(2) = "C:\Sonido3.wav"
'....
'....
End Sub
excelente, provaré como funciona y si es lo que necesito, me imagíno que si, eso si que me demorare un poco ya que ando corto de tiempo, pero de antemano muchisimas gracias por la ayuda...
hice lo que me dijiste, pero me da un error, me dice Número de Argumentos erróneo o asignación de propiedad no valida

me puedes ayudar porfas, algo hice mal, puse los 3 check y el boton command para que reprodusca los sonidos, y los sonidos en C

el primero me funcionaba bien, pero sonaba cuando checaba los check, la idea es que cuando yo aprete el boton command, haga sonar solo los check que estan seleccionados.

gracias de antemano[/youtube]
SOLUCIÓN ACEPTADA
No se a que se deba el error que te da, ya que ese tipo de error suele aparecer cuando debes enviar por ejemplo 1 parámetro a un procedimiento o función y mandas 2 o viceversa o cuando debes mandar un int y en su lugar mandas un string, por lo que el problema podria estar en la funcion api sndPlaySound, de todas maneras mejor crea un proyecto con un form vacío de nombre Form1, lo guardas y abres el archivo Form1 con el Bloc de notas y luego reemplazas TODO el texto de ese form con el texto que te pongo mas abajo y lo guardas, eso si, asegúrate de tener 3 archivos wab en el disco C con los nombres sonido1.wav, sonido2.wav y sonido3.wav y pruébalo, te aseguro que a mi me funciona sin ningún problema.


VERSION 5.00
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 3045
ClientLeft = 60
ClientTop = 345
ClientWidth = 5715
LinkTopic = "Form1"
ScaleHeight = 3045
ScaleWidth = 5715
StartUpPosition = 3 'Windows Default
Begin VB.CommandButton Command1
Caption = "Tocar wav"
Height = 705
Left = 2910
TabIndex = 3
Top = 810
Width = 1905
End
Begin VB.CheckBox Check1
Caption = "Sonido 1"
Height = 435
Index = 2
Left = 300
Style = 1 'Graphical
TabIndex = 2
Top = 1350
Width = 1725
End
Begin VB.CheckBox Check1
Caption = "Sonido 1"
Height = 435
Index = 1
Left = 300
Style = 1 'Graphical
TabIndex = 1
Top = 840
Width = 1725
End
Begin VB.CheckBox Check1
Caption = "Sonido 1"
Height = 435
Index = 0
Left = 300
Style = 1 'Graphical
TabIndex = 0
Top = 330
Width = 1725
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long

Dim Lista(3) As String 'para tener la lista de canciones o sonidos wav (solo puse 3 posiciones)

Private Sub Command1_Click()
Dim Pos As Integer
For Pos = 0 To 2 'para pasar de uno en uno por los checks
If Check1(Pos).Value = 1 Then ' validamos si el check tipo boton está presionado y tocamos el archivo asociado en el array de sonidos
sndPlaySound Lista(Pos), 0
End If
Next Pos

End Sub

Private Sub Form_Load()
' asignamos en el array la ubicación de los archivos, cada indice del array coincide con el indice del check
Lista(0) = "C:\Sonido1.wav"
Lista(1) = "C:\Sonido2.wav"
Lista(2) = "C:\Sonido3.wav"
'....
'....
End Sub
mira, me funcionó excelente lo que me dijiste, el problema fue cuando quise ponerlo para 16 botonoes, cambie las cosas que supuse habia que cambiar.
dim lista (16)

for pos = 0 to 15

y las listas las puese de 0 a 15

Lista(0) "c:......
....
Lista(15) "c:......

cuando le puse ejecutar, me tiro el mismo error
"Número de Argumentos erróneo o asignación de propiedad no valida"

no tengo idea por que