community.borland.com

Article #19532: Extracting a JPEG Resource from an EXE

 Technical Information Database

TI4532D.txt - Extracting a JPEG Resource from an EXE

Category   :VCL
Platform   :All-32Bit
Product    :Delphi3.x,   

Description:
Pick any JPEG you want to link into your project and copy it to your
project directory. Now, in the same directory, create an RC file
(resource script). Call it MYRES.RC and have it contain this line:

  MYJPEG RCDATA YourJpegHere.JPEG

Now, compile this RC file. At the command line, say:

  BRCC32 MYRES

This'll create MYRES.RES which you can link into your project.

Now, start a brand new project in Delphi 3. Drop a TButton and a
TImage on the form. Then double click on the button. Then replace the
code inbetween "{$R *.DFM}" and "end." in Unit1 with this code:

{$R MyRes.RES}

uses
  JPEG;

const
  ResName = 'MYJPEG';

procedure TForm1.Button1Click(Sender: TObject);
var
  MyRes  : Integer;
  MyResP : Pointer;
  MyResS : Integer;
  MyMS   : TMemoryStream;
  OldDir : String;
begin
  Caption := 'Please wait...';
  Application.ProcessMessages;
  GetDir(0,OldDir);
  ChDir(ExtractFilePath(Application.ExeName));
  MyRes := FindResource(HInstance,PChar(ResName),RT_RCDATA);
  if MyRes <> 0 then begin
    MyResS := SizeOfResource(HInstance,MyRes);
    MyRes := LoadResource(HInstance,MyRes);
    if MyRes <> 0 then begin
      MyResP := LockResource(MyRes);
      if MyResP <> nil then begin
        MyMS := TMemoryStream.Create;
        with MyMS do begin
          Write(MyResP^,MyResS);
          Seek(0,soFromBeginning);
          Image1.Picture.Graphic := TJPEGImage.Create;
          Image1.Picture.Graphic.LoadFromStream(MyMS);
          Free;
        end;
        UnLockResource(MyRes);
        with Image1.Picture do
          Caption := 'Cool JPEG! ('+
            IntToStr(Width)+'x'+IntToStr(Height)+')';
      end else
        Caption := 'LockResource failed. '+
          SysErrorMessage(GetLastError);
      FreeResource(MyRes);
    end else
      Caption := 'LoadResource failed. '+
        SysErrorMessage(GetLastError);
  end else
    Caption := 'FindResource failed. '+SysErrorMessage(GetLastError);
  ChDir(OldDir);
end;


Reference:
None

3/31/99 1:09:14 PM
 

Last Modified: 01-SEP-99