¿Te has preguntado cómo utiliza Delphi los archivos de recursos?

Desde mapas de bits, iconos, cursores y tablas de cadenas, todos los programas de Windows utilizan recursos. Los recursos son aquellos elementos de un programa que soportan el programa pero que no son código ejecutable. En este artículo, repasaremos algunos ejemplos del uso de mapas de bits, iconos y cursores de recursos.

 

Ubicación de los recursos

Colocar recursos en el archivo.exe tiene dos ventajas principales:

 

  1. Se puede acceder a los recursos más rápidamente porque lleva menos tiempo localizar un recurso en el archivo ejecutable que cargarlo desde un archivo de disco.
  2. El archivo de programa y los recursos pueden estar contenidos en una sola unidad (el archivo.exe) sin necesidad de muchos archivos de soporte.

El editor de imágenes

En primer lugar, necesitamos crear un archivo de recursos. La extensión por defecto para los archivos fuente es.RES. Los archivos de recursos se pueden crear con el Editor de Imágenes de Delphi.

 

Puede nombrar el archivo de recursos como quiera, siempre y cuando tenga la extensión ".RES" y el nombre del archivo sin la extensión no sea el mismo que el de cualquier unidad o nombre de archivo del proyecto. Esto es importante, porque, por defecto, cada proyecto Delphi que compila en una aplicación tiene un archivo de recursos con el mismo nombre que el archivo de proyecto, pero con la extensión ".RES". Es mejor guardar el archivo en el mismo directorio que el archivo de proyecto.

 

Inclusión de recursos en las aplicaciones

Para acceder a nuestro propio archivo de recursos, tenemos que decirle a Delphi que vincule nuestro archivo de recursos con nuestra aplicación. Esto se logra añadiendo una directiva del compilador al código fuente. Esta directiva debe seguir inmediatamente a la directiva de forma, como la siguiente:

{$R *.DFM}

{$R DPABOUT.RES}

 

No borre accidentalmente la parte {$R *.DFM}, ya que esta es la línea de código que le dice a Delphi que enlace en la parte visual del formulario. Cuando elige mapas de bits para botones de velocidad, componentes de imagen o componentes de botón, Delphi incluye el archivo de mapa de bits que ha elegido como parte del recurso del formulario. Delphi aísla los elementos de la interfaz de usuario en el archivo.DFM.

 

Para utilizar el recurso, debe realizar algunas llamadas a la API de Windows. Los mapas de bits, cursores e iconos almacenados en archivos RES pueden recuperarse utilizando las funciones de la API LoadBitmap, LoadCursor y LoadIcon respectivamente.

Fotos en los recursos

El primer ejemplo muestra cómo cargar un mapa de bits almacenado como recurso y mostrarlo en un componente TImage.

 

procedure TfrMain.btnCanvasPic(Sender: TObject);

var bBitmap : TBitmap;

begin

bBitmap := TBitmap.Create;

try

bBitmap.Handle := LoadBitmap(hInstance, 'ATHENA');

Image1.Width := bBitmap.Width;

Image1.Height := bBitmap.Height;

Image1.Canvas.Draw(0,0,bBitmap);

finally

bBitmap.Free;

end;

end;

 

Nota: Si el mapa de bits que se va a cargar no está en el archivo de recursos, el programa seguirá ejecutándose, simplemente no mostrará el mapa de bits. Esta situación se puede evitar probando si el bBitmap.handle es cero después de una llamada a LoadBitmap() y tomando las medidas apropiadas. La parte try/finally en el código anterior no resuelve este problema, sólo está aquí para asegurarse de que el bBitmap se destruye y su memoria asociada se libera.

Otra forma que podemos usar para mostrar un mapa de bits de un recurso es la siguiente:

 

procedure TfrMain.btnLoadPicClick(Sender: TObject);

begin

Image1.Picture.Bitmap.

LoadFromResourceName(hInstance,'EARTH');

end;

 

Cursores en recursos

Screen.Cursors[] es un conjunto de cursores suministrados por Delphi. Usando archivos fuente, podemos añadir cursores personalizados a la propiedad Cursores. A menos que deseemos reemplazar cualquiera de los valores predeterminados, la mejor estrategia es utilizar números de cursor que empiecen por 1.

procedure TfrMain.btnUseCursorClick(Sender: TObject);

const NewCursor = 1;

begin

Screen.Cursors[NewCursor] :=

LoadCursor(hInstance,'CURHAND');

Image1.Cursor := NewCursor;

end;

 

Iconos en los recursos

Si nos fijamos en la configuración del Proyecto-Opciones-Aplicación de Delphi, podemos encontrar que Delphi proporciona el icono por defecto para un proyecto. Este icono representa la aplicación en el Explorador de Windows y cuando la aplicación está minimizada. Podemos cambiar esto fácilmente haciendo clic en el botón'Cargar Icono'.

 

Si queremos, por ejemplo, animar el icono del programa cuando el programa está minimizado, entonces el siguiente código hará el trabajo.

Para la animación, necesitamos un componente TTimer en un formulario. El código carga dos iconos del archivo de recursos en una matriz de objetos TIcon; esta matriz necesita ser declarada en la parte pública del formulario principal. También necesitaremos NrIco, que es una variable de tipo entero, declarada en la parte pública. El NrIco se utiliza para hacer un seguimiento del siguiente icono a mostrar.

 

public

nrIco : Integer;

MinIcon : array[0..1] of TIcon;

...

procedure TfrMain.FormCreate(Sender: TObject);

begin

MinIcon[0]:=TIcon.Create;

MinIcon[1]:=TIcon.Create;

MinIcon[0].Handle:=LoadIcon(hInstance,'ICOOK');

MinIcon[1].Handle:=LoadIcon(hInstance,'ICOFOLD');

NrIco:=0;

Timer1.Interval:=200;

end;

...

procedure TfrMain.Timer1Timer(Sender: TObject);

begin

if IsIconic(Application.Handle) then begin

NrIco:=(NrIco+1) mod 2;

Application.Icon:=MinIcon[NrIco];

end;

end;

...

procedure TfrMain.FormDestroy(Sender: TObject);

begin

MinIcon[0].Free;

MinIcon[1].Free;

end;

En el gestor de eventos de Timer1.OnTimer se utiliza la función IsMinimized para ver si necesitamos o no animar nuestro icono principal. Una mejor manera de lograr esto sería capturar los botones de maximizar/minimizar y no actuar.

 

Palabras finales

Podemos colocar cualquier cosa (bueno, no todo) en los archivos fuente. Este artículo le ha mostrado cómo usar los recursos para usar/visualizar el mapa de bits, el cursor o un icono en su aplicación Delphi.

 

Nota: Cuando guardamos un proyecto Delphi en el disco, Delphi crea automáticamente un archivo.RES que tiene el mismo nombre que el proyecto (si no hay nada más, el icono principal del proyecto está dentro). Aunque podemos alterar este archivo de recursos, esto no es aconsejable.

(0 votes)