Como integrar aquivos Flash (.swf) no Delphi
Existe um controle activeX que permite a integração de arquivos “swf “no Delphi. Vamos instalar esse controle activeX para prosseguirmos com nosso exemplo.
No Delphi, acesse o menu Component ► Import ActiveX Control. Em seguida selecione o controle Shockwave Flash que está presente na listagem abaixo do título “Import ActiveX”. Este ActiveX já é instalado junto com o Windows. Vc pode escolher uma das packages já existentes, para isso, na aba cujo o título é “Into existing package”, selecione uma das listadas na combo desta tela e click “Ok”. Confirme, a partir daí o Delphi irá fazer o restante automaticamente e quando terminar, lhe informará que o componente TShockwaveFlash foi instalado com sucesso. Observe agora que o esse componente recém instalado se encontra presente na palheta ActiveX. "Criando um arquivo “.Res" Copie o arquivo swflash.ocx, que pode ser encontrado no diretório “c:\windows\system\macromed\flash”, ou “C:\WINNT\system32\Macromed\Flash” para o diretório criado anteriormente. Copie também o arquivo compilado flash “.swf" que você irá exibir em sua aplicação Delphi para o mesmo diretório. Agora vamos criar primeiro o arquivo “.rc”, abra o bloco de notas e insira essas duas linhas de comando abaixo: SHOCKWAVEFILE RCDATA arquivo.swf SHOCKWAVEOCX RCDATA swflash.ocx "Brcc32 -r -32 C:\ExemploFlashDelphi \ FlashZn.rc" Execute a linha de comando acima um para criar o arquivo “FlashZn.res". Construindo um exemplo no Delphi 1 - Inicie uma nova aplicação no Delphi: Menu File ► New ► Application. 2 - Adicione no Form1 um ShockwaveFlash (Palheta ActiveX), set a propriedade align = alClient. Pressione F12 para exibir a página de código. Nela, procure a palavra reservada “implementation” abaixo da diretiva de compliação “{$R *.dfm}” adicione “{$R FlashZn.res}”. 3 – Na seção private do Form1 digite conforme o trecho de código abaixo a procedure CarregaFlash, em seguida pressione “Ctrl+Shift+C”:
Ao confirmar clickando em "OK" o Delphi irá lhe avisar que a package será reconstruída, “package .... will be rebuilt. Continue? ”.
type
TForm1 = class(TForm)
ShockwaveFlash1: TShockwaveFlash;
private
procedure CarregaFlash;
public
end;
Codifique o corpo da procedure conforme exemplo abaixo:
not FileExists(FileSWFPath+'swflash.ocx') then
procedure TForm1.CarregaFlash;
const
AZnFlash = 'zn1.swf';
var
ZnAuxDir: String;
MySysDir : array[0..MAX_PATH] of Char;
FileSWFPath, AppDir: String;
AFileRes: TResourceStream;
AMyFile: TFileStream;
begin
GetSystemDirectory(@MySysDir,MAX_PATH);
FileSWFPath := MySysDir+'\macromed\flash\';
GetDir(0,AppDir); // Pega diretório corrente
// Verifica se já existe a OCX do flash na máquina
if
begin
ZnAuxDir := IncludeTrailingPathDelimiter(MySysDir)+'macromed');
// Cria o diretório da OCX, se necessário, e extrai o recurso.
if not DirectoryExists(ZnAuxDir) then
if not CreateDir(ZnAuxDir) then
raise Exception.Create('Não foi possível criar o diretório!');
CreateDir(IncludeTrailingPathDelimiter(ZnAuxDir) + 'flash');
AFileRes := TResourceStream.Create(0, 'SHOCKWAVEOCX', RT_RCDATA);
AMyFile := TFileStream.Create(FileSWFPath + 'swflash.ocx', fmCreate);
try
AMyFile.CopyFrom(AFileRes, AFileRes.Size);
finally
AFileRes.Free;
AMyFile.Free;
end;
// Registra a OCX
Winexec(PChar('regsvr32 /s ' + FileSWFPath + 'swflash.ocx'), SW_HIDE);
end;
// Extrai o .swf para o diretório da aplicação
AFileRes := TResourceStream.Create(0, 'SHOCKWAVEFILE',RT_RCDATA);
AMyFile := TFileStream.Create(AZnFlash, fmCreate);
try
AMyFile.CopyFrom(AFileRes, AFileRes.Size);
finally
AFileRes.Free;
AMyFile.Free;
end;
// Atribui o .swf para o componente
ShockwaveFlash1.Movie := IncludeTrailingPathDelimiter(AppDir) + AZnFlash;
end;
No Evento OnCreate do Form1 codifique:
procedure TForm1.FormCreate(Sender: TObject);
begin
CarregaFlash;
end;
OBS: Todos os arquivos devem estar no mesmo diretório do seu projeto Delphi (projetc1.dpr) para compilar o seu executável. O ".res", o ".ocx" e o arquivo ".swf" também.
Construí este exemplo a partir do código de um amigo, que por sua vez teve como referencia um exemplo do site Ramos da informática
Muito bom o seu artigo... me serviu bastante. Gostaria de saber se você tem algum exemplo do delphi passando uma string para o flash, já que no meu caso, isto é extremamente útil. Grato, Alexandre Marques (alexandre.marq@gmail.com)
ResponderExcluirDa erro de file not found aqui : Fres := TResourceStream.Create(0,'SHOCKWAVEFILE',RT_RCDATA);
ResponderExcluir