Arquivo de Recursos. Ql é a vantagem em usar?

Delphi

30/03/2005

Desenvolvi um sistema q possui um interface montada em corel onde o mesmo possue umas 30 telas diferentes.....ao inves de colocar as imagens dentro dos componentes de imagem eu as coloquei em uma pasta para naum deixar o executavel muito pesado so q ae surgiu um problema....qndo eu fosse instalar este sistema em um cliente eu teria q colocar uma pasta com as imagens junto com o executavel.....o q eu naum acho muito legal......pois o cliente iria ver as minha telas todas....sabendo entaum como as desenvolvi e até mesmo copiar as telas sem dificuldade alguma.....entaum resolvi achar uma maneira diferente....coloquei em um arquivo.res pensando q o mesmo seria carregado na hora em q o sistema fosse executado...mas naum é bem assim.....o arquivo fica embutido dentro do executavel....oq naum alivia em nada o peso do meu executavel.....e tambem naum me serviria para deixar o sistema dinamico....pois é compilado junto com executavel onde seria necessário uma recompilcação para alterar o mesmo.....
bem c eu estiver errado me corrijam por favor.....

agora a duvida....
Para q serve um arquivo de recurso?
Ql saum as vantagens em usar?
Ql seria a melhor forma de fazer com q um sistema com imagens fique mais leve?

muito obrigado pela atenção....
estarei no aguardo ancioso.....


Profjohnny

Profjohnny

Curtidas 0

Respostas

Gandalf.nho

Gandalf.nho

30/03/2005

Em vez de compilar as imagens junto com seu executável, use o arquivo de recursos e crie uma DLL com ele. Depois basta alterar os códigos para o sistema carregar as imagens à partir da DLL


GOSTEI 0
Massuda

Massuda

30/03/2005

Sobre o que a Gandalf.nho escreveu... dê uma olhada no artigo [url=http://delphi.about.com/library/weekly/aa010405a.htm]Creating and using a resource only DLL with Delphi[/url] do site [url=http://delphi.about.com/]delphi.about.com[/url] para ver como implementar e usar uma DLL contendo apenas resources.


GOSTEI 0
Rcsalvador

Rcsalvador

30/03/2005

A facilidade de se utilizar um arquivo .res aconteçe quando em um mesmo programa, vc acessa várias vezes a mesma imagem, como por exemplo, nos relatórios que imprimem o logotipo da empresa. Se vc incluir a imagem direto no componente, o seu arquivo .dfm ficará imenso e o executável tmb.

Uma sugestão para o seu problema.
Crie um arquivo tipado, com um registro definido conforme sua necessidade.
Ficaria +- assim:

// Declare um tipo próprio
type
TMeuRegistro = record
Id: Integer;
Titulo: String[50];
Imagem: TBitmap;
end;

// Na procedure para gravação use isso..
procedure Gravar;
var
mArquivo: File of TMeuRegistro;
mRegistro: TRegistro
begin

try
// Associe o arquivo ao tipo declarado
AssignFile(mArquivo, ´c:\teste.imagens´);
// Cria o arquivo, caso não exista
Rewrite(mArquivo);
// Carrega os campos do novo tipo
mRegistro.Id := 1;
mRegistro.Titulo := ´Primeira imagem´;
mRegistro.Imagem := Image1.Picture.Bitmap;
// Grava no arquivo
Write(mArquivo, mRegistro);
finally
// Fecha o registro
CloseFile(mArquivo);
end;

end;

// Na procedure para leitura...
procedure Ler;
var
mArquivo: File of TMeuRegistro;
mRegistro: TRegistro
begin

try
// Associe o arquivo ao tipo declarado
AssignFile(mArquivo, ´c:\teste.imagens´);
// Abre o arquivo já existente
Reset(mArquivo);
// Lê o arquivo
Read(mArquivo, mRegistro);
// Recupera as informações do registro
lblId.Caption := IntToStr(mRegistro.Id);
lblNome.Caption := mRegistro.Titulo;
Image2.Picture.Bitmap := mRegistro.Imagem;
finally
// Fecha o registro
CloseFile(mArquivo);
end;

end;

Para isso funcionar, talvez vc tenha que criar um programa para gravar
as imagens no arquivo.
Se vc utilizar vários registros dentro deste arquivo, talvez utilizar o Read e Write não funcionem, então vc deverá utilizar alguma coisa parecida com BlockRead e BlockWrite.
Dê uma olhada no help sobre o tópico: ´IO routines´.


GOSTEI 0
Michael

Michael

30/03/2005

Olá colega rcsalvador!

Vc já testou o código acima? Até onde eu sei vc não pode passar um objeto, no caso, TBitmap, para um registro em um arquivo tipado. Fiquei curioso agora.

[]´s


GOSTEI 0
Rcsalvador

Rcsalvador

30/03/2005

Caro Michel,

Também achava que não funcionaria, mas eu fiz o teste e realmente o programa foi compilado sem erros e registro foi lido e gravado sem problemas.
Apenas fiquei intrigado pelo fato de um objeto TBitmap ter um tamanho variável. Como o Delphi controla isso, desconheço.
Com esse código, talvez possa surgir alguma dificuldade quando se grava/lê multiplos registros no arquivo tipado, pois o teste que fiz eu li/gravei apenas um registro.


GOSTEI 0
POSTAR