Cómo Delphi usa archivos de recursos

Desde mapas de bits hasta iconos, cursores y tablas de cadenas, cada programa de Windows usa recursos. Recursos son aquellos elementos de un programa que lo admiten pero que no son código ejecutable. En este artículo, veremos algunos ejemplos del uso de mapas de bits, íconos y cursores de los recursos..

Ubicación de los recursos

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

  • 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.
  • El archivo de programa y los recursos pueden estar contenidos en una sola unidad (el archivo .exe) sin la necesidad de muchos archivos de soporte.

El editor de imágenes

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

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

Incluyendo recursos en 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 agregando una directiva de compilación al código fuente. Esta directiva debe seguir inmediatamente la directiva de formulario, 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 se vincule 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 eligió como parte del recurso del formulario. Delphi aísla los elementos de su interfaz de usuario en el archivo .DFM.

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

Imágenes en recursos

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

procedimiento TfrMain.btnCanvasPic (Remitente: TObject);
var bBitmap: TBitmap;
empezar
bBitmap: = TBitmap.Create;
tratar
bBitmap.Handle: = LoadBitmap (hInstance, 'ATHENA');
Image1.Width: = bBitmap.Width;
Image1.Height: = bBitmap.Height;
Image1.Canvas.Draw (0,0, bBitmap);
finalmente
bBitmap.Free;
final;
final;

Nota: Si el mapa de bits que se va a cargar no está en el archivo de recursos, el programa aún se ejecutará, simplemente no mostrará el mapa de bits. Esta situación se puede evitar probando para ver si el bBitmap.Handle es cero después de una llamada a LoadBitmap () y tomando los pasos apropiados. La parte de prueba / finalmente en el código anterior no resuelve este problema, solo está aquí para asegurarse de que bBitmap se destruya y se libere su memoria asociada.

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

procedimiento TfrMain.btnLoadPicClick (Remitente: TObject);
empezar
Image1.Picture.Bitmap.
LoadFromResourceName (hInstance, 'EARTH');
final;

Cursores en Recursos

Screen.Cursors [] es una serie de cursores suministrados por Delphi. Al usar archivos de recursos, podemos agregar cursores personalizados a la propiedad Cursores. A menos que deseemos reemplazar alguno de los valores predeterminados, la mejor estrategia es usar números de cursor a partir de 1.

procedimiento TfrMain.btnUseCursorClick (Remitente: TObject);
const NewCursor = 1;
empezar
Screen.Cursors [NewCursor]: =
LoadCursor (hInstance, 'CURHAND');
Image1.Cursor: = NewCursor;
final;

Íconos en Recursos

Si miramos a Delphi Proyecto-Opciones-Aplicación configuración, podemos encontrar que Delphi proporciona el icono predeterminado 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 ícono del programa cuando el programa está minimizado, entonces el siguiente código hará el trabajo.

Para la animación, necesitamos un TTimer componente en un formulario. El código carga dos íconos del archivo de recursos en una matriz de TIcon objetos; Esta matriz debe declararse en la parte pública del formulario principal. También necesitaremos NrIco, que es una variable de tipo entero, declarada en el público parte. los NrIco se utiliza para realizar un seguimiento del siguiente ícono que se muestra.

público
nrIco: entero;
MinIcon: matriz [0 ... 1] de TIcon;
...
procedimiento TfrMain.FormCreate (remitente: TObject);
empezar
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;
final;
...
procedimiento TfrMain.Timer1Timer (remitente: TObject);
comenzar IsIconic (Application.Handle) luego empezar
NrIco: = (NrIco + 1) modificación 2;
Application.Icon: = MinIcon [NrIco];
final;
final;
...
procedimiento TfrMain.FormDestroy (Remitente: TObject);
empezar
MinIcon [0] .Free;
MinIcon [1] .Free;
final;

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

Ultimas palabras

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

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