Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0087: AVIs mit dem MMP abspielen

 von 

Beschreibung 

Diese Programm zeigt die verschiedenen Möglichkeiten und Grenzen des VB-eigenen Multi-Media-Controls auf. Neben dem endlos Abspielen von Avis, wird gezeigt wie das Video in einer eigenen PictureBox, die sich der Größe der AVI anpaßt, abgespielt werden kann. Auch der Vollbildmodus ist intergriert.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

GetShortPathNameA (GetShortPathName), mciSendCommandA (mciSendCommand), mciSendStringA (mciSendString)

Download:

Download des Beispielprojektes [21,83 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Project1.vbp -------------
' Die Komponente ' (mci32.ocx)' wird benötigt.
' Die Komponente 'Microsoft Common Dialog Control 6.0 (SP3) (comdlg32.ocx)' wird benötigt.

'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Multimediacontrol "MMControl1"
' Steuerelement: Standarddialog-Steuerelement "CommonDialog1"
' Steuerelement: Timersteuerelement "Timer1"
' Steuerelement: Schaltfläche "Command4"
' Steuerelement: Rahmensteuerelement "Frame1"
' Steuerelement: Optionsfeld-Steuerelement "Option3" auf Frame1
' Steuerelement: Kontrollkästchen-Steuerelement "Check1" auf Frame1
' Steuerelement: Optionsfeld-Steuerelement "Option2" auf Frame1
' Steuerelement: Optionsfeld-Steuerelement "Option1" auf Frame1
' Steuerelement: Kontrollkästchen-Steuerelement "Check2" auf Frame1
' Steuerelement: Bildfeld-Steuerelement "Picture1"
' Steuerelement: Schaltfläche "Command3"
' Steuerelement: Schaltfläche "Command2"
' Steuerelement: Schaltfläche "Command1"
' Steuerelement: Beschriftungsfeld "Label6"
' Steuerelement: Beschriftungsfeld "Label5"
' Steuerelement: Beschriftungsfeld "Label4"
' Steuerelement: Beschriftungsfeld "Label3"
' Steuerelement: Beschriftungsfeld "Label2"
' Steuerelement: Beschriftungsfeld "Label1"

Option Explicit

Private Declare Function mciSendString Lib "winmm.dll" _
        Alias "mciSendStringA" (ByVal lpstrCommand As _
        String, ByVal lpstrReturnString As Any, ByVal _
        uReturnLength As Long, ByVal hwndCallback As _
        Long) As Long

Private Declare Function mciSendCommand Lib "winmm.dll" _
        Alias "mciSendCommandA" (ByVal wDeviceID As Long, _
        ByVal uMessage As Long, ByVal dwParam1 As Long, _
        dwParam2 As MCI_OVLY_RECT_PARMS) As Long

Private Declare Function GetShortPathName Lib "kernel32" _
        Alias "GetShortPathNameA" (ByVal lpszLongPath As _
        String, ByVal lpszShortPath As String, ByVal _
        cchBuffer As Long) As Long
        
Private Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type

Private Type MCI_OVLY_RECT_PARMS
  dwCallback As Long
  rc As RECT
End Type

Const MCI_OVLY_WHERE_SOURCE = &H20000
Const MCI_OVLY_WHERE_DESTINATION = &H40000
Const MCI_WHERE = &H843

Dim Play As Boolean

Private Sub Form_Load()
  MMControl1.Wait = True
  MMControl1.UpdateInterval = 50
  MMControl1.hWndDisplay = Picture1.hWnd
  Picture1.ScaleMode = 3
  Timer1.Interval = 50
End Sub

Private Sub Form_Unload(Cancel As Integer)
  MMControl1.Command = "stop"
  MMControl1.Command = "close"
End Sub

Private Sub Command1_Click()
  MMControl1.Command = "stop"
  MMControl1.Command = "close"
  Play = False
  
  CommonDialog1.Filter = ("VB-Dateien (*.avi)|*.avi;")
  CommonDialog1.InitDir = App.Path
  CommonDialog1.ShowOpen
  
  If CommonDialog1.filename <> "" Then
    MMControl1.DeviceType = "avivideo"
    MMControl1.filename = CommonDialog1.filename
    MMControl1.Command = "open"
    MMControl1.Notify = True
    Label4.Caption = MMControl1.Length

    If Check2.Value = vbChecked And Option2 Then
      Call AdaptPicture
    End If
    
    If Option3.Value Then Call Option3_Click
    Me.Caption = CommonDialog1.filename
  End If
End Sub

Private Sub Command2_Click()
  If Not Option3.Value Then
    If Play = False And MMControl1.filename <> "" Then
      MMControl1.Command = "play"
      Play = True
    End If
  Else
    Call Option3_Click
  End If
End Sub

Private Sub Command3_Click()
  Play = False
  MMControl1.Command = "stop"
End Sub

Private Sub Command4_Click()
  MMControl1.Command = "pause"
End Sub

Private Sub MMControl1_Done(NotifyCode As Integer)
  If Play And Check1.Value = vbChecked Then
    Play = False
    MMControl1.Command = "stop"
    MMControl1.Command = "prev"
    MMControl1.Command = "play"
    Play = True
  End If
End Sub

Private Sub MMControl1_StatusUpdate()
  Label2.Caption = MMControl1.Position
End Sub

Private Sub Option1_Click()
  Check1.Enabled = True
  Check2.Enabled = False
  MMControl1.hWndDisplay = 0
End Sub

Private Sub Option2_Click()
  Check1.Enabled = True
  Check2.Enabled = True
  MMControl1.hWndDisplay = Picture1.hWnd
End Sub

Private Sub Option3_Click()
  Dim R&, AA$
    Check1.Enabled = False
    Check2.Enabled = False
    MMControl1.Command = "stop"
    Play = False
    
    AA = Space$(255)
    R = GetShortPathName(CommonDialog1.filename, AA, Len(AA))
    AA = Mid$(AA, 1, R)
    R = mciSendString("play " & AA & " fullscreen ", 0&, 0, 0&)
End Sub

Private Sub Check2_Click()
  If Check2.Value = vbChecked And MMControl1.filename <> "" Then
    Call AdaptPicture
  End If
End Sub

Private Sub Timer1_Timer()
  Dim x%, AA$
    x = MMControl1.Mode
    Select Case x
      Case 524: AA = "NotOpen"
      Case 525: AA = "Stop"
      Case 526: AA = "Play"
      Case 527: AA = "Record"
      Case 528: AA = "Seek"
      Case 529: AA = "Pause"
      Case 530: AA = "Ready"
    End Select
    Label6.Caption = AA
End Sub

Private Sub AdaptPicture()
  Dim Result&, Par As MCI_OVLY_RECT_PARMS
    
    Par.dwCallback = MMControl1.hWnd
    Result = mciSendCommand(MMControl1.DeviceID, _
             MCI_WHERE, MCI_OVLY_WHERE_SOURCE, Par)
    If Result <> 0 Then
      MsgBox ("Fehler")
    Else
      Picture1.Width = (Par.rc.Right - Par.rc.Left) * 15 + 4 * 15
      Picture1.Height = (Par.rc.Bottom - Par.rc.Top) * 15 + 4 * 15
    End If
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Project1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 13 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von HABIB am 03.03.2005 um 16:33

Wie öffne ich MMP Datein das gehr irgend wie nicht.
Ich brauche die Antwort sofort da ich dafür eine Note bekommen ich hoffe ihr könnt mir helfen.
DAnke...

Kommentar von TTSAddict am 02.03.2005 um 09:42

Die Lösung über das MMControl ist zwar eine feine sache, doch leider wenn die Bildgröße skaliert werden soll absolut unbrauchbar, da unerträglich Ressourcenhungrig (bekomme auf einem P4 2ghz bei einer Skalierung von 640x480 auf 800x600 eine Framerate von 3-5fps) - außerdem verwendet die Skalierung keinerlei Filter, das Bild ist hinterher zum Wegwerfen.
Die einzige Möglichkeit wäre die Verwendung des Mediaplayer controls, nur gibt es hier wieder das Problem, daß keine anderen Controls den Mediaplayer während des Abspielens überlagern können. Verwendet man stattdessen zwei Forms (eine nur für den Mediaplayer, die andere Transparent per SetLayeredWindowAttributes) fangen die überlagerten Objekte an zu flackern!
Nungut, um sowas wie Kopieranimationen abzuspielen reicht dieser Code wohl.

Kommentar von Prider am 13.11.2002 um 14:35

ich hab mir auf einer lan einen avi-film gesaugt, der bei mir net läuft!
alle anderen avi und mpeg-filme laufen aber bei mir!
am film kann es auch net liegen, weil er bei allen anderen lief! was kann ich tun!
ich hab windows xp und hab bereits einen divx-codec installiert!

Kommentar von Miom am 15.08.2002 um 04:57

@eva: vielleicht weils n DivX iss? die haben z.T. auch .avi und funzen nur mit nem speziellem programm (www.divx.com)

Kommentar von eva am 06.08.2002 um 20:06

ich habe für meine schwester ein avi-video heruntergeladen, auf dem media player 7.1 funktioniert es jedoch nicht, und auch nicht auf einer anderen anwendung. wo könnte das problem liegen?

Kommentar von Stefan am 25.06.2002 um 19:24

Ich habe eine Frage die vielleicht peinlich klingt aber wie kann ich ein avi Video abspielen und geht es auch mit dem windows media Player? wenn ja wie?

Kommentar von Thomas am 10.05.2002 um 21:53

Das Systemvideo-Fenster scaliert sich nicht in der Picturebox. Kommt auch bei anderen Beispielen vor. 2.Wie positioniert und vergrössert man das Systemvideo-Fenster? kopiert man es in eine andere Form passt es sich auch nicht der neuen Grösse an. Besten Dank für Lösung, Thomas

Kommentar von Harry am 15.04.2002 um 12:30

Ich möchte gerne auf die einzelnen Bilder des *.avi files der PictureBox zugreifen und dann einzeln abspeichern. Wie funktioniert das am Besten?

Kommentar von Andreas Enz am 07.02.2002 um 13:08

wie kann ich *.mpg Datein mit dem Ulead Mediastudio schneiden

Kommentar von Flexxie am 08.09.2001 um 19:47

Der Tip funktioniert gut, allerdings wüßte ich gerne, wie man die größe des Avi-Videos der Bildschirmgröße anpassen kann.
Kann mir da jemand helfen?

Kommentar von stefan hiemann am 06.09.2001 um 18:58

wie bekomme ich die framegroesse des verwendeten videos in variablen

Kommentar von Oskar Huber am 23.05.2001 um 10:17

Ich möchte die Hintergrundfarbe beim Abspielen des Copy-AVI ändern (dieses Pink hält ja keiner aus), wie mache ich das ?
Gruss Oskar

Kommentar von Major am 26.12.2000 um 17:29

ich habe einen Fehler in den vb Beispiel :
vbtp0087 (AVI Abspielen mit MMP Demo)
ich öffne die datei : Project1.vbp
Erste Fehler meldung : `C:\*\*\MCI32.OCX`konnte nicht geladen werden
Laden des Projekts fortsetzen ?
Meine eingabe ist : JA
Zweit fehlermeldung : fehler beim Laden. Weiter information in `C:\*\*\form1.log`
Meine eingabe : OK
'ich Starte das Prog.
dritte Fehler meldung : Fehler beim Kompiliern Methode oder Mitgliedsdaten nicht gefunden
Meine eingabe : OK
Private Sub Form_Load() 'ist geld makiert
'ich stope das prog. und starte es erneut
Fehler meldung : Fehler beim Kompiliern Methode oder Mitgliedsdaten nicht gefunden
Private Sub Form_Load() 'ist geld makiert und in der ersten zeile ist MMControl1.Wait = True.Wait
MCI32.OCX