VB 5/6-Tipp 0087: AVIs mit dem MMP abspielen
von ActiveVB
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: | Verwendete API-Aufrufe: GetShortPathNameA (GetShortPathName), mciSendCommandA (mciSendCommand), mciSendStringA (mciSendString) | Download: |
'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-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
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