| 14 | ||||||||||||


Ziel dieser Übung ist es, Visual Basic-Programme zu schreiben, die Wave-Sounddateien abspielen. Am Ende dieser Übung sollten Sie folgendes beherrschen:
Dieses Beispiel-Programm benutzt das TegoSoft Multimedia-Steuerelement. Um es zu Visual Basic hinzuzufügen, wählen sie die Menüoption Zusatzsteuerelemente... im Menü Extras. Kreuzen sie in der Liste den Eintrag TegoSoft Multimedia an, und schließen Sie dieses Dialogfenster durch Clicken auf OK. Jetzt erscheint in der Werkzeugsammlung das Symbol
für das Multimedia-Steuerelement.
Das Multimedia-Steuerelement verfügt über neun nebeneinander angeordnete Schaltflächen,die in der nachfolgenden Abbildung zu sehen sind:

Es könne mit diesem Steuerelement zahlreiche Multimedia-Geräte bedient werden. Neben Wave-Dateien können mit diesem Steuerelement auch MIDI-Dateien, CD-Audio-Dateien und AVI-Filmdateien wiedergegeben werden. Einige der Schaltflächen wechseln abhängig von der Dateiart ihre Bedeutung. Beispielsweise wird die Schaltfläche ganz rechts für Wave-Dateien nicht genutzt. Sie dient dem Auswerfen einer CD aus dem CD-ROM-Laufwerk.
Erstellen Sie eine Form und fügen Sie die Steuerelemente hinzu, die nachfolgend abgebildet und beschrieben sind.

| Objekt | Eigenschaft | Einstellung |
|---|---|---|
| Form | Caption | Wave-Beispielprogramm |
| Height | 3825 | |
| Left | 1080 | |
| Name | frmWaveBsp | |
| Top | 1170 | |
| Width | 6090 | |
| Vertikale Bildlaufleiste | Enabled | False |
| Height | 2775 | |
| Left | 5520 | |
| Max | 100 | |
| Name | vscNichts | |
| Top | 240 | |
| Width | 255 | |
| Befehlsschaltfläche | Caption | An&zeigen |
| Enabled | False | |
| Height | 495 | |
| Left | 120 | |
| Name | cmdAnzeigen | |
| Top | 120 | |
| Width | 1215 | |
| Befehlsschaltfläche | Caption | Ver&bergen |
| Enabled | True | |
| Height | 495 | |
| Left | 120 | |
| Name | cmdVerbergen | |
| Top | 720 | |
| Width | 1215 | |
| Befehlsschaltfläche | Caption | &Start |
| Enabled | False | |
| Height | 495 | |
| Left | 1440 | |
| Name | cmdStart | |
| Top | 1920 | |
| Width | 1215 | |
| Befehlsschaltfläche | Caption | Sto&p |
| Enabled | False | |
| Height | 495 | |
| Left | 2760 | |
| Name | cmdStop | |
| Top | 1920 | |
| Width | 1215 | |
| Befehlsschaltfläche | Caption | Pause |
| Enabled | False | |
| Height | 495 | |
| Left | 4080 | |
| Name | cmdPause | |
| Top | 1920 | |
| Width | 1215 | |
| Befehlsschaltfläche | Caption | Be&enden |
| Height | 495 | |
| Left | 1440 | |
| Name | cmdBeenden | |
| Top | 120 | |
| Width | 1215 | |
| Standarddialog | CancelError | True |
| Left | 3240 | |
| Name | cmmDatei | |
| Top | 120 | |
| Multimedia | Height | 495 |
| Left | 1440 | |
| Name | TegoMM1 | |
| Top | 2520 | |
| Width | 3915 | |
| Bezeichnungsfeld | Alignment | 2 - Center |
| BackColor | &H00000000& | |
| Caption | [leer] | |
| Font | Verdana 9pt | |
| ForeColor | &H0000FF00& | |
| Height | 255 | |
| Left | 3960 | |
| Name | lblPosition | |
| Top | 360 | |
| Width | 1455 | |
| Bezeichnungsfeld | Caption | Aktuelle Position: |
| Height | 255 | |
| Left | 3960 | |
| Name | lblDerzeit | |
| Top | 0 | |
| Width | 1215 |
| Position | Titel | Name |
|---|---|---|
| 0 | &Datei | mnuDatei |
| 1 | Ö&ffnen | mnuOpen |
| 1 | S&chließen | mnuClose |
| 1 | - | mnuSep1 |
| 1 | &Beenden | mnuEnde |
Option Explicit
Dieser Befehl erzwingt die Deklaration sämtlicher Variablen.
Private Sub cmdBeenden_Click()
End
End Sub
Private Sub mnuEnde_Click()
cmdBeenden_Click
End Sub
Dieser Menüeintrag führt denselben Code aus wie die Schaltfläche Beenden.
Private Sub cmdVerbergen_Click()
TegoMM1.Visible = False
cmdVerbergen.Enabled = False
cmdAnzeigen.Enabled = True
End Sub
Diese Prozedur setzt die Visible-Eigenschaft des Multimedia-Steuerelements auf False; es wird also unsichtbar.
Private Sub cmdAnzeigen_Click()
TegoMM1.Visible = True
cmdVerbergen.Enabled = True
cmdAnzeigen.Enabled = False
End Sub
Private Sub mnuOpen_Click()
On Error GoTo OpenFehler
Rem Elemente im Dateityp-Feld setzen
Dim DateiLänge
cmmDatei.Filter = "Wave-Dateien (*.wav)|*.wav|Alle Dateien (*.*)|*.*"
cmmDatei.FilterIndex = 1 ' Standard-Dateityp setzen
cmmDatei.Action = 1 ' Dialogfeld anzeigen
DateiArt = cmmDatei.FilterIndex
DateiLänge = FileLen(cmmDatei.filename)
On Error GoTo 0 ' Fehlerbehandlungs-Routine entfernen
Rem Ausgewählte Datei öffnen
TegoMM1.DeviceType = "WaveAudio"
TegoMM1.filename = cmmDatei.filename
TegoMM1.Command = "Open"
If TegoMM1.Error > 0 Then
cmdStart.Enabled = False
cmdStop.Enabled = False
frmWaveBsp.Caption = "Wave-Beispielprogramm - (keine Datei geladen)"
MsgBox cmmDatei.filename & "konnte nicht geöffnet werden", _
vbCritical, "Fehler"
Else
cmdStart.Enabled = True
frmWaveBsp.Caption = "Wave-Beispielprogramm - (" & _
cmmDatei.FileTitle & ")"
lblPosition.Caption = "00 : 00"
TegoMM1.TimeFormat = "Milliseconds"
End If
Exit Sub
OpenFehler:
Select Case Err
Case 53
cmdStart.Enabled = False
cmdStop.Enabled = False
frmWaveBsp.Caption = "Wave-Beispielprogramm - (keine Datei geladen)"
MsgBox "Die Datei konnte nicht gefunden werden.", vbCritical, "Fehler"
Exit Sub
Case 32755
Rem Abbrechen-Schaltfläche im Dateiauswahlfenster wurde gedrückt.
Exit Sub
End Select
End Sub
Da der CancelError-Eigenschaft des Standarddialogfeldes der Wert True zugewiesen worden ist, folgt daraus, daß ein Fehler auftritt, wenn dort auf die Schaltfläche Abbrechen geclickt wird. Die Fehlerbehandlungs-Routine fängt diesen Fehler auf. Nach dem Öffnen der Datei können keine Datei-Fehler mehr auftreten, deshalb wird die Fehlerbahandlungs-Routine dort wieder entfernt.
Die If...Else-Schleife wird verwendet, um festzustellen, ob der Open-Befehl des Multimedia-Steuerelements erfolgreich ausgeführt werden konnte. Es könnten hier Fehler auftreten, wenn die Wave-Datei ungültig ist (falsches Format, unvollständig, usw.). In diesem Fall werden die Start- und Stop-Schaltflächen deaktiviert, und die Titelleiste der Form zeigt an, daß keine Datei geladen ist.
Private Sub mnuClose_Click()
TegoMM1.Command = "Close"
cmdStart.Enabled = False
cmdStop.Enabled = False
cmdPause.Enabled = False
frmWaveBsp.Caption = "Wave-Beispielprogramm - (keine Datei geladen)"
lblPosition.Caption = ""
End Sub
Private Sub cmdStart_Click()
TegoMM1.Command = "Play"
cmdStart.Enabled = False
cmdPause.Enabled = True
cmdStop.Enabled = True
End Sub
Private Sub cmdStart_Click()
TegoMM1.Command = "Stop"
cmdStop.Enabled = False
cmdStart.Enabled = True
cmdPause.Enabled = False
End Sub
Private Sub cmdStart_Click()
TegoMM1.Command = "Pause"
End Sub
Private Sub Form_Load()
TegoMM1.UpdateInterval = 250
End Sub
Der Code in dieser Prozedur setzt die UpdateInterval-Eigenschaft des Multimedia-Steuerelements auf 250 Millisekunden. Die StatusUpdate-Prozedur des Multimedia-Steuerelements wird von nun an alle Viertelsekunden ausgeführt. In der Unload-Methode sollte noch folgende Zeile eingetragen werden (wenn der Befehl zum Beenden des Programms bei noch laufender Multimediadatei-Abspielung aufgerufen wird, wird damit das Abspielen beendet und die Multimedia-Datei geschlossen):
Private Sub Form_Unload(Cancel As Integer)
TegoMM1.Command = "Close"
End Sub
Private Sub TegoMM1_Done()
If TegoMM1.Position = TegoMM1.Length Then
TegoMM1.Command = "Prev"
vscNichts.Value = 0
lblPosition.Caption = "00 : 00"
cmdStart.Enabled = True
cmdStop.Enabled = False
cmdPause.Enabled = False
End If
End Sub
Die Positions-Eigenschaft des Multimedia-Steuerelements zeigt die aktuelle Position der Wave-Datei an. Wenn Position- und Length-Eigenschaft den gleichen Wert enthalten, dann ist die Wave-Datei am Ende angelangt, und das Done-Ereignis tritt auf. In diesem Fall wird die Wave-Datei durch den Befehl "Prev" wieder an den Anfang gesetzt.
Private Sub TegoMM1_StatusUpdate()
Dim PosMinute
Dim PosSekunde
Rem Mode 526 = Playing, Mode 527 = Recording
If TegoMM1.Mode = 526 Or TegoMM1.Mode = 527 Then
PosSekunde = Fix(TegoMM1.Position / 1000)
PosMinute = Fix(PosSekunde / 60)
PosSekunde = PosSekunde Mod 60
lblPosition.Caption = Format(PosMinute, "00") & " : " & Format(PosSekunde, "00")
vscNichts.Value = TegoMM1.Position * 100 / TegoMM1.Length
End If
End Sub
Der Code aktualisiert die Caption-Eigenschaft im Bezeichnungsfeld lblPosition jede Viertelsekunde mit dem Wert der Positions-Eigenschaft des Multimedia-Steuerelements. Außerdem wird auch mit dem Schieberegler diese Position angezeigt.
Damit wäre die Erstellung des Programms abgeschlossen. Das Programm ist jetzt einsatzbereit, um Wave-Dateien wiederzugeben.
DasWaveBsp-Programm soll nun noch so erweitert werden, daß mit ihm auch andere Multimedia-Dateien wiedergegeben werden können. Außerdem sollen die Funktionen aller neun Schaltflächen des Multimedia-Steuerelements auch mit Befehlsschaltflächen ausgelöst werden können. Die Oberfläche würde nun so wie folgt aussehen:

| Objekt | Eigenschaft | Einstellung |
|---|---|---|
| Befehlsschaltfläche | Caption | Auswerfen |
| Enabled | False | |
| Height | 495 | |
| Left | 4080 | |
| Name | cmdAuswerfen | |
| Top | 1320 | |
| Width | 1215 | |
| Befehlsschaltfläche | Caption | Dateianfang |
| Enabled | False | |
| Height | 495 | |
| Left | 1440 | |
| Name | cmdDateiAnfang | |
| Top | 1320 | |
| Width | 1215 | |
| Befehlsschaltfläche | Caption | Dateiende |
| Enabled | False | |
| Height | 495 | |
| Left | 2760 | |
| Name | cmdDateiEnde | |
| Top | 1320 | |
| Width | 1215 | |
| 3D-Befehlsschaltfläche | BevelWidth | 1 |
| Caption | Aufnahme | |
| Enabled | False | |
| Font3D | 3 | |
| ForeColor | &H000000FF& | |
| Height | 495 | |
| Left | 4080 | |
| Name | cmdRecord | |
| Outline | True | |
| RoundedCorners | False | |
| Top | 720 | |
| Width | 1215 | |
| Befehlsschaltfläche | Caption | Schritt zurück |
| Enabled | False | |
| Height | 495 | |
| Left | 1440 | |
| Name | cmdSchrittRet | |
| Top | 720 | |
| Width | 1215 | |
| Befehlsschaltfläche | Caption | Schritt vor |
| Enabled | False | |
| Height | 495 | |
| Left | 2760 | |
| Name | cmdSchrittVor | |
| Top | 720 | |
| Width | 1215 | |
| Bezeichnungsfeld | Caption | Track: |
| Height | 255 | |
| Left | 480 | |
| Name | lblTrackAnzeige | |
| Top | 1560 | |
| Visible | False | |
| Width | 615 | |
| Bezeichnungsfeld | Alignment | 2 - Center |
| BackColor | &H00000000& | |
| Caption | 1 | |
| Font | Verdana, 20pt | |
| ForeColor | &H0000FFFF& | |
| Height | 495 | |
| Left | 480 | |
| Name | lblTrack | |
| Top | 1920 | |
| Visible | False | |
| Width | 855 | |
| Vertikale Bildlaufleiste | Height | 1575 |
| Large Change | 1 | |
| Left | 120 | |
| Name | vscTrackAnzahl | |
| Top | 1440 | |
| Visible | False | |
| Width | 255 |
Die Erweiterungen im Programmcode sind unter den jeweiligen Steuerelementen zusammengefaßt.
Diese Zeile ist nach der Option Explicit-Anweisung einzutragen. In der Variablen DateiArt wird die Art der Multimediadatei gespeichert, die aktuell geöffnet ist.
Dim DateiArt As Integer
Diese Schaltfläche ist nur aktiv, wenn eine CD-Audio-Datei abgespielt wird. Sie dient dazu, die Lade des CD-ROM-Lauwerks zu öffnen bzw. zu schließen.
Private Sub Private Sub cmdAuswerfen_Click()
If cmdAuswerfen.Caption = "Auswerfen" Then
TegoMM1.Command = "Eject"
cmdAuswerfen.Caption = "Lade schließen"
Else
TegoMM1.Command = "CloseDoor"
cmdAuswerfen.Caption = "Auswerfen"
End If
End Sub
Setzt die abzuspielende Datei zurück an ihren Anfang (bzw. bei CD-Audio-Dateien auf den vorangehenden Track).
Private Sub Private Sub cmdDateiAnfang_Click()
TegoMM1.Command = "Prev"
cmdStart.Enabled = True
cmdPause.Enabled = False
cmdStop.Enabled = False
If DateiArt = 4 Then
If vscTrackAnzahl.Value > vscTrackAnzahl.Min Then _
vscTrackAnzahl.Value = vscTrackAnzahl.Value - 1
Else
lblPosition.Caption = "00 : 00"
vscNichts.Value = 0
End If
End Sub
Setzt die abzuspielende Datei an ihr Dateiende vor (bzw. bei CD-Audio-Dateien auf den nächstfolgenden Track).
Private Sub Private Sub cmdDateiEnde_Click()
TegoMM1.Command = "Next"
cmdStart.Enabled = True
cmdPause.Enabled = False
cmdStop.Enabled = False
If DateiArt = 4 Then
If vscTrackAnzahl.Value < vscTrackAnzahl.Max Then _
vscTrackAnzahl.Value = vscTrackAnzahl.Value + 1
End If
End Sub
Nach der Zeile Tegomm1.Command = "Pause" müssen folgende Zeilen eingefügt werden.
Select Case DateiArt
Case 2, 4
cmdPause.Enabled = False
cmdStop.Enabled = False
cmdStart.Enabled = True
End Select
Beim Abspielen von Wave-Dateien und von AVI-Video-Dateien bewirkt das Clicken der Pause-Taste eine Unterbrechung, die durch nochmaliges Drücken der Pause-Taste wieder aufgehoben wird, und das Abspielen setzt an genau der gleichen Stelle fort. Bei MIDI-Dateien und CD-Audio-Dateien verhält sich die Pause-Taste dagegen wie die Stop-Taste.
Um die Bezeichnung dieser Schaltfläche in roter Farbgebung gestalten zu können, wurde hierfür das 3D-Schaltflächensteuerelement gewählt.
Private Sub cmdRecord_Click()
TegoMM1.Command = "Record"
cmdRecord.Enabled = False
cmdRecord.Font3D = 3
cmdStart.Enabled = False
cmdPause.Enabled = True
cmdStop.Enabled = True
End Sub
Diese Schaltfläche ist nur bei AVI-Video-Dateien verfügbar. Mit ihr kann man bildweise zurückblättern.
Private Sub cmdSchrittRet_Click()
TegoMM1.Command = "Back"
cmdStart.Enabled = True
cmdPause.Enabled = False
cmdStop.Enabled = False
End Sub
Diese Schaltfläche ist ebenfalls nur bei AVI-Video-Dateien verfügbar, und dient dazu, in der Datei bildweise vorblättern zu können.
Private Sub cmdSchrittVor_Click()
TegoMM1.Command = "Step"
cmdStart.Enabled = True
cmdPause.Enabled = False
cmdStop.Enabled = False
End Sub
Die folgenden Programmzeilen müssen vor der Zeile TegoMM1.Command = "Play" eingefügt werden:
Select Case DateiArt
Case 1
cmdRecord.Enabled = False
cmdRecord.Font3D = 3
Case 4
TegoMM1.Track = vscTrackAnzahl.Value
TegoMM1.From = TegoMM1.TrackPosition ' übernimmt den in vscTrackAnzahl
' eingestellten Wert als Track-Nummer,
' von dessen Beginn abgespielt werden soll.
End Select
Die folgenden Programmzeilen müssen nach der Zeile TegoMM1.Command = "Stop" eingefügt werden;
Select Case DateiArt
Case 1
cmdRecord.Enabled = True
cmdRecord.Font3D = 0
End Select
Hier müssen folgende Zeilen ergänzt werden:
cmdAuswerfen.Enabled = False
lblTrack.Visible = False
lblTrackAnzeige.Visible = False
vscTrackAnzahl.Visible = False
cmdDateiAnfang.Enabled = False
cmdDateiEnde.Enabled = False
cmdRecord.Enabled = False
cmdRecord.Font3D = 3
cmdSchrittVor.Enabled = False
cmdSchrittRet.Enabled = False
cmdDateiAnfang.Caption = "Dateianfang"
cmdDateiEnde.Caption = "Dateiende"
Im Programmcode muß im Menüeintrag Öffnen in der cmmDatei.Filter-Anweisung etwas geändert werden. Diese Zeile muß wie folgt abgeändert werden:
cmmDatei.Filter = "Wave-Dateien (*.wav)|*.wav|MIDI-Dateien (*.mid)|*.mid|AVI-Videodateien (*.avi)|*.avi|CD-Audiodateien (*.cda)|*.cda"Die ausgewählte Multimedia-Dateiart wird in einer globalen Variable namens DateiArt (vom Typ Integer; im Allgemeinen Deklarationsabschnitt eintragen) festgehalten (DateiArt = cmmDatei.FilterIndex), und zwar mit Hilfe der FilterIndex-Eigenschaft des Standarddialogs. Wird die erste Dateiart (Wave-Dateien) angewählt, hat FilterIndex den Wert 1. Die DeviceType-Anweisung des Multimedia-Steuerelements wird durch folgende Select Case-Schleife ersetzt:
Select Case DateiArt
Case 1
TegoMM1.DeviceType = "WaveAudio"
Case 2
TegoMM1.DeviceType = "Sequencer"
Case 3
TegoMM1.DeviceType = "AVIVideo"
Case 4
TegoMM1.DeviceType = "CDAudio"
End Select
Nach der Zeile TegoMM1.TimeFormat = "Milliseconds" müssen noch folgende Zeilen ergänzt werden:
If DateiArt = 4 Then
vscTrackAnzahl.Visible = True
lblTrack.Visible = True
lblTrackAnzeige.Visible = True
vscTrackAnzahl.Max = TegoMM1.Tracks
vscTrackAnzahl.Value = Val(Mid$(cmmDatei.FileTitle, 6, 2))
cmdDateiAnfang.Caption = "Track zurück"
cmdDateiEnde.Caption = "Track vor"
Else
vscTrackAnzahl.Visible = False
lblTrack.Visible = False
lblTrackAnzeige.Visible = False
cmdDateiAnfang.Caption = "Dateianfang"
cmdDateiEnde.Caption = "Dateiende"
End If
If TegoMM1.CanEject Then cmdAuswerfen.Enabled = True Else cmdAuswerfen.Enabled = False
If TegoMM1.CanPlay Then cmdStart.Enabled = True Else cmdStart.Enabled = False
If TegoMM1.CanRecord Then
cmdRecord.Enabled = True
cmdRecord.Font3D = 0
Else
cmdRecord.Enabled = False
End If
If TegoMM1.CanStep Then
cmdSchrittVor.Enabled = True
cmdSchrittRet.Enabled = True
Else
cmdSchrittVor.Enabled = False
cmdSchrittRet.Enabled = False
End If
cmdDateiAnfang.Enabled = True
cmdDateiEnde.Enabled = True
Der in der Click-Methode einzufügende Programmcode lautet wie folgt:
Private Sub TegoMM1_Click()
Select Case TegoMM1.Mode
Case 525 ' Stop
If DateiArt = 1 Then
cmdRecord.Enabled = True
cmdRecord.Font3D = 0
End If
cmdStop.Enabled = False
cmdStart.Enabled = True
cmdPause.Enabled = False
Case 526, 527 ' Playing / Recording
cmdStop.Enabled = True
cmdPause.Enabled = True
cmdStart.Enabled = False
cmdRecord.Enabled = False
cmdRecord.Font3D = 3
Case 529 ' Pause
If DateiArt = 2 Or DateiArt = 4 Then
cmdPause.Enabled = False
cmdStop.Enabled = False
cmdStart.Enabled = True
End If
Case 530 ' Lade offen
End Select
End Sub
Mit diesem Code wird der Status des Multimedia-Steuerelements abgefragt (ob gerade abgespielt wird, ob nicht abgespielt wird, usw.) und dementsprechend die Befehlsschaltflächen aktiviert oder deaktiviert, um deren Status mit denen des Multimedia-Steuerelements in Übereinstimmung zu bringen.
In der Done-Methode müssen folgende Programmzeilen ergänzt werden (zwischen cmdPause.Enabled = False und dem letzten End If):
If DateiArt = 1 Then
cmdRecord.Enabled = True
cmdRecord.Font3D = 0
End If
Dieses Steuerelement ist nur bei CD-Audio-Dateien sichtbar. Es dient dazu, den Track festzulegen, bei dem die CD-Wiedergabe beginnen soll. Sowohl in der Scroll- als auch in der Change-Methode muß folgende Zeile eingetragen werden
lblTrack.Caption = vscTrackAnzahl.Value
Mit diesen Eingriffen ist es jetzt möglich, verschiedene Arten von Multimedia-Dateien abzuzspielen.

Übung 13 (Zusatz-Steuerelemente)
Hauptseite
Übung 15 (Erstellen einer Online-Hilfedatei)