Como o Delphi usa arquivos de recursos

De bitmaps a ícones, cursores e tabelas de strings, todo programa do Windows usa recursos. Recursos são os elementos de um programa que oferecem suporte ao programa, mas não são código executável. Neste artigo, examinaremos alguns exemplos do uso de bitmaps, ícones e cursores a partir de recursos.

Localização dos Recursos

A colocação de recursos no arquivo .exe possui dois principais vantagens:

  • Os recursos podem ser acessados ​​mais rapidamente porque leva menos tempo para localizar um recurso no arquivo executável do que para carregá-lo de um arquivo de disco.
  • O arquivo e os recursos do programa podem estar em uma única unidade (o arquivo .exe) sem a necessidade de muitos arquivos de suporte.

O Editor de Imagens

Primeiro de tudo, precisamos criar um arquivo de recurso. A extensão padrão para arquivos de recursos é.RES. Arquivos de recursos podem ser criados com o Image Editor do Delphi.

Você pode nomear o arquivo de recurso como desejar, desde que ele tenha a extensão ".RES" e o nome do arquivo sem a extensão não seja o mesmo que qualquer nome de arquivo de unidade ou projeto. Isso é importante porque, por padrão, cada

instagram viewer
Projeto Delphi que é compilado em um aplicativo tem um arquivo de recurso com o mesmo nome que o arquivo de projeto, mas com a extensão ".RES". É melhor salvar o arquivo no mesmo diretório que o arquivo do projeto.

Incluindo recursos em aplicativos

Para acessar nosso próprio arquivo de recursos, precisamos dizer ao Delphi para vincular nosso arquivo de recursos à nossa aplicação. Isso é feito adicionando uma diretiva de compilador ao código-fonte. Esta diretiva precisa seguir imediatamente a diretiva de formulário, da seguinte maneira:

{$ R * .DFM} 
{$ R DPABOUT.RES}

Não apague acidentalmente a parte {$ R * .DFM}, pois esta é a linha de código que instrui o Delphi a vincular na parte visual do formulário. Quando você escolhe bitmaps para botões de velocidade, componentes de imagem ou componentes de botão, o Delphi inclui o arquivo de bitmap que você escolheu como parte do recurso do formulário. O Delphi isola os elementos da interface do usuário no arquivo .DFM.

Para realmente usar o recurso, você deve fazer alguns API do Windows chamadas. Bitmaps, cursores e ícones armazenados nos arquivos RES podem ser recuperados usando as funções da API LoadBitmap, LoadCursor, e LoadIcon respectivamente.

Imagens em Recursos

O primeiro exemplo mostra como carregar um bitmap armazenado como um recurso e exibi-lo em um TImage componente.

procedimento TfrMain.btnCanvasPic (Remetente: TObject);
var bBitmap: TBitmap;
início
bBitmap: = TBitmap. Crio;
experimentar
bBitmap. Identificador: = LoadBitmap (hInstance, 'ATHENA');
Image1.Width: = bBitmap. Largura;
Image1.Height: = bBitmap. Altura;
Image1.Canvas. Draw (0,0, bBitmap);
finalmente
bBitmap. Livre;
fim;
fim;

Nota: Se o bitmap a ser carregado não estiver no arquivo de recurso, o programa ainda será executado, mas não exibirá o bitmap. Esta situação pode ser evitada testando para verificar se o bBitmap. Lidar com é zero após uma chamada para LoadBitmap () e tomando as medidas apropriadas. o tente / finalmente Como parte do código anterior não resolve esse problema, é só aqui para garantir que o bBitmap seja destruído e a memória associada seja liberada.

Outra maneira que podemos usar para exibir um bitmap de um recurso é a seguinte:

procedimento TfrMain.btnLoadPicClick (Remetente: TObject);
início
Imagem1. Bitmap.
LoadFromResourceName (hInstance, 'EARTH');
fim;

Cursores em Recursos

Tela. Cursores [] é um matriz de cursores fornecidos pela Delphi. Usando arquivos de recursos, podemos adicionar cursores personalizados à propriedade Cursors. A menos que desejemos substituir qualquer um dos padrões, a melhor estratégia é usar os números do cursor a partir de 1.

procedimento TfrMain.btnUseCursorClick (Remetente: TObject);
const NewCursor = 1;
início
Tela. Cursores [NewCursor]: =
LoadCursor (hInstance, 'CURHAND');
Image1.Cursor: = NewCursor;
fim;

Ícones nos Recursos

Se olharmos para o Delphi Projeto-Opções-Aplicação configurações, podemos descobrir que o Delphi fornece o ícone padrão para um projeto. Este ícone representa o aplicativo no Windows Explorer e quando o aplicativo é minimizado. Podemos mudar isso facilmente, clicando no botão 'Carregar ícone'.

Se queremos, por exemplo, animar o ícone do programa quando o programa é minimizado, o código a seguir fará o trabalho.

Para a animação, precisamos de um TTimer componente em um formulário. O código carrega dois ícones do arquivo de recursos em uma matriz de TIcon objetos; essa matriz precisa ser declarada na parte pública do formulário principal. Também vamos precisar NrIco, que é um tipo Inteiro variável, declarado no público parte. o NrIco é usado para acompanhar o próximo ícone a ser exibido.

público
nrIco: Inteiro;
MinIcon: array [0..1] de TIcon;
...
procedimento TfrMain. FormCreate (Remetente: TObject);
início
MinIcon [0]: = TIcon. Crio;
MinIcon [1]: = TIcon. Crio;
MinIcon [0] .Handle: = LoadIcon (hInstance, 'ICOOK');
MinIcon [1] .Handle: = LoadIcon (hInstance, 'ICOFOLD');
NrIco: = 0;
Timer1.Interval: = 200;
fim;
...
procedimento TfrMain. Timer1Timer (Remetente: TObject);
beginif IsIconic (aplicativo. Lidar com) entãoinício
NrIco: = (NrIco + 1) mod 2;
Inscrição. Ícone: = MinIcon [NrIco];
fim;
fim;
...
procedimento TfrMain. FormDestroy (Remetente: TObject);
início
MinIcon [0]. Livre;
MinIcon [1] .Free;
fim;

No Timer1.OnTimer manipulador de eventos, IsMinimized A função é usada para ver se precisamos animar nosso ícone principal ou não. Uma maneira melhor de conseguir isso seria capturar os botões de maximizar / minimizar e agir.

Palavras Finais

Podemos colocar qualquer coisa (bem, não tudo) em arquivos de recursos. Este artigo mostrou como usar recursos para usar / exibir bitmap, cursor ou um ícone em seu aplicativo Delphi.

Nota: Quando salvamos um projeto Delphi no disco, o Delphi cria automaticamente um arquivo .RES que tem o mesmo nome que o projeto (se nada mais, o ícone principal do projeto está dentro). Embora possamos alterar esse arquivo de recurso, isso não é aconselhável.

instagram story viewer