Artigo Clube Delphi Edição 7- Criando Arquivos de Recursos no Delphi

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (2)  (0)

Artigo da Revista Clube Delphi Edição 7.

Esse artigo faz parte da revista Clube Delphi edição 7. Clique aqui para ler todos os artigos desta edição


Atenção: por essa edição ser muito antiga não há arquivo PDF para download. Os artigos dessa edição estão disponíveis somente através do formato HTML. 

Criando Arquivos de Recursos no Delphi

 

Quando você insere imagem em sua aplicação, através de um componente Image, normalmente atribui à propriedade Picture o nome do arquivo que contém a imagem. Neste caso, a imagem é compilada dentro de seu executável.

Se você quiser mudar a imagem, deverá modificar o arquivo de sua aplicação, e recompilá-la. Para evitar isto, você pode colocar a imagem utilizada em um arquivo de recursos. Este arquivo, com extensão .RES, é compilado junto com seu programa. Se precisar modificar a imagem, basta modificá-la no arquivo de recursos, sem mexer na sua aplicação.

Entre os recursos que uma aplicação contém podemos citar: bitmaps, ícones, menus, cursores, caixas de diálogo, tabelas de strings.

Quando você compila sua aplicação, o Delphi sempre cria um arquivo de recursos com o mesmo nome de seu projeto. Este arquivo contém o ícone da aplicação.

No arquivo de projeto da aplicação (.DPR), aparece a diretiva:

 

{$R *.RES}

 

Esta diretiva manda o Delphi encontrar e recuperar o arquivo de recurso .RES com o mesmo nome da aplicação corrente.

Este arquivo é criado e manipulado pelo Delphi, mas você pode criar um arquivo de recursos próprio, que você mesmo manipule.

 

Criando o Arquivo .RC

Para criar o arquivo de recursos, você inicialmente cria um arquivo com extensão .RC. Este arquivo é um arquivo texto (se for feito no Bloco de Notas, pode manter a extensão .TXT), no seguinte formato:

 

ID­_recurso    tipo_recurso arquivo_recurso

.                                  .                                    .

.                                  .                                    .

.                                  .                                    .

 

Onde tipo_de_recurso pode ser BITMAP, ICON, CURSOR, TEXT, MENU, DIALOG BOX, FONT ou STRINGTABLE.

 

Exemplo

Vamos criar um arquivo de recurso contendo um bitmap e um arquivo de texto. Para isso:

• entre no Bloco de Notas

• digite o seguinte texto:

 

 

• salve o arquivo com o nome MeusRec.txt.

Um arquivo de recursos contendo mensagens de erros seria parecido com:

 

 

 

STRINGTABLE

BEGIN

    ID1, “Mgs1”

    ID2, “Msg2”

    ID3, “Msg3”

END

 

Criando o Arquivo .RES

O arquivo .RC deve ser compilado, transformando-se em um arquivo .RES. Para compilá-lo, use o programa BRCC32.EXE (no diretório\Arquivos de Programas\Borland\DelphiX\Bin), no prompt do DOS.

 

Exemplo

Vamos compilar o arquivo MeusRec.Txt, feito anteriormente, transformando-o no arquivo MeusRec.RES.

Para isso:

• abra o prompt do DOS;

• vá para o diretório \Arquivos de Programas\Borland\Delphi X\Bin

• digite então (não esqueça de colocar o path para o arquivo MeusRec.txt):

brcc32 MeusRec.txt

• veja no Explorer que o arquivo MeusRec.RES é criado

 

Anexando o Arquivo de Recurso na Aplicação

Para anexar o arquivo de recursos a sua aplicação, você deve digitar, após a linha {$R *.DFM} da unit que usará o recurso:

 

{$R <NomeArqRecurso>.RES}

 

Ligando os Recursos a Aplicação

 

Usando BitMaps

Para ligar um recurso do tipo bitmap do seu arquivo de recursos à propriedade Picture de um componente Image, utilize a função da API do Windows LoadBitMap:

 

LoadBitmap(Instancia: Thandle;

NomeBitmap: Pchar): Hbitmap;

 

Onde Instancia é o handle da aplicação (armazenado na variável hInstance que o Delphi cria sempre que a aplicação é executada), e NomeBitmap é o nome do bitmap. A função LoadBitmap retorna um handle para o bitmap.

Para associar este handle à propriedade Picture do componente Image, é preciso lembrar que esta propriedade é na realidade um objeto Tpicture, que possui a propriedade BitMap, que representa o bitmap associado à Picture. A propriedade BitMap, por sua vez, é um objeto TbitMap que possui a propriedade Handle, que representa o handle para o bitmap usado em Picture. Portanto, para ligarmos o bitmap do arquivo de recursos à propriedade Picture do componente Image1, faríamos:

 

Image1.Picture.Bitmap.Handle:=

LoadBitMap(hInstance, ‘Quimica’);

 

Exemplo

Vamos criar uma aplicação em Delphi que use o bitmap Bolhas.bmp, do nosso arquivo de recursos, em um componente Image.

Para isso:

• inicie uma aplicação

• insira no formulário um componente Image:

• salve a unit e o projeto na mesma pasta onde está o arquivo de recursos MeusRec.RES;

• passe para a unit. Após a linha {$R *.DFM}, digite:

 

{$R MeusRec.RES}

 

• no evento OnCreate do formulário, insira o seguinte código:

 

procedure Tform1.FormCreate

(Sender: Tobject);

begin

Image1.Picture.Bitmap.Handle:=

LoadBitMap(hInstance,

‘Quimica’);

 

end;

 

• salve aplicação e execute-a. O bitmap Bolhas.bmp é mostrado no componente Image;

 

Image com bmp do arquivo de recursos

 

Usando Ícones ou Cursores

Além da função LoadBitMap, a API do Windows oferece as funções LoadIcon e LoadCursor, que funcionam de forma idêntica a LoadBitMap.

 

Usando Strings

Para ligar uma string de um arquivo de recurso a um componente, utilizamos a função da API do Windows LoadString:

 

LoadString(Instance: Thandle; ID:

Word; Buffer: Pchar; BufferNax:

Integer): Integer;

 

Onde Instancia é o handle para a aplicação, ID é identificador para a string no arquivo de recursos, Buffer é um espaço na memória para armazenar a string, e BufferMax é o tamanho máximo da string a ser armazenada no buffer.

 

Exemplo

Vamos criar uma aplicação contendo um botão que, ao ser clicado, mostra uma mensagem de um arquivo de recursos. Para isso:

 

• crie um arquivo de recursos de nome MExcecoes, que contenha as mensagens de exceção. Veja o arquivo criado no Bloco de Notas, e salve-o com o nome MExcecoes.txt:

 

 

gere  o arquivo MExcecoes.RES, usando o utilitário BRCC32.exe;

• inicie então uma nova aplicação no Delphi;

• insira um botão no formulário;

• salve o projeto na mesma pasta do arquivo de recursos Mexcecoes.RES;

• passe para a unit. Após a linha {$R *.DFM}, digite:

 

{$R MExcecoes.RES}

 

• na cláusula type da seção interface, declare a exceção EErrorOne, que será usada posteriormente, e a função GetError, que será criada:

 

type

EerrorOne = class(Exception);

Tform1 = class(Tform)

Button1: Tbutton;

procedure Button1Click(Sender:

Tobject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

function GetError(ID: Integer):string;

 

• crie uma função que associe as mensagens do arquivo de recursos a uma string (não esqueça de declarar esta função):

 

function GetError(ID: Integer):

string;

var

S: array[0..150] of Char;

begin

LoadString(Hinstance, ID, S,

150);

Result := StrPas(S);

end;

 

• no evento Click do botão, vamos ligar a exceção gerada quando apertamos Button1 à mensagem número 1 de nosso arquivo de recursos:

 

procedure Tform1.Button1Click(Sender: Tobject);

begin

  raise

     EerrorOne.Create(GetError(1));

end;

 

• salve a aplicação e execute-a Clique no botão. A seguinte mensagem será exibida:

 

 

Usando Menus

Para ligar um menu do recurso a um item de menu de seu aplicativo, utilize a função LoadMenu, da API do Windows:

 

LoadMenu(Instancia: Thandle;

NomeMenu: Pchar): Hmenu;

 

Onde Instancia é o handle da aplicação, e NomeMenu é o nome do menu no arquivo de recursos. A função retorna um handle para o menu.

 

Internacionalizando o Aplicativo

Se você planeja exportar seu aplicativo para outros países, deve pensar seriamente em criar um arquivo .RES com todos os recursos utilizados. Isto porque, ao vender o aplicativo para um determinado país, basta traduzir as strings, os menus e mensagens do arquivo de recursos (e talvez mudar os ícones, para se aproximarem da realidade do país), sem modificar o aplicativo.

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?