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”:
type TForm1 = class(TForm) ShockwaveFlash1: TShockwaveFlash; private procedure CarregaFlash; public end;
Codifique o corpo da procedure conforme exemplo abaixo:
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 not FileExists(FileSWFPath+'swflash.ocx') then 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