Incluir JPGs en el EXE de tu aplicacion  

Enviado Por: Radikal
Web : http://www.q3.nu
Email: radikal@q3.nu
Fecha: 27/05/00

Truco accedido 108 veces

 


Puede que necesites usar varios JPGs en tu aplicación.
En lugar de dejarlos fuera de tu ejecutable, con este truco podrás incluirlos en él.

  • Primero, nos construiremos un fichero de recursos en donde meteremos los ficheros JPG

    Para hacerlo sigue los pasos que aqui te pongo:



    Creando nuestro fichero .RC


  • Abre un editor de texto (Notepad, por ejemplo) y escribe algo así:


     1 RCDATA  UnJpg.JPG
     2 RCDATA  OtroJpg.JPG
    



  • Grábalo con extensión .RC, por ejemplo, Imagenes.RC


    Compilando el fichero .RC


    Ahora debemos compilarlo, para crear un fichero de recursos (.RES), para lo cual, lo mejor es que pongas en el mismo directorio tanto los JPGss como el fichero .RC que has creado.
    Para compilar el fichero, usaremos el compilador que trae el propio Delphi: el BRC32 (Borland resource Compiler), que lo tendrás en el subdirectorio /BIN dentro del directorio donde hayas instalado el Delphi.
    Usaremos:


     BRC32.EXE -r -v Imagenes.RC
    



    Si todo ha ido bien, habremos generado el fichero Imagenes.RES


    Incluyendo el fichero .RES en tu aplicacion


    Ahora, debes incluir en tu aplicación, el fichero .RES que has creado, para lo cual, basta con que incluyas esta linea en el implementation de tu form:


     implementation
    
     {$R *.DFM}
     {$R Imagenes.RES}
    




    Mostrando esos JPGs


    Llegó la hora de mostrar las imágenes:


    Los pasos son los siguientes:


  • Creamos un TJpegImage temporal (recuerda añadir 'JPeg' en el uses de tu form)
  • Creamos un TResourceStream apuntando al JPG que queremos cargar (en nuestro caso el #1)
  • Cargamos el JPG en el TJPegImage temporal
  • Dibujamos el TJPegImage en un TImage de nuestra form
  • Liberamos las cosas temporales.

    El código:


     procedure TfSplash.FormCreate(Sender: TObject);
     var
        Corriente   : TResourceStream;
        Imagen      : TJPegImage;
     begin
       Imagen:=TJPegImage.Create;
       Corriente:=TResourceStream.Create( hInstance,
                                          '#1',
                                          RT_RCDATA );
       Corriente.Seek(0,soFromBeginning);
       Imagen.LoadFromStream(Corriente);
       Image1.Canvas.Draw(0,0,Imagen);
       Imagen.Free;
       Corriente.Free;
     end;