Meter recursos dentro de un ejecutable
Una de las cosas que mas hacen engordar el tamaño de un ejecutable es
meter los mismos botones con imagenes en distintos formularios. Si diseñamos
nuestros propios botones Aceptar y Cancelar y los vamos replicando en cada
formulario el tamaño de nuestro programa puede crecer considerablemente.
Para evitar esto lo que vamos a hacer es meter la imagen dentro de un
recurso compilado y posteriormente accederemos a la misma dentro del
programa. La ventaja de utilizar este método es que la imagen sólo esta una
vez en el programa independientemente del número de formularios donde
vaya a aparecer.
Supongamos que vamos a meter la imagen MiBoton.jpg dentro de nuestro
programa. Creamos al lado de la misma el archivo imagenes.rc el cual
contiene:
1 RCDATA MiBoton.jpg
Se pueden meter en un archivo de recursos tantas imagenes como se desee,
así como otros tipos de archivo (sonidos, animaciones flash, etc.). Las
siguientes líneas serían:
2 RCDATA imagen2.jpg
3 RCDATA imagen3.jpg
...
Ahora abrimos una ventana de símbolo del sistema dentro del mismo
directorio donde este la imagen y compilamos el recurso:
c:\imagenes\brc32 -r -v imagenes.rc
Lo cual nos creará el archivo imagenes.res.
Ahora para utilizar el recurso dentro de nuestro programa hay que añadir
debajo de implementation (del formulario principal de la aplicación) la
directiva {$R imagenes.res}:
[glow=red,2,300]implementation
{$R *.dfm}
{$R imagenes.res}[/glow]
Esto lo que hace es unir todos los recursos de imagenes.res con nuestro
ejecutable. Para cargar la imagen dentro de un objeto TImage hacemos lo
siguiente:
procedure TFPrincipal.FormCreate( Sender: TObject );
var
Recursos: TResourceStream;
Imagen: TJPegImage;
begin
Imagen := TJPegImage.Create;
Recursos := TResourceStream.Create( hInstance, '#1', RT_RCDATA );
Recursos.Seek( 0, soFromBeginning );
Imagen.LoadFromStream( Recursos );
Imagen1.Canvas.Draw( 0, 0, Imagen );
Recursos.Free;
Imagen.Free;
end;
Donde Imagen1 es un objeto TImage. Aunque pueda parecer algo molesto
tiene las siguientes ventajas:
- Evita que un usuario cualquiera utilice nuestras imagenes (a menos claro que
sepa utilizar un editor de recursos).
- Facilita la distribución de nuestro programa (va todo en el exe).
- Se puede añadir cualquier tipo de archivo o dato dentro del ejecutable.
- Ahorramos mucha memoria al cargar una sola vez el recurso.
Pruebas realizadas en Delphi 7.
Esto lo saque de unos manuales de nombre delphi al limite.
Mi duda es como crear el archivo .RC porque no entiendo como hacerlo y si cuales son los pro y los contra de hacer esto asi.
Lo quiero utilizar basicamente para unos archivos de audio de mi aplicacion y asi poder tenerlos junto con mi ejecutable.
Espero sus comentarios