2010-09-10 42 views

Répondre

12

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.

+0

merci, Ken, ça sonne bien. Btw, quelle valeur pour HInstance? – Mawg

+3

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 *. –

+0

+1 et merci encore! – Mawg

4

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.

2
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.