Imagem - jpeg dentro do exe

Top  Previous  Next

I'm a Delphi beginner who's exploring this wonderful programming environment, and I just thought I'd like to share some really neat stuff I worked out. Delphi3 comes with the jpeg unit, and that's great, but did you ever wonder how to include jpeg's in your executable and then use them in your application? Well, follow this simple 5 step plan and you can't go wrong!

 

 

STEP ONE:

Create a resource script file (*.RC) with a simple text editor like Notepad and add the following line: 

--------------------------------------------------------------------------------

 

1  RCDATA  "MyPic.jpg"

 

--------------------------------------------------------------------------------

The first entry is simply the index of the resource. The second entry specifies that we are dealing with a user-defined resource. The third and final entry is the name of the jpeg file.

 

STEP TWO:

Use Borland's Resource Compiler, BRCC32.EXE, to compile it into a .RES file. At the MS-DOS command line: 

--------------------------------------------------------------------------------

 

BRCC32 MyPic.RC

 

--------------------------------------------------------------------------------

This will create a resource file called MyPic.RES. 

STEP THREE:

Add a compiler directive to the source code of your program. It should immediately follow the form directive, as shown here: 

--------------------------------------------------------------------------------

 

{$R *.DFM}

{$R MyPic.RES}

 

--------------------------------------------------------------------------------

 

STEP FOUR:

Add the following code to your project (I've created a procedure for it): 

--------------------------------------------------------------------------------

 

procedure LoadJPEGfromEXE;

 

var

 MyJPG : TJPEGImage; // JPEG object

 ResStream : TResourceStream; // Resource Stream object

 

begin

  try

    MyJPG := TJPEGImage.Create

    ResStream := TResourceStream.CreateFromID(HInstance, 1, RT_RCDATA);

    // OU  ResStream := TResourceStream.Create(HInstance, 'NOME', RT_RCDATA);

    MyJPG.LoadFromStream(ResStream); // What!? Yes, that easy!

    Canvas.Draw(12,12,MyJPG); // draw it to see if it really worked!

  finally

    MyJPG.Free;

    ResStream.Free;

  end;

end;  // procedure

 

--------------------------------------------------------------------------------

See the second parameter of the CreateFromID procedure of the TResourceStream component? It's simply the resource index. You can include more than one jpeg in your executable just by adding a line for each jpeg (with a different index) in the resource script (.RC) file. 

STEP FIVE:

Call the procedure, run the program, and voila! Now go eat some nachos.