Hej Hopp strVaw eller vad den nu heter verkar inte ha något värde i den suben. Hej sndPlaySound har blivit ersat av PlaySound. Använd den istället:spela upp en fil...
Jag har skrivit en kod som ser ut så här:
-----------------------------------------------------------------------------------
<code>
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Const SND_ASYNC = &H1
Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, y As Single) 'Högerklick
If Button = 2 Then
PopupMenu mnuFiler
Else
End If
End Sub
Private Sub MnuHämta_Click()
Start_Hämta:
CommonDialog1.Filter = "Wav filer (*.wav)|*.wav"
CommonDialog1.FilterIndex = 1
CommonDialog1.ShowOpen
If CommonDialog1.FileName = "" Then
MsgBox "Du Måste Välja En Fil...", vbOKOnly, "Hämta Fil"
GoTo Start_Hämta
End If
strWave = CommonDialog1.FileName
Command1.Caption = strWave
End Sub
Private Sub Command1_Click()
trow% = sndPlaySound("strWave", SND_ASYNC)
End Sub
</code>
-----------------------------------------------------------------------------------
om man klickar med höger musknapp på knappen command1 så
får man upp menyn som heter mnuFiler, där väljer man MnuHämta
när man har gjort det får man upp en ruta där man kan hämta en fil (wav)
och när man har hämta en wav-fil så står filnamnet på knappen command1
så här långt är allting rätt.... men nu när jag klickar på knappen så vill jag att den ska spela upp den filen som jag hämtade , men det funkar inte, vad har jag gjort för fel??Sv: spela upp en fil...
Sätt en break och kolla värdet själv så ser du. Ska det fungera så måste
du hämta värdet från Command 1 eller var du nu mellanlagrar namnet
eller lagra det i en variabel som behåller sitt värde, dvs en formglobal
variabel.
Förutom det - använd gärna entertangenten och punkt lite ibland -
kommer göra det mycket lättare för oss andra att läsa dina frågor och öka
oddsen för ett svar.
/EmmaSv: spela upp en fil...
Command1 vet inte vad strWave betyder eftersom
det verkar vara en Lokal variabel desutom har du skrivit så
här "strWave" skall vara strWave utan "fnuttar"
Jag har "moddat" din kod lite testa
Option Explicit
Private Declare Function sndPlaySound Lib "winmm.dll" Alias _
"sndPlaySoundA" (ByVal lpszSoundName As String, _
ByVal uFlags As Long) As Long
Const SND_ASYNC = &H1
Const SND_NODEFAULT = &H2
Const SND_MEMORY = &H4
Dim strWave As String
Private Sub Command1_MouseDown(Button As Integer, _
Shift As Integer, X As Single, y As Single) 'Högerklick
If Button = 2 Then PopupMenu mnuFiler
End Sub
Private Sub MnuHämta_Click()
Start_Hämta:
CommonDialog1.Filter = "Wav filer (*.wav)|*.wav"
CommonDialog1.FilterIndex = 1
CommonDialog1.ShowOpen
If CommonDialog1.FileName = "" Then
MsgBox "Du Måste Välja En Fil...", vbOKOnly, "Hämta Fil"
GoTo Start_Hämta
End If
strWave = CommonDialog1.FileName
Command1.Caption = strWave
End Sub
Private Sub Command1_Click()
Dim ret As Long
ret = sndPlaySound(strWave, SND_ASYNC Or _
SND_NODEFAULT Or SND_MEMORY)
DoEvents
End Sub
SvenSv: spela upp en fil...
<code>
Option Explicit
Private Const SND_SYNC As Long = &H0 'play synchronously (default)
Private Const SND_ASYNC As Long = &H1 'play asynchronously
Private Const SND_NODEFAULT As Long = &H2 'silence not default, if sound not found
Private Const SND_MEMORY As Long = &H4 'lpszSoundName points to a memory file
Private Const SND_LOOP As Long = &H8 'loop the sound until next sndPlaySound
Private Const SND_NOSTOP As Long = &H10 'don't stop any currently playing sound
Private Const SND_PURGE As Long = &H40 'purge non-static events for task
Private Const SND_APPLICATION As Long = &H80 'look for application specific association
Private Const SND_NOWAIT As Long = &H2000 'don't wait if the driver is busy
Private Const SND_RESOURCE As Long = &H40004 'name is a resource name or atom
Private Const SND_ALIAS As Long = &H10000 'name is a WIN.INI [sounds] entry
Private Const SND_FILENAME As Long = &H20000 'name is a file name
Private Const SND_ALIAS_ID As Long = &H110000 'name is a WIN.INI [sounds] entry identifier
Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, y As Single) 'Högerklick
If Button And vbRightButton Then
PopupMenu mnuFiler
End If
End Sub
Private Sub MnuHämta_Click()
CommonDialog1.Filter = "Wav filer (*.wav)|*.wav"
CommonDialog1.FilterIndex = 1
CommonDialog1.ShowOpen
'Do Until Len(CommonDialog1.FileName)
' MsgBox "Du Måste Välja En Fil...", vbOKOnly, "Hämta Fil"
' CommonDialog1.ShowOpen
'Loop
Command1.Caption = CommonDialog1.FileName
End Sub
Private Sub Command1_Click()
If Len(Command1.Caption) Then
PlaySound Command1.Caption, 0&, SND_FILENAME Or SND_ASYNC
Else
MsgBox "Du Måste Välja En Fil...", vbOKOnly, "Hämta Fil"
End If
End Sub
</code>
En Do loop är snyggare en label och Gosub. Men det är inte snällt att tvinga användaren ange en fil.<br>
Har därför satt kommentar tecken framför dem loopen och lagt kontrolen i Command1_Click.<br>
<br>
Eftersom du redan satt Command1.Caption til filnamnet skipade jag strWave.