Galera delphiana… é com
muito prazer que escrevo este artigo. Iremos falar sobre imagens de
TSpeedButton, TBitBtn e TImage em
uma DLL que acompanhará nosso projeto. Imagens no projeto, além de
deixarem nosso .exe maior dão um certo trabalho na hora de associar.
Primeiramente, vamos falar
sobre o escopo do projeto.
Vale lembrar que você pode ficar à vontade para
desenvolver da maneira que preferir. Escolhi esta forma por considerar
mais fácil no manuseio do dia-a-dia.
Precisaremos:
- de um tipo (definido por
nós) para a escolha de determinada imagem. - outro tipo (string) para
associação a imagem definida por nós. - uma função que faça essa
associação. - uma função que atribua a
imagem ao botão.
Mãos à massa!!!
Vamos começar desenvolvendo
um projeto em branco.
Para isso abra o Delphi. File à New à Application;
Insira:
- 3 TBitBtn( bitConfirmar, bitCancelar, bitSair );
- 3 TSpeedButton( speConfirmar,
speCancelar, speSair ); - 3 TImage( imgConfirmar,
imgCancelar, imgSair );
Deixe o formulário conforme
imagem a seguir:

Escolha, agora, três imagens BMP
que pra você represente Sair, Cancelar e Confirmar. No meu caso eu escolhi as 3
que costumo usar em meus projetos. Após a escolha das imagens,
vamos fazer nossa DLL.
Crie uma pasta no C com o
nome de Imagens_Projeto e coloque nela as
três imagens que selecionou para nosso programa. Renomeie estas imagens com os
nomes Cancelas.BMP, Confirmar.BMP e Sair.BMP.
É interessante criar a pasta e nomear as imagens conforme
o nome sugerido para seguir os procedimentos deste artigo.
Criando o Arquivo RC
Agora, abra o bloco de notas
e insira as linhas a seguir:
- Cancelar RCDATA “Cancelar.BMP”
- Confirmar RCDATA
“Confirmar.BMP” - Sair RCDATA
“Sair.BMP”

Salve este arquivo na pasta
criada “Imagens_Projeto” como “Imagem.RC”
Explicação simples, porém
necessária:
- A primeira coluna é
responsável pelo nome que nosso sistema irá referenciar no arquivo. - A coluna do meio é para
identificação. - A última coluna é a figura.
Criando o Arquivo RES
Para criação deste arquivo, abra o prompt de comando e
digite:
CD c:\Arquivos de
Programas\Borland\Delphi6\Bin //Dependendo da configuração de instalação
do Delphi
brcc32.exe
C:\Imagens_Projeto\Imagem.rc
Pronto!!! Nosso arquivo está gerado.
Criando a DLL
Este processo é muito
simples. Para criar a DLL, abra
novamente o Delphi. File à New à Other e escolha DLL Wizard. Localize a linha:
{$R *.res}Após esta linha insira a
sintaxe:
{$R Imagem.RES}Salve o projeto como DLL.
Compile o projeto na pasta
“Imagens_Projeto” e será criada a DLL de nome dll.dll.
Aplicando as imagens em nosso projeto
Volte ao nosso projeto
inicial.
Por se tratar de um projeto
bem simples e para fins de exemplificação, vou desenvolver tudo em uma única
Unit. Mas você deve e, por favor, faça, dividindo-as.
Vamos lá!!!
Abaixo de uses vamos criar nosso tipo de dados, conforme listagem abaixo:
type<br /> TImagem = ( tiConfirmar, tiCancelar, tiSair<br />);No código acima criamos o
tipo TImagem, podendo ser de 3 maneiras.
Abaixo do nosso tipo de dados
iremos criar uma constante, para a associação do nosso tipo de dados com a
referência da figura em nossa DLL. Faça-o
desta forma:
const<br /> TArrayImagem : Array[TImagem] of String = (<br />'Confirmar' , 'Cancelar' , 'Sair' );No código acima, fazemos a
referência ao nosso tipo de dados.
Vamos declarar mais uma
constante:
C_DLL = 'Dll.dll'Esta constante define o nome
da dll que o sistema irá buscar na mesma pasta que o aplicativo.
Não acaba por aí. Agora
devemos fazer uma função que retorne, conforme o tipo ( TImagem ), a string
referente ( TArrayImagem ).
Podemos fazer isso conforme o
código abaixo.
function RetFigura( campo : TImagem ) : String;<br />begin<br /> Result := TArrayImagem[ campo ];<br />end;Este código é muito
simples. Recebe o nosso tipo de dados e retorna a string referente ao tipo
informado.
Feito isso,
estamos próximos de terminar nosso aplicativo.
Vamos criar,
agora, uma procedure que associe a imagem ao componente informado. Segue abaixo:
procedure CarregaImagem( Componente : TControl ; Imagem : TImagem );<br /><br />var<br /><br /> DLL : THandle;<br /><br /> BMP : TBitMap;<br /><br /> ResourceStream : TResourceStream;<br /><br />begin<br /><br /><br /><br /> try<br /><br /> BMP := TBitmap.Create();<br /><br /> DLL := LoadLibrary(PChar(C_DLL));<br /><br /> ResourceStream := TResourceStream.Create(DLL, RetFigura( Imagem ) , RT_RCDATA);<br /><br /> BMP.LoadFromStream( ResourceStream );<br /><br /> if (Componente is TSpeedButton) then<br /><br /> (Componente as TSpeedButton).Glyph.Assign( BMP )<br /><br /> else if (Componente is TBitBtn) then<br /><br /> (Componente as TBitBtn).Glyph.Assign( BMP )<br /><br /> else if ( Componente is TImage ) then<br /><br /> (Componente as TImage).Picture.Assign( BMP );<br /><br /> finally<br /><br /> FreeANDNIL( BMP );<br /><br /> FreeLibrary(DLL);<br /><br /> FreeAndNil(ResourceStream);<br /><br /> end;<br /><br /><br /><br />end;No código acima carregamos
nossa DLL.
Associamos a imagem ao BitMap
criado, conforme função desenvolvida (RetFigura), e exibimos no componente,
seja ele TSpeedButton, TBitBtn ou TImage.
Pronto! Agora é só
associarmos as imagens aos nossos componentes.
No OnCreate do formulário
informe o código:
//Para os componentes de confirmação<br /><br />CarregaImagem( bitConfirmar, tiConfirmar );<br /><br />CarregaImagem( speConfirmar, tiConfirmar );<br /><br />CarregaImagem( imgConfirmar, tiConfirmar );<br /><br /><br /><br />//Para os componentes de cancelamento<br /><br />CarregaImagem( bitCancelar, tiCancelar );<br /><br />CarregaImagem( speCancelar, tiCancelar );<br /><br />CarregaImagem( imgCancelar, tiCancelar );<br /><br /><br /><br />//Para os componentes de saída<br /><br />CarregaImagem( bitSair, tiSair );<br /><br />CarregaImagem( speSair, tiSair );<br /><br />CarregaImagem( imgSair, tiSair ); Execute o programa.
O resultado deverá ser
semelhante à figura abaixo.

Conclusão
Bom, neste artigo aprendemos
a criar uma DLL com imagens e associar as imagens que estão contidas nessa DLL
a botões e imagens de nosso aplicativo.
Vale lembrar que este é um
artigo para exemplo, sendo assim, fica a seu critério desenvolver novas
funções, novas procedures e até mesmo alterar a forma de como desenvolvi.
Dentre milhares de dicas uma é configurar os botões com Tag’s e atribuir uma
imagem dependendo da tag do botão, usando um loop.
Lembrando que sempre que
adicionarem uma imagem ao arquivo .rc, a DLL deverá ser compilada e distribuída
novamente.
E não se esqueça de, ao
adicionar um tipo, fazer a sua referência nos arrays.
Fico por aqui, obrigado pela
atenção e espero que tenha gostado.
Qualquer dúvida ou sugestão é
só entrar em contato:
MSN: fernando_tremonti@hotmail.com
E-mail: fernando_tremonti@yahoo.com.br
Abraços.







