Cursos de Informática Grátis www.megainforcursos.com

12 de outubro de 2012

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.

Em seguida, clique no botão “Install” situado no canto inferior da tela. Na janela seguinte, cujo o título é “Install Component”, vc deve selecionar em que package vc deseja adicionar esse novo componente.



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



Ou, para criar uma nova package, na aba “ into new Package”, em Package file name, defina um path e nome de arquivo para criação da package.



Ao confirmar clickando em "OK" o Delphi irá lhe avisar que a package será reconstruída, “package .... will be rebuilt. Continue? ”.



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"
Crie um diretório para que possamos construir o arquivo de recurso (“.res”). Esse arquivo usaremos para poder carregar o flash para a plicação Delphi, sugiro: “C:\ExemploFlashDelphi”.
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

O “arquivo.swf” é o nome do seu compilado flash (.swf). Salve esse txt onde acabamos referenciar “SHOCKWAVEFILE” e “SHOCKWAVEOCX” no mesmo diretório que criamos anteriormente e colocamos o “ocx” (“C:\ExemploFlashDelphi”) com o nome “FlashZn.rc” (o que importa aqui é a extenção do arquivo, “.rc”). Feito isso vamos abrir o Prompt do Ms-Dos e digitar a seguinte linha de comando:
  
"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:
  1. procedure TForm1.CarregaFlash;  
  2. const  
  3.   AZnFlash = 'zn1.swf';  
  4. var  
  5.   ZnAuxDir: String;  
  6.   MySysDir : array[0..MAX_PATH] of Char;  
  7.   FileSWFPath, AppDir: String;  
  8.   AFileRes: TResourceStream;  
  9.   AMyFile: TFileStream;  
  10. begin  
  11.   GetSystemDirectory(@MySysDir,MAX_PATH);  
  12.   FileSWFPath := MySysDir+'\macromed\flash\';  
  13.   GetDir(0,AppDir); // Pega diretório corrente  
  14.  // Verifica se já existe a OCX do flash na máquina  
  15.   if not FileExists(FileSWFPath+'swflash.ocx'then   
  16.   begin  
  17.     ZnAuxDir := IncludeTrailingPathDelimiter(MySysDir)+'macromed');  
  18.     // Cria o diretório da OCX, se necessário, e extrai o recurso.  
  19.     if not DirectoryExists(ZnAuxDir) then  
  20.       if not CreateDir(ZnAuxDir) then  
  21.         raise Exception.Create('Não foi possível criar o diretório!');  
  22.       
  23.     CreateDir(IncludeTrailingPathDelimiter(ZnAuxDir) + 'flash');  
  24.       
  25.     AFileRes := TResourceStream.Create(0'SHOCKWAVEOCX', RT_RCDATA);  
  26.     AMyFile := TFileStream.Create(FileSWFPath + 'swflash.ocx', fmCreate);  
  27.     try  
  28.       AMyFile.CopyFrom(AFileRes, AFileRes.Size);  
  29.     finally  
  30.       AFileRes.Free;  
  31.       AMyFile.Free;  
  32.     end;  
  33.     // Registra a OCX  
  34.     Winexec(PChar('regsvr32 /s ' + FileSWFPath + 'swflash.ocx'), SW_HIDE);  
  35.   end;  
  36.   // Extrai o .swf para o diretório da aplicação    
  37.   AFileRes := TResourceStream.Create(0'SHOCKWAVEFILE',RT_RCDATA);  
  38.   AMyFile := TFileStream.Create(AZnFlash, fmCreate);  
  39.   try  
  40.     AMyFile.CopyFrom(AFileRes, AFileRes.Size);  
  41.   finally  
  42.     AFileRes.Free;    
  43.     AMyFile.Free;  
  44.   end;  
  45.   // Atribui o .swf para o componente  
  46.   ShockwaveFlash1.Movie := IncludeTrailingPathDelimiter(AppDir) + AZnFlash;    
  47. end;  

No Evento OnCreate do Form1 codifique:
  1. procedure TForm1.FormCreate(Sender: TObject);  
  2. begin  
  3.   CarregaFlash;  
  4. 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

Rodando Arquivos do Flash no Delphi

Rodando Arquivos do Flash no Delphi

Primeiramente temos que instalar o controle ActiveX que trabalha com os arquivos flash, para isso acesse o menu "Component | Import ActiveX Control". 

Em seguida selecione o controle Shockwave Flash que está presente na lista. Este componente já é instalado junto com o Windows.

Clique no botão Install presente no canto inferior da tela. Na janela seguinte basta pressionar Ok. A terceira tela de confirmação será exibida e novamente pressione o botão Ok. Neste momento o Delphi irá fazer o restante automaticamente e quando terminar, lhe informará que o componente TShockwaveFlash foi instalado com sucesso.

Para finalizar salve e feche o projeto que foi aberto onde contém a instalação do seu novo controle ActiveX. Observe que agora ele já se encontra presente na palheta ActiveX (veja em seu Delphi).

OBSERVAÇÃO: Esse procedimento só irá funcionar se você tiver o Flash instalado em sua máquina.

Copie o arquivo swflash.ocx, que pode ser encontrado no diretório c:\windows\system\macromed\flash para o diretório do seu projeto. Copie também o arquivo "arquivo.swf" que você irá exibir em sua aplicação para o mesmo diretório.

Teremos agora que criar os arquivos de recursos para que o Delphi possa interpretar os códigos do arquivo flash (.swf). Para criar o primeiro, abra o bloco de notas e insira essas duas linhas de comando abaixo:

SHOCKWAVEFILE RCDATA arquivo.swf 
SHOCKWAVEOCX RCDATA swflash.ocx 

Onde arquivo é o nome de sua apresentação em flash (.swf). Salve o arquivo no mesmo diretório do seu projeto com o nome flash.rc. 

Para criar o segundo arquivo você deve abrir o Prompt do Ms-Dos e digitar a seguinte linha de comando:

"Brcc32 -r -32 c:\Diretorio\Flash.rc" 

Onde "c:\Diretorio\Flash.rc" é o diretório de seu projeto. Ao executar a linha de comando acima um arquivo de nome "flash.res" será criado no diretório de sua aplicação. Após isso nós podemos retornar ao Delphi.

Insira um componente TShockwaveFlash no form,redimensione de acordo com a sua necessidade, porém não preencha a propriedade "movie" , pois faremos isso por linha de programação.

A Unit utilizada pelo nosso componente é a ShockwaveFlashObjects_TLB, porém você não precisa se preocupar em colocá-la na sessão uses porque ela é incorporada automaticamente. 

No Evento OnCreate do formulário insira o seguinte código:

procedure TfrmMain.FormCreate(Sender: TObject);
var 
SystemDir : array[0..MAX_PATH] of Char; 
SWFDir, AppDir: String; 
Fres: TResourceStream; 
Ffile: TFileStream;
begin
GetSystemDirectory(@SystemDir,MAX_PATH);
SWFDir := SystemDir+'\macromed\flash\'; 
GetDir(0,AppDir);
if fileexists(SWFDir+'swflash.ocx')=false then 
begin 
{$i-}
MkDir(SystemDir+'\macromed'); 
MKDir(SystemDir+'\macromed\flash'); 
{$i+} 
Fres := TResourceStream.Create(0,'SHOCKWAVEOCX',RT_RCDATA); 
Ffile := TFileStream.Create(SWFDir+'swflash.ocx',fmCreate); 
try
Ffile.CopyFrom(Fres,Fres.Size);
finally
Fres.Free;
Ffile.Free;
end;
Winexec(PChar('regsvr32 /s'+SWFDir+'swflash.ocx'),SW_HIDE);
end; 
Fres := TResourceStream.Create(0,'SHOCKWAVEFILE',RT_RCDATA);
Ffile := TFileStream.Create('ramoscomedy.swf',fmCreate);
Try
Ffile.CopyFrom(Fres,Fres.Size);
Fres.Free;
Finally
Ffile.Free;
end;
ShockwaveFlash1.Movie := AppDir+'\ramoscomedy.swf';
end;

Explicando o código: 

Primeiramente declaramos as variáveis que serão necessárias adiante. As três primeiras linhas após o "begin" pegam o diretório de onde os arquivos estão e prenchem as devidas variáveis.

O primeiro "if" checa para ver se o "swflash.ocx" está instalado. Caso não esteja ele fará a instalação automaticamente, através do comando "regsrv32".

Caso "swflash.ocx" já exista ele não entra no if e vai direto para a parte de descompactação do arquivo Shockwave, onde ele obtém as informações pelo arquivo de recurso que está no diretório do seu projeto.

E por último associamos o arquivo flash (.swf) a propriedade movie do TShockwaveFlash. 

Agora nossa aplicação está pronta, basta salvá-la e compilá-la. Execute e veja um arquivo flash rodando no form.

No mais, agora deixo com você explorar os outros recursos deste componente, e que a Força esteja com você!

 
Design by Wordpress Theme | Bloggerized by Free Blogger Templates | coupon codes