Back-End

10 set, 2009

Imagem do executável em DLL

Publicidade

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.