1. Utilisation des ressources

Qu'est ce qu'un fichier ressource ?
C'est un fichier qui contient votre icône, votre numéro de version et pas mal d'autres choses.

Comment créer ce fichier ressource ?
Comme ce tutoriel parle de l'utilisation d'un fichier de ressources, je vous conseille d'utiliser mon programme Res_HiA.
Vous pouvez aussi consulter ce fichier source.

Télécharger l'exemple qui vous aideras à comprendre :

Exécutable Demo 804 Ko
Source de l'exécutable environ 1 Mo

Image non disponible

2. introduction

Pour extraire une ressource dans une application, on doit connaître le nom et le type de cette ressource. Pour voir de quoi il s'agit, je vous conseille le très bon logiciel Res Hacker, qui vous aidera à comprendre ce dont nous allons parler.

En premier lieu, je déclare une variable Res dans la partie implémentation, afin de l'utiliser partout sans la redéclarer à chaque fois :

 
Sélectionnez

var
 Res : TResourceStream ; 

Mon fichier ressource créé avec Res_HiA est inclus dans l'exécutable comme ceci :

 
Sélectionnez

implementation 
 {$R La_Ressource_en_Plus.res}

3. Une image BMP

Image non disponible
Capture avec Res Hacker
 
Sélectionnez

 image1.Picture.Bitmap.LoadFromResourceName(hinstance, 'MONBMP'); 

HInstance est l'instance de votre application. MONBMP est l'identificateur de le ressource bitmap qui sera placée dans un TImage.

4. Une image JPEG

Image non disponible
Capture avec Res Hacker

Pour utiliser les fichiers jpeg, vous devez ajouter l'unité JPEG dans la clause uses de votre programme :

 
Sélectionnez

var jpg: TjpegImage;

begin
 jpg := TJPEGimage.Create;
 Res := TResourceStream.Create(hinstance, 'MONJPEG', RT_RCDATA);
 Jpg.LoadFromStream(Res);
 Image1.Picture.Bitmap.Assign(jpg);
 Res.Free;
 jpg.Free;
End;  

On crée un TJPEGImage qui va accueillir votre ressource.

5. Une image GIF

Image non disponible
Capture avec Res Hacker

Il vous faut un composant GIFImage et déclarer l'unité GIFImage dans la clause uses :

 
Sélectionnez

var GIF : TGIFImage;
begin
 include(GIFImageDefaultDrawOptions, goDirectDraw); 
 Res := TResourceStream.Create(hinstance, 'MONGIF', 'GIF');
 GIF := TGIFImage.Create;
 GIF.LoadFromStream(Res);
 Image1.Picture.Assign(GIF);
 GIF.Free;
 Res.Free;
 { Avant de fermer le TForm, ne pas oublier de libérer votre TImage
 Car le Gif a été créé en DirectDraw
 
 Image1.Picture.Graphic := nil;
 }
End;

6. Un fichier texte

Image non disponible
Capture avec Res Hacker
 
Sélectionnez

 Res := TResourceStream.Create(0,'MONTXT','TEXT');
 MemoTexte.Lines.LoadFromStream(Res); 
 Res.Free;

7. Une icône

Image non disponible
Capture avec Res Hacker
 
Sélectionnez

var
 Icone: TIcon;

begin
 Icone := TIcon.Create;
 Icone.Handle := LoadIcon(HInstance, 'MONICON');
 Icon := Icone;
 Image1.Picture.Icon := Icon;
 Icone.free;
End;  

8. Un son Wav

Image non disponible
Capture avec Res Hacker

Pour jouer un son au format WAV, il faut déclarer l'unité MMSystem dans la clause uses :

 
Sélectionnez

var
 Hres: THandle;
 Pres: PChar;

begin
 Hres := FindResource(0, pchar('MONWAV2'), 'WAV'); // Recherche de la Ressource
 Hres := LoadResource(0, Hres); // On charge la Ressource
 Pres := LockResource(Hres);
 sndPlaySound(Pres, SND_MEMORY); // On joue le WAV 
 UnLockResource(Hres);
 FreeResource(Hres);
End;  

9. Un son MP3

Image non disponible
Capture avec Res Hacker

Pour jouer un son au format MP3 j'ai utilisé le composant TMediaPlayer :

 
Sélectionnez

 Res := TResourceStream.Create(0,'MONMP3','MP3');
 Res.SaveToFile(ExtractFilePath(Application.ExeName) + 'mon.mp3');
 Res.Free; 
 mp3Joue.Close; // mp3joue est mon TMediaPlayer
 mp3Joue.FileName := 'mon.mp3';
 mp3Joue.Open;
 mp3Joue.Play;

 // Sur l'événement OnClose du TForm, mettre mp3Joue.Close; 

10. Un fichier exécutable

Image non disponible
Capture avec Res Hacker
 
Sélectionnez

var path : string;

begin
 path := ExtractFilePath(Application.ExeName); // Je recupère le chemin de mon exe 
 Res := TResourceStream.Create(0,'MONEXE','EXEFILE');
 Res.SaveToFile(path + 'Monexe.exe');#339999
 Res.Free;
 WinExec(Pchar(path + 'Monexe.exe'),sw_normal); // On exécute l'exe 
End;

Pour lancer l'exe qui est dans mon application, je l'extrais dans le répertoire de l'application.

11. Un curseur de souris

Image non disponible
Capture avec Res Hacker
 
Sélectionnez

 Screen.Cursors[1] := LoadCursor(HInstance, 'MONCURSEUR'); // On extrait le Curseur du Ressource
 button12.Cursor := 1; // On lui dit  le curseur doit apparaître
 self.Cursor := 1; // On lui dit  le curseur doit apparaître 

12. Un texte d'une StringTable

Image non disponible
Capture avec Res Hacker
 
Sélectionnez

var montexte: array[0..255] of Char; 

begin
 LoadString(hInstance, 0, montexte, 255); // 0 est l'index de ma ligne de texte
 MemoTexte.Lines.Text := montexte;
End;  

Les textes des StringTable, ont un index, c'est par celui-ci qu'on les appellent.

13. Pour terminer

Je n'ai pas la prétention de vous apprendre comment utiliser les ressources, mais de vous montrer ce que j'ai appris.
Bien sur, je sais qu'il y a certainement plus simple à faire que ce que j'ai fais, aussi, je vous prie d'être un peu indulgent avec le débutant que je suis encore.

Merci.


DelphiCool
Site
Mail : delphicool@fr.st


Un grand merci à Alphomega pour son soutient et merci pour la correction d'orthographe.