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
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
desta 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 terminar 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 à 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.