Hej igen! Hej Hmm... Jag fattar inte riktigt. För att lagra index från Case satsen kan du skapa en modul nivå variabel(Bara att deklarerar en variabel längst upp i formulär modulen med dim, private eller public).Behöver mer hjälp!
Jag är jättetacksam för hjälpen jag fått hittills! Nu kommer jag till nästa steg i mitt program... Kanske har jag tagit mej vatten över huvudet, jag är nog inne på saker som jag inte klarar ännu. Men jag vill inte ge upp nu när jag kommit så långt. Så jag hoppas på er...:)
Så här är det. Jag gör ett program med en kommandoknapp och tio bilder på djur. När man klickar på knappen slumpas det fram ett av tio ljud m h a Select Case. Så långt funkar det.
Tanken är sen att om man hör ett "vov" så ska man klicka på en bild. Klickar man på rätt bild (hunden så klart) så ska det öppnas ett formulär, och om man klickar på fel bild så ska det öppnas ett annat.
Hur tusan gör jag? Jag måste väl på något sätt anropa vilket Case som senast valdes när man klickade på knappen. Jag vet inte hur...Sv: Behöver mer hjälp!
Ungefär så här
Option Explicit
Dim KnappCheck As String
'i princip så här,I varje knapps Tag propertie skriver
'du in ett nummer 1 - 12
Private Sub KnappHund_Click()
KnappCheck = KnappHund.Tag
End Sub
' i Select Case satsen jämför du KnappCheck med
'det ljud som valts
'If KnappCheck = ljudCheck Then
'ge beröm
'Else
' "Fel svar försök igen"
'End if
mvh
SvenSv: Behöver mer hjälp!
Jag har alltså en kommandoknapp och tio bilder på formuläret. Här är hela koden:
Option Explicit
Private Const SND_ASYNC = &H1
Private Const SND_FILENAME = &H20000
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 CmdLyssna_Click()
Randomize
Select Case Int(10 * Rnd)
Case 0
PlayWave App.Path & "\ljudfiler\marsvin.wav"
Case 1
PlayWave App.Path & "\ljudfiler\baby.wav"
Case 2
PlayWave App.Path & "\ljudfiler\apa.wav"
Case 3
PlayWave App.Path & "\ljudfiler\fågel.wav"
Case 4
PlayWave App.Path & "\ljudfiler\får.wav"
Case 5
PlayWave App.Path & "\ljudfiler\gris.wav"
Case 6
PlayWave App.Path & "\ljudfiler\hund.wav"
Case 7
PlayWave App.Path & "\ljudfiler\häst.wav"
Case 8
PlayWave App.Path & "\ljudfiler\katt.wav"
Case 9
PlayWave App.Path & "\ljudfiler\ko.wav"
End Select
End Sub
Public Sub PlayWave(Filename As String)
Dim lReturn As Long
lReturn = PlaySound(Filename, 0&, SND_FILENAME Or SND_ASYNC)
End Sub
Alltså; När t ex "katt.wav" har spelats upp så ska ett formulär visa sej om man klickar på bilden av katten, ett annat formulär om man klickar på nån annan bild.
Undringar om Svens svar:
Ska jag tagga bilderna 0-9 eller? (jag har ju bara en knapp, du skrev att jag skulle tagga knapparna) Och var ska jag skriva in vad LjudCheck är likamed? Sv: Behöver mer hjälp!
Efter som variabeln kommer var noll från början så kan det ju vara bra att ha en flagga som talar om att användaren tryckt på knappen.
Bör se ut något såhär(skipar de rader för att spela upp ljudfilen)
Private mIndex As Integer
Private mHasPlayed As Boolean
Private Sub CmdLyssna_Click()
Randomize
mIndex = Int(10 * Rnd)
Select Case mIndex
Case 0
PlayWave App.Path & "\ljudfiler\marsvin.wav"
Case 1
PlayWave App.Path & "\ljudfiler\baby.wav"
Case 2
PlayWave App.Path & "\ljudfiler\apa.wav"
Case 3
PlayWave App.Path & "\ljudfiler\fågel.wav"
Case 4
PlayWave App.Path & "\ljudfiler\får.wav"
Case 5
PlayWave App.Path & "\ljudfiler\gris.wav"
Case 6
PlayWave App.Path & "\ljudfiler\hund.wav"
Case 7
PlayWave App.Path & "\ljudfiler\häst.wav"
Case 8
PlayWave App.Path & "\ljudfiler\katt.wav"
Case 9
PlayWave App.Path & "\ljudfiler\ko.wav"
End Select
mHasPlayed = True
End Sub
Vad denna kod gör är att lagra det slumpmäsigt framtagna värdet i vår modulnivå variabel. Kontrollera vilket värde vi fik och spela upp den ljud fil som är assosierad med den. Samt sätter variabeln som talar om att vi tryckt på knappen.
För att kontrollera värdet jämför du bara med modulnivå variabeln:
Private Sub Image1_Click()
If mHasPlayed Then
If mIndex = 0 Then
MsgBox "Du valde rätt!"
frmMarsvin.show
Else
MsgBox "Du valde fel!"
frmFel.show
End If
Else
MsgBox "Du måste spela upp ett ljud först!"
End If
End Sub
Private Sub Image2_Click()
If mHasPlayed Then
If mIndex = 1 Then
MsgBox "Du valde rätt!"
frmBaby.show
Else
MsgBox "Du valde fel!"
frmFel.show
End If
Else
MsgBox "Du måste spela upp ett ljud först!"
End If
End Sub
osv...
Man kan göra det lite smartare genom att skapa en kontroll array av bilderna. Du ändrar första bildens index-egenskap till 0 och bytter sedan namn på Image2, Image3, osv... till Image1.
Vilket kommer ge att de heter i egenskaps fönstret.
Image1(0)
Image1(1)
Image1(2)
osv...
Alla Image objekt med samma namn kommer få en gemensam händelserna(Event).som nu har fått ett extra argument, Index. Som anger vilket objekt det var som orsakade händelsen.
Och istället för att behöva tio kodsnutter som kontrollerar om användaren val rätt eller fel kan man nu använda en:
Private Sub Image1_Click(Index As Integer)
If mHasPlayed Then
If Index = mIndex Then
MsgBox "Du valde rätt!"
Select case mIndex
Case 0
frmMarsvin.show
Case 1
frmBaby.show
'osv...
End select
Else
MsgBox "Du valde fel!"
frmFel.show
End If
Else
MsgBox "Du måste spela upp ett ljud först!"
End If
End Sub