Je veux distribuer seulement un seul .exe, cependant, au moment de l'exécution, je voudrais extraire quelques ressources d'image intégrées sur le disque dur des utilisateurs. Puis-je, et si oui, comment?Comment extraire une ressource dans un fichier lors de l'exécution?
Répondre
Utilisez le TResourceStream de Delphi. Son constructeur trouvera et chargera la ressource dans la mémoire, et sa méthode SaveToFile fera l'écriture du disque.
Quelque chose de semblable à cela devrait fonctionner:
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;
Si vous pouvez utiliser l'ID de ressource au lieu du nom, il est un peu moins de mémoire. Dans ce cas, vous pouvez remplacer Create avec CreateFromID et fournir l'ID numérique plutôt que le nom de la chaîne.
Créez un TResourceStream
. Vous aurez besoin du handle d'instance de module (généralement SysInit.HInstance
pour le fichier EXE en cours, ou tout ce que vous obtenez de LoadLibrary
ou LoadPackage
), le type de ressource (tel que rt_Bitmap
ou rt_RCData
) et le nom de ressource ou l'ID numérique. Appelez ensuite la méthode SaveToFile
du flux.
try
if not Assigned(Bitmap)
then
Bitmap := TBitmap.Create();
Bitmap.LoadFromResourceName(HInstance,SRC);
except
on E:Exception do
ShowMessage(e.Message);
end;
Ensuite, enregistrez le bitmap sur le disque.
Peut-être que cela pourrait être utile si vous avez besoin de travailler avec les ressources elles-mêmes. Delphidabbler/ResourceFiles
merci, Ken, ça sonne bien. Btw, quelle valeur pour HInstance? – Mawg
Quelle que soit la valeur que le système d'exploitation vous indique, @Leonix. 'HInstance' est une variable globale que Delphi initialise pour vous au démarrage de votre programme. C'est dans l'unité * SysInit *. –
+1 et merci encore! – Mawg