Buscar

Fundindo arquivos ao executável

nome

Wiliam Zacarias

Colunista ainda sem descrição. Caro colunista, por favor envie-nos sua descrição.

Fundindo Arquivos ao Executável

 

Um recurso muito interessante que a ferramenta Delphi possibilita aos desenvolvedores é a de embutir arquivos (de diversas extenções) ao executável gerado.

Esta técnica consiste em gerar um "Arquivo de Recurso" (.RES), o qual será referenciado no código fonte através de uma diretiva de programação, que orienta o compilador a já anexar ao executável o arquivo escolhido, lembrando que para que o arquivo escolhido seja embutido no executável, antes será necessário "transformá-lo" num arquivo ".RES" através de um compilador da Borland que roda em modo MS-DOS, e que é encontrado no diretório "BIN" do caminho onde foi instalado o Delphi.

 

Vamos à prática:

 

* Transformação de um arquivo para ser utilizado pelo Delphi

 

 

           Para o nosso exemplo vamos utilizar um arquivo de extenção .JPG, o qual neste exemplo
   vamos chamar de IMAGEM.JPG, conforme segue abaixo:

 

   - Através do MS-DOS, localize o caminho do arquivo “.JPG”, neste exemplo: "c:\recurso";

 

   - Crie um Arquivo Texto no formato “.RC” no mesmo diretório onde se encontra a imagem, e 
     inclua a linha abaixo:        

    IMAGEMJPG JPGFILE C:\RECURSO\IMAGEM.JPG (o primeiro parâmetro indica o rótulo para o
    nosso arquivo de imagem que iremos utilizar posteriormente em nossa implementação, o 
    segundo indica o tipo de arquivo que será passado ao compilador para a geração do
    arquivo .RES, e o terceiro indica o caminho para o arquivo que será buscado pelo compilador);

   - Como já foi citado, o compilador que usaremos estará no diretório BIN gerado na instalação do
     Delphi, todavia, será necessário que o nosso arquivo “.RC” esteja no mesmo diretório deste
     compilador (ou vice e versa). Podemos neste caso utilizar o comando PATH do MS-DOS para
     criar um ponteiro que apontará para o executável do compilador (lembrando que ainda estamos
     no diretório "C:\RECURSO"). Desta forma, utilize "PATH C:\ARQUIVOS DE
     PROGRAMA\...\DELPHI?\BIN", e em seguida execute o compilador passando como parâmetro
     a nossa imagem: "BRCC32 IMAGEM.JPG". Note que foi gerado um arquivo “.RES” em nosso
     diretório.

       Agora que já temos nosso aquivo ”.RES” que pode enfim ser interpretado pelo compilador do  
   Delphi, vamos às implementações:

   - Crie uma nova aplicação no delphi, e no Arquivo de Projeto ".DPR", logo abaixo da diretiva de
     programação {$R *.res}, inclua: {$R IMAGEM.RES};

   - Pronto, assim que o nosso projeto for compilado, já teremos a nossa imagem fundida ao
     executável.

* Extraindo o arquivo do executável

       Para o nosso exemplo, estaremos extraindo o arquivo de imagem assim que o programa for
   executado, porisso, todas as implementações serão feitas no nosso Arquivo de Projeto. Para  
   tanto, criaremos um Procedimento que será responsável por esta operação. Conforme abaixo:

  Procedure Extrai_imagem;
  Var PathToSave : String;
        Res : TResourceStream;//Classe específica  do Delphi
                              //para manipulação de recursos
  Begin
    PathToSave := 'C:\RECURSO\IMAGEM.JPG';  //Caminho para extração
    If not FileExists(PathToSave) Then
    Begin
      Res := TResourceStream.Create(Hinstance, 'IMAGEMJPG', 'JPGFILE');
      //extrai a imagem e armazena na memória caso não exista
      Try
       Res.SavetoFile(PathToSave);//Salva imagem no caminho especificado
      Finally
       Res.Free;
      End;
    End;
  End; 


      Pronto, nossa imagem será plenamente extraída para o caminho especificado para a  
  variável "PathToSave". Vejamos então como ficaria o nosso código fonte:

  program recurso;
  uses
    Forms, Windows, Sysutils, dialogs, classes,
    Unit1 in 'Unit1.pas' {Form1};
 

  {$R *.res}
  {$R IMAGEM.RES}
 

  Procedure Extrai_imagem;
  Var PathToSave : String;
        Res : TResourceStream;
  Begin
    PathToSave := 'C:\RECURSO\IMAGEM.JPG';
    If not FileExists(PathToSave) Then
    Begin
      Res := TResourceStream.Create(Hinstance, 'IMAGEMJPG', 'JPGFILE'); 
      Try
       Res.SavetoFile(PathToSave);
      Finally
       Res.Free;
      End;
    End;
  End; 


  begin

    ShowMessage('Extraindo o arquivo IMAGEM.JPG');
    Extrai_imagem;
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end.

       É claro que este é apenas um exemplo simples de fusão e extração de arquivo de um executável, mas é base para uma gama enorme de idéias para a utilização no seu projeto, por exemplo, pense que você poderia aproveitar este recurso para anexar DLL's e Aquivos Texto de configuração e parâmetros para o seu sistema.


Espero ter colaborado!

     -(Wiliam Zacarias) -
wiliamzacarias@delphi.eti.br

Publicidade

Vote no artigo




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


Detalhes do artigo

Categoria: Outros
Adicionado dia: 13/08/05
Por: Wiliam Zacarias
Visualizado: 47847 vezes

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