I want to distribute only a single .exe, however, at run time I would like it to extract some embedded image resources to the users hard drive.
Can I, and, if so, how?
I want to distribute only a single .exe, however, at run time I would like it to extract some embedded image resources to the users hard drive.
Can I, and, if so, how?
Use Delphi's TResourceStream. It's constructor will find and load the resource into memory, and it's SaveToFile method will do the disk write.
Something similar to this should work:
var
ResStream: TResourceStream;
begin
ResStream := TResourceStream.Create(HInstance, 'YOURRESOURCENAME', RT_RCDATA);
try
ResStream.Position := 0;
ResStream.SaveToFile('C:\YourDir\YourFileName.jpg');
finally
ResStream.Free;
end;
end;
If you can use the resource ID instead of name, it's a little less memory. In that case, you'd resplace Create with CreateFromID, and supply the numeric ID rather than the string name.
Create a TResourceStream
. You'll need the module instance handle (usually SysInit.HInstance
for the current EXE file, or else whatever you get from LoadLibrary
or LoadPackage
), the resource type (such as rt_Bitmap
or rt_RCData
), and either the resource name or numeric ID. Then call the stream's SaveToFile
method.
try
if not Assigned(Bitmap)
then
Bitmap := TBitmap.Create();
Bitmap.LoadFromResourceName(HInstance,SRC);
except
on E:Exception do
ShowMessage(e.Message);
end;
And then save the Bitmap to disk.
Maybe this might come in handy too if you need to work with the resources itself. Delphidabbler / ResourceFiles