{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.