Arquivos AVI e WAV em tabelas


O exemplo abaixo demonstra como gravar um arquivo .AVI ou .WAV dentro de um arquivo paradox. Mostra também como reproduzir estes arquivos.

Para que o código abaixo funcione inclua em um Form 02 componentes Button, 01 componente Panel, 01 componente DBGrid, 01 componente Table, 01 componente DataSource e 01 componente OpenDialog.

Crie um arquivo Paradox com a seguinte estrutura:

Nome Tipo Tamanho

Codigo +

Nome A 100

Avi B

 

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Db, DBTables, ExtCtrls, MPlayer, DBCtrls, Grids, DBGrids;
type
  TForm1 = class(TForm)
  Button1: TButton;
  Button2: TButton;
  Table1: TTable;
  DataSource1: TDataSource;
  DBGrid1: TDBGrid;
  Panel1: TPanel;
  OpenDialog1: TOpenDialog;
  Table1Codigo: TAutoIncField;
  Table1Nome: TStringField;
  Table1Avi: TBlobField;
  procedure Button1Click(Sender: TObject);
  procedure Button2Click(Sender: TObject);
  procedure FormDestroy(Sender: TObject);
  procedure FormShow(Sender: TObject);
  procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
  { Private declarations }
  public
  { Public declarations }
  end;
  var Form1: TForm1;
  FileName : string;
  MediaPlayer1 : TMediaPlayer;

  implementation
  {$R *.DFM}
  {Esta função cria um arquivo temporário para o sistema}
  function GetTemporaryFileName : string;
  {$IFNDEF WIN32}
  const MAX_PATH = 144;
  {$ENDIF}
  var
  {$IFDEF WIN32}
  lpPathBuffer : PChar;
  {$ENDIF}
  lpbuffer : PChar;
begin
  {Get the file name buffer}
  GetMem(lpBuffer, MAX_PATH);
  {$IFDEF WIN32}
  {Get the temp path buffer}
  GetMem(lpPathBuffer, MAX_PATH); {Get the temp path}
  GetTempPath(MAX_PATH, lpPathBuffer); {Get the temp file name}
  GetTempFileName(lpPathBuffer,'tmp',0,lpBuffer);
  FreeMem(lpPathBuffer, MAX_PATH);
  {$ELSE} {Get the temp file name}
  GetTempFileName(GetTempDrive('C'),'tmp',0,lpBuffer);
  {$ENDIF} {Create a pascal string containg}
  {the temp file name and return it}
  result := StrPas(lpBuffer);
  {Free the file name buffer}
  FreeMem(lpBuffer, MAX_PATH);
end;
 {Grava AVI ou Wav no arquivo PARADOX}
procedure TForm1.Button1Click(Sender: TObject);
  var FileStream: TFileStream; {para ler o arquivo avi}
  BlobStream: TBlobStream; {para salvar no campo blob}
begin
  Application.ProcessMessages;
  Button1.Enabled := false;
  Button2.Enabled := false;

  if OpenDialog1.Execute then
      FileStream := TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
      Table1.Append;
      Table1Nome.Value := OpenDialog1.FileName;
      BlobStream := TBlobStream.Create(Table1AVI, bmReadWrite);
      BlobStream.Seek(0, soFromBeginning);
      BlobStream.Truncate;
      BlobStream.CopyFrom(FileStream, FileStream.Size);
      FileStream.Free;
      BlobStream.Free;
      Table1.Post;
      Button1.Enabled := true;
      Button2.Enabled := true;
end;
  {Reproduz o que está gravado no campo Blob}
procedure TForm1.Button2Click(Sender: TObject);
  var FileStream: TFileStream; {a temp file}
  BlobStream: TBlobStream; {the AVI Blob}
begin
  BlobStream := TBlobStream.Create(Table1AVI, bmRead);
  if BlobStream.Size = 0 then  begin
     BlobStream.Free;
     Exit;
  end;
      MediaPlayer1.Close; {Reset the file name}
      MediaPlayer1.FileName := ''; {Refresh the play window}
      MediaPlayer1.Display := Panel1;
      Panel1.Refresh;
  if FileName <> '' then
    DeleteFile(FileName); {Get a temp file name}
    FileName := GetTemporaryFileName; {Create a temp file stream}
    FileStream := TFileStream.Create(FileName,fmCreate or fmOpenWrite);
    FileStream.CopyFrom(BlobStream, BlobStream.Size); {Free the streams}
    FileStream.Free; BlobStream.Free;
    MediaPlayer1.FileName := filename;
    MediaPlayer1.DeviceType := dtAviVideo;
    MediaPlayer1.Open;
    MediaPlayer1.Play;
end;
// Evento OnDestroy do Form
procedure TForm1.FormDestroy(Sender: TObject);
begin
  MediaPlayer1.Close;
  MediaPlayer1.FileName := '';
  if FileName <> '' then
     DeleteFile(FileName);
end;
// Evento OnShow do Form
procedure TForm1.FormShow(Sender: TObject);
begin
    MediaPlayer1 := TMediaPlayer.Create(self);
    with MediaPlayer1 do begin
      Parent := self ;
      Visible := False;
    end;
    Table1.Open;
end;
// Evento OnClose do Form
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Table1.Close;
end;
end.