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:
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:
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);
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.RC". Note que foi gerado um arquivo “.RES” em nosso
diretório.
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.RC". 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:
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};
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.
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:
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;
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:
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};
uses
Forms, Windows, Sysutils, dialogs, classes,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
{$R IMAGEM.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;
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.
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.
Nenhum comentário:
Postar um comentário