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