Mensaje    Asunto: Archivos de recursos (*.RC) Responder citando

Iva a contestar a un compañero nuestro que preguntaba sobre los ficheros de recursos, pero considero que esta contestacion podria ir mejor en esta seccion.

La he sacado de un pequeño memorandum que tengo, que a su vez esta sacado del libro "C++Builder" de "Gerad Leblanc". Un libro "basico" que que contiene cosas muy interesantes que no aparecen en otros.

ARCHIVOS DE RECURSOS

Un archivo de recursos es un fichero el cual contendrá a otros archivos, tales como imágenes, iconos, cursores, etc.

El motivo de estos archivos es el no tener que distribuirlos junto con la aplicación, ya que se incluyen dentro del fichero EXE.

Lo primero que debemos hacer para que forme parte del fichero de recursos es preparar un archivo de texto (File -> New y clic sobre el icono Text).

Este debe contener la línea siguiente:

nombre_interno tipo_recurso nombre_del_archivo

Donde:

nombre_interno : es el nombre que se especificará en el archivo CPP para designar la imagen.

tipo_recurso : es una palabra reservada. Esta palabra puede ser:
BITMAP : para imágenes.
ICON : para iconos.
CURSOR : para cursores.


nombre_del_archivo es el nombre del archivo de imagen (no es necesario dar el nombre completo del archivo si este archivo se encuentra en el directorio del proyecto).

Por ejemplo:
Código:

imagen1 BITMAP c:\imágenes\yo.bmp
micursor CURSOR c:\cursores\cursor1.cur
alarma ICON c:\iconos\alarm.ico


Este archivo de texto debe ser:

•guardado con la extensión RC. Asigne a este archivo un nombre distinto al del proyecto (para que no haya confusión con el archivo de recursos ya existente y que tiene la extensión RES);

•inclúyalo en el proyecto de la aplicación: View -> Project manager y añádalo al proyecto.


BMP:

Los pasos a seguir para una imagen son:

Crear el fichero de recurso (*.RC). Indicando donde se encuentra la imagen.

Declare como variable global (al principio del archivo CPP, antes del primer método):

Código:

HBITMAP hbitmap;

Donde :

HBITMAP es una palabra reservada.

hbitmap sera como le llamaremos en la aplicación (puede ser cualquier nombre).

Para cargar la imagen, insertaremos la siguiente linea:

Código:

hBitmap  = LoadBitmap (HINSTANCE) Hinstance, "nombre_interno");


donde nombre_interno debe reemplazarse por el nombre interno que haya dado a la imagen ( a la izquierda de la palabra reservada BITMAP).

Ejemplo:

En el fichero de recurso:
Código:

fondo_malva BITMAP d:\fondos\malva.bmp

Como variable global:
Código:

HBITMAP f_malva;


Y cuando queremos cambiar la imagen:
Código:

f_malva = LoadBitmap((HINSTANCE)HInstance,"fondo_malva");
i_fondo->Picture->Bitmap->Handle=f_malva;



ICONO

Para el icono actuaremos de modo similar a de la imagen:

Declare como variable global (al principio del archivo CPP, antes del primer método):

Código:

HICON hicon;


Donde :

HICON es una palabra reservada.

hicon será como le llamaremos en la aplicación (puede ser cualquier nombre).

Para cargar el icono, insertaremos la siguiente linea:
Código:

hicon  = LoadIcon (HINSTANCE) Hinstance, "nombre_interno");


donde nombre_interno debe reemplazarse por el nombre interno que haya dado a la imagen ( a la izquierda de la palabra reservada ICON).

Ejemplo:

En el fichero de recurso:
Código:

alarma ICON d:\iconos\alarm.ico


Como variable global:
Código:

HICON otroicon;


Y cuando queremos cambiar la imagen:
Código:

otroicon = LoadIcon((HINSTANCE)HInstance,"alarma");


Para cambiar el icono de la ventana y el de la aplicación:

Código:

Form1->Icon->Handle=otroicono;
Application->Icon->Handle=otroicono;


Siendo Form1 el nombre de la ventana




CURSOR

Para los cursores actuaremos de manera parecida:

Primero crear el fichero de recurso (*.RC). Indicando donde se encuentra el cursor.

Para cargar el icono, insertaremos la siguiente linea:

Código:

Screen->Cursors[30]=LoadCursor(HINSTANCE)Hinstance, “nombre_interno”);


donde nombre_interno debe reemplazarse por el nombre interno que haya dado a la al cursor ( a la izquierda de la palabra reservada CURSOR).

¿ Y porque 30 ?. Porque se necesitan una veintena de cursores predefinidos. Si se decide cargar mas cursores, hay que incluirlos en el archivo de recursos y seleccionar valores sucesivos superiores a 30.

Para forzar la utilización de un cursor, ejecute:

creen->Cursor=”posición del cursor”

Ejemplo:

En el archivo de recursos:
Código:

alarma ICON c:\iconos\alarm.ico


En el programa
Código:

Screen->Cursors[30]= LoadCursor((HINSTANCE)HInstance,"alarma");
Screen->Cursor=30;