Hallo allerseits,
mittlerweile bin ich Dank Hinweis von Martoeng auf das „wait-flag“ etwas weiter gekommen.
Beim PLAY/ALL Button habe ich folgende SUB
code]
[Private Sub cmdPlayAll_Click()
' ----------------------------------------------------------------------
' Das ist die Routine, die zwar funktioniert aber nicht wie sie soll ...
' In der Funktion ist bei "play" das "wait-flag" gesetzt - der Ablauf
' wird angehalten bis der Titel vollständig abgepielt ist.
' ... mciSendString("play " & sAlias & " wait", 0, 0, 0) = 0 ...
' Auch der Sprung zum nächsten Datensatz ( 3 x ) funktioniert.
' Allerdings ist ein manueller Eingriff (z.B. Command-Button) gesperrt.
' ----------------------------------------------------------------------
Label1.Caption = ""
Dim sFilename as String
Dim TI as String
Dim IP as String
Dim F as Long
F = MP3_IsPlaying("MyAlias")
If F = 0 Then
Do Until Z = 3 ' Zum Testen auf 3 Durchläufe gesetzt
sFilename = Me!DateiName
MP3_Play_All sFilename, "MyAlias"
TI = Me!Titel
IP = Interpret
Label1.Caption = TI & " - " & IP
Me!lblDauer.Caption = MP3_GetLength("MyAlias")
Me!lblVolume.Caption = MP3_GetVolume("MyAlias")
Me!LST = MP3_GetVolume("MyAlias")
Me!L = sFilename
Me!Numma = Me!DNS
Z = Z + 1
MP3_Stop "MyAlias"
MP3_Close "MyAlias"
DoCmd.GoToRecord , , acNext
Loop
Else
End If
End SubWie oben bereits erwähnt hat das ganze einen Haken …
Die zugehörige Funktion sieht so aus
Public Function MP3_Play_All(ByVal sFile As String, ByVal sAlias As String) As _
Boolean
' ------------------------------------
' MP3-Datei ganz abspielen
' ------------------------------------
Dim bResult As Boolean
Dim I
' Dateinamen in DOS 8.3 Format, da z.B. Sonderzeichen
' wie Leerzeichen Probleme machen
Dim sBuffer As String
Dim lResult As Long
sBuffer = Space$(255)
lResult = GetShortPathName(sFile, sBuffer, Len(sBuffer))
If lResult <> 0 Then
sFile = Left$(sBuffer, InStr(sBuffer, vbNullChar) - 1)
' MCI öffnen
lResult = mciSendString("open " & sFile & " type MPEGVideo alias " & _
sAlias, 0, 0, 0)
' Standarlautstärke setzen
MP3_SetVol sAlias, 200
If lResult = 0 Then
' MP3 abspielen -- wait --
If mciSendString("play " & sAlias & " wait", 0, 0, 0) = 0 Then
bResult = True
End If
End If
End If
MP3_Play_All = bResult
End Function Der Zeitgeber im Access Formular Form_frm_MCI sieht so aus
Private Sub Form_Timer()
'-----------------------------------------------------------------------
' Spielzeit, aktuelle Position und Restzeit im Formular frm_MCI anzeigen
' ----------------------------------------------------------------------
Label1.Caption = ""
' Uhrzeit anzeigen
Clock.Caption = Time
Dim sFilename
Dim TI As String
Dim IP As String
sFilename = Me.DateiName
TI = Me.Titel
IP = Me.Interpret
Label1.Caption = TI & " - " & IP
lblDauer.Caption = MP3_GetLength("MyAlias")
lblPosition.Caption = MP3_CurPos("MyAlias")
lblRestspielzeit.Caption = MP3_GetLength("MyAlias") - MP3_CurPos("MyAlias")
lblVolume.Caption = MP3_GetVolume("MyAlias")
Me.LST = MP3_GetVolume("MyAlias")
Me.SPZ = MP3_GetLength("MyAlias")
Me.AktPos = MP3_CurPos("MyAlias")
Me.RSZT = MP3_GetLength("MyAlias") - MP3_CurPos("MyAlias")
Me.Numma = Me.DNS
Me!L = Me.DateiName
End Sub Noch eine andere Frage: Wie beende ich eine laufende Prozedur aus einer anderen heraus
Also simpel gesagt, wenn ich den STOP Button drücke, soll die Abspiel Routine abgebrochen werden. Dies bezieht sich auf eine andere – nicht auf obige mit „wait“.
Gruß
Leo_Nardo |