Reputation: 40215
I want to distribute only a single .exe, however, at runtime I would like it to extract some embedded image resources to the users hard disk drive.
Can I, and if so, how?
Upvotes: 13
Views: 15109
Reputation: 103
Maybe this might come in handy too if you need to work with the resources itself. Delphidabbler / ResourceFiles
Upvotes: 1
Reputation: 5058
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.
Upvotes: 2
Reputation: 163357
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.
Upvotes: 4
Reputation: 125757
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.
Upvotes: 20