Buscar

Armazendo arquivos avi e wav em tabelas

Código

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

Publicidade

Vote na dica




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes da dica

Categoria: Banco de dados
Adicionada dia: 29/05/03
Por: Felipe Monteiro
Visualizada: 2999 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009