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 a vontade para desenvolver da maneira que preferir, porém, 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ão na 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, 3 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.

Dentro desta pasta coloque as 3 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, irei 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

   TImagem = ( tiConfirmar, tiCancelar, tiSair );

 

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 dessa forma:

 

const

   TArrayImagem : Array[TImagem] of String = ( '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;

begin

   Result := TArrayImagem[ campo ];

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 terminarmos nosso aplicativo.

 

Vamos criar, agora, uma procedure que associe a imagem ao componente informado.

 

Segue abaixo:

 

procedure CarregaImagem( Componente : TControl ; Imagem : TImagem );

var

   DLL : THandle;

   BMP : TBitMap;

   ResourceStream : TResourceStream;

begin

 

   try

   BMP := TBitmap.Create();

   DLL := LoadLibrary(PChar(C_DLL));

   ResourceStream := TResourceStream.Create(DLL, RetFigura( Imagem ) , RT_RCDATA);

   BMP.LoadFromStream( ResourceStream );

   if (Componente is TSpeedButton) then

      (Componente as TSpeedButton).Glyph.Assign( BMP )

         else if (Componente is TBitBtn) then

            (Componente as TBitBtn).Glyph.Assign( BMP )

               else if ( Componente is TImage ) then

                  (Componente as TImage).Picture.Assign( BMP );

   finally

      FreeANDNIL( BMP );

      FreeLibrary(DLL);

      FreeAndNil(ResourceStream);

      end;

 

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

CarregaImagem( bitConfirmar, tiConfirmar );

CarregaImagem( speConfirmar, tiConfirmar );

CarregaImagem( imgConfirmar, tiConfirmar );

 

//Para os componentes de cancelamento

CarregaImagem( bitCancelar, tiCancelar );

CarregaImagem( speCancelar, tiCancelar );

CarregaImagem( imgCancelar, tiCancelar );

 

//Para os componentes de saída

CarregaImagem( bitSair, tiSair );

CarregaImagem( speSair, tiSair );

CarregaImagem( imgSair, tiSair );

 

Execute o programa.

 

O resultado deverá ser semelhante a 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 dicas uma é configurar os botões com Tag’s e atribuir uma imagem dependendo da tag do botão. Usando-se um loop.

 

Lembrando de sempre que adicionarem uma imagem ao arquivo .rc a DLL deverá ser compilada e distribuída novamente.

E não esquecer 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   

 

Fernando Tremonti

 

Abraços