Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Videos mit Delphi abspielen!

  Alt 5. Sep 2003, 21:22
Moin LiquidSteel,

die einfachste Methode ginge so:

Unit mmsystem muss mit eingebunden werden.

Delphi-Quellcode:
procedure TfrmMAIN.Button4Click(Sender: TObject);

var
  mciErr : DWORD;

begin
  // try/finally um bei einem Fehler einfach mit exit rausgehen zu können,
  // und trotzdem den Fehler angzeigt zu bekommen
  try
    // erst kommt das Kommando, in diesem Falle soll das Device geöffnet werden
    // Es soll das Device mpegvideo geöffnet werden, und dabei die Datei d:\test.mpeg
    // diese muss mit einem ! angehängt werden
    // Um die Datei leichter ansprechen zu können, wird ein alias vergeben, hier video1 genannt
    // Als Parent dient hier das Formular selber. Es muss das Handle angegeben werden,
    // und zwar als String, da das gesamte Kommando als ein String angegeben wird
    // nil = Es wird nichts zurückgegeben, bzw. was zurückgegeben wird, soll ignoriert werden.
    // 0 = Bufferlänge für die Rückgabe. Da nichts zurückgegben werden soll ist die Länge 0
    // Der letzte Parameter ist das Handle des Fensters, an das evenutelle Benachrichtigungen geschickt werden sollen.
    // (siehe auch TMediaPlayer.OnNotify
    mciErr := mciSendString(PChar('open mpegvideo!d:\test.mpeg alias video1 parent '+IntToStr(self.Handle)),nil,0,self.Handle);
    if mciErr <> 0 then exit;
    // Das Display zuweisen, hier wieder als Handle
    mciErr := mciSendString(PChar('window video1 handle '+IntToStr(self.Handle)),nil,0,self.Handle);
    if mciErr <> 0 then exit;
    // und wenn bislang alles gut gegangen ist, das Video abspielen
    mciErr := mciSendString('play video1',nil,0,self.Handle);
  finally
    if mciErr <> ERROR_SUCCESS then DisplayMciError(mciErr);
  end;
end;

// Nur um die Fehleranzeige zu vereinfachen
procedure DisplayMciError(const AmciErr : DWORD);

var
  pBuf : PChar;
  dwLen : DWORD;

begin
  dwLen := 1024;
  pBuf := AllocMem(dwLen);
  try
    mciGetErrorString(AmciErr,pBuf,dwLen);
    ShowMessage(trim(pBuf));
  finally
    FreeMem(pBuf,dwLen);
  end;
end;

// Wichtig: Alle Geräte wieder schliessen
procedure TfrmMAIN.FormDestroy(Sender: TObject);
begin
  mciSendString(PChar('close all'),nil,0,self.Handle);
end;
Wie ich jetzt in diesem Falle für MPEGS auf mpegvideo als device gekommen bin, kann ich nicht einmal sagen.
Weitere Einzelheiten zu mciSendString können dem PSDK oder MSDN entnommen werden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat