Free Tools

Votre publicité ici ?


Top des logiciels

1. HxD Hex Editor 1.6.1 (328 fois)

2. Open Office 2.2.1 (294 fois)

3. Delphi 6 (253 fois)

4. Windows Live Messenger (175 fois)

5. FireFox 2.0.0.12 (135 fois)


En bref

03 Sept 2008 Google Chrome : le navigateur 100 % Made In Google... ou presque !

28 Août 2008 Internet Explorer 8 : toutes les nouveautĂ©s du navigateur

18 Août 2008 Windows 7 : tout savoir sur le prochain système de Microsoft

13 Août 2008 The Pirate Bay censurĂ© en Italie - L'arrĂŞt de mort du rĂ©seau P2P ?

11 Août 2008 Hop : le nouveau tĂ©lĂ©phone jetable Ă  15€

Consulter les archives


Les derniers dossiers


Les ressources Delphi et C/C++

Music Pro Package

Afficher la date et heure du jour

Fonction affine

Alignement de séquences d'ADN

TatNum : gestion des images avec Qt


Membres en ligne :

Malgon

Mordem


Nos partenaires

Espacerezo

KilaSoft


À votre tour, devenez partenaire de mx-dev.net.



Logo mx-dev.net

Le 1er du Web - Voter pour mx-dev.net


Vous êtes ici : AccueilDelphiTutoriaux › Les ressources et leur utilisation dans Delphi


Les ressources et leur utilisation dans Delphi


Informations sur le tutorial :

Auteur : Flo

Catégorie : Manipulation de fichiers

Niveau : Intermédiaire

Posté le : 16 Avril 2007 à 21h02


I.Introduction

 A.Pré-requis

Pour pouvoir utiliser les ressources, il vous faut une version de Delphi supérieure à un installée sur votre ordinateur ainsi que le compilateur de ressources de Borland, normalement livré avec Delphi que vous trouverez sous le nom de « brcc32.exe » dans le dossier « Bin » de Delphi.


Qu'est ce qu'une ressource ?

Une ressource est un fichier contenant toutes sortes de données issues de fichiers (bitmaps, jpeg, ...) qui seront, au moment de la compilation, directement inclues dans l'exécutable et, par conséquent, accessible à tout moment.


A quoi cela sert-il ?

Utiliser des ressources plutôt que des fichiers « externes » au programmes permet d'éviter les risques dus à la suppression des ces fichiers, mais aussi moins de contraintes pour le programmeur (les ressources sont clairement identifiées).

Par exemple, les programmes d'installation contiennent le programme à installer dans leurs ressources.

Autre exemple: il est possible de créer des librairies « .dll » ne contenant que des ressources, ce que l'on appelle communément un « ressource pack », qui permet de skinner son application.


Créer une ressource

La création d'une ressource passe par deux étapes qui pourront être automatisées par un programme conçu pour réaliser ce genre de taches.

Un fichier ressource, lorsqu'il n'est pas intégré à l'exécutable, se présente sous la forme d'un fichier « .res »


Création d'un fichier « .rc »

Avant d'aller plus loin, commencez par créer un dossier à la racine d'un lecteur (pour plus de commodité). Copiez ensuite tous les fichiers à mettre en ressource dans ce dossier.

Le fichier « .rc » est un fichier contenant toutes les informations sur les fichiers à mettre en ressource. Chaque ligne contient les informations sur un fichier.

Voyons comment se compose une ligne (chaque partie de cette ligne est séparée de la suivante par un espace) :

Il est aussi possible d'utiliser un identifiant numérique (nombre entier positif)


Types de ressources

En théorie, il est possible d'utiliser n'importe quelle chaîne sans espace ni accents comme type de ressource, à partir du moment où vous vous en rappelez.

En pratique, il en va autrement. En effet, Windows a prédéfini quelques types pour vous simplifier la tâche. Ces types prédéfinis sont associés à une constante de type PChar déclaré dans Windows.pas

Le tableau suivant récapitule ces constantes prédéfinies:

Chaîne à écrire dans le fichier « .rc »

Constante PChar à utiliser dans Delphi

ACCELERATOR

RT_ACCELERATOR

ANICURSOR

RT_ANICURSOR

ANIICON

RT_ANIICON

BITMAP

RT_BITMAP

CURSOR

RT_CURSOR

DIALOG

RT_DIALOG

DLGINCLUDE

RT_DLGINCLUDE

FONT

RT_FONT

FONTDIR

RT_FONTDIR

GROUP_CURSOR

RT_GROUP_CURSOR

GROUP_ICON

RT_GROUP_ICON

HTML

RT_HTML

ICON

RT_ICON

MANIFEST

RT_MANIFEST

MENU

RT_MENU

MESSAGETABLE

RT_MESSAGETABLE

PLUGPLAY

RT_PLUGPLAY

RCDATA

RT_RCDATA

STRING

RT_STRING

VERSION

RT_VERSION

VXD

RT_VXD


Compilation du fichier « .rc »

Pour cela, il faut ouvrir le menu « Démarrer > Exécuter » et taper :

brcc32 nom_complet_du_fichier_rc_entouré_de_guillemets_si_besoin

Delphi fournit, dans l'unité « Classes.pas » une classe TRessourceStream, qui permet de charger une ressource depuis un fichier exécutable ou une librairie.

Son constructeur principal prend trois paramètres:


Un deuxième constructeur « CreateFromID » permet de charger une ressource identifiée par un entier Integer. Cette version est bien moins utilisée (car moins pratique) et ne sera pas détaillée.


A.Sauvegarder une ressource sur le disque

Il suffit d'appeler la méthode SaveToFile du TRessourceStream.


  1. var
  2. Res: TResourceStream;
  3. begin
  4. Res := TresourceStream.Create(0, 'FICHIER001', RT_RCDATA);
  5. try
  6. Res.SaveToFile('MonFichier.txt');
  7. finally
  8. Res.Free;
  9. end;
  10. end;


B.Afficher un bitmap

Le TBitmap possède une méthode « LoadFromResourceName » qui permet de charger une image en une ligne de code. Il est donc possible de l'affecter à un TImage.

Attention, ici, l'image doit être obligatoirement enregistrée dans le fichier « .rc » comme « BITMAP ».


  1. begin
  2. {>> On change les propriétés du TImage nommé Image }
  3. Image.Proportional := False;
  4.  
  5. {>> On enlčve l'image s'il y en avait une }
  6. Image.Picture := nil;
  7.  
  8. {>> On charge la ressource }
  9. Image.Picture.Bitmap.LoadFromResourceName(0, 'BITMAP001');
  10. end;


C.Afficher un jpeg

La classe TJpegImage, elle, ne possède pas de procédure permettant de charger directement depuis les ressources. Il va donc falloir créer un TRessourceStream et charger l'image depuis ce flux.


  1. var
  2. Res: TResourceStream;
  3. Jpeg: TJpegImage;
  4. begin
  5. {>> Création du flux (ressource nommée IMAGE001 de type JPEG) }
  6. Res := TresourceStream.Create(0, 'IMAGE001', 'JPEG');
  7. try
  8. Jpeg := TJpegImage.Create;
  9. Jpeg.LoadFromStream(Res);
  10. { Ici, on force l'image à rentrer dans l'espace qui lui est attribué. Image est un TImage. }
  11. Image.Canvas.StretchDraw(Image.Canvas.ClipRect, Jpeg);
  12. Jpeg.Free;
  13. finally
  14. Res.Free;
  15. end;
  16. end;


D.Lire un fichier mp3

Si on utilise un TMediaPlayer pour lire le fichier mp3, il faudra d'abord sauvegarder le fichier sur le disque dur, puis l'affecter au TMediaPlayer. Il est éventuellement possible de supprimer le fichier mp3 ŕ la fermeture de l'application.

En global:


  1. var
  2. CheminMp3: string;


Dans la procédure de chargement:


  1. var
  2. Res: TResourceStream;
  3. begin
  4. {>> Chargement du fichier mp3 en ressource }
  5. Res := TresourceStream.Create(0, 'CHANSON001', 'MP3');
  6. try
  7. {>> Sauvegarde sur le disque dans le répertoire du programme }
  8. CheminMp3 := ExtractFilePath(Application.ExeName) + 'MonMp3.mp3';
  9. Res.SaveToFile(CheminMp3);
  10.  
  11. {>> Affectation au TMediaPlayer (ici nommé MP) }
  12. MP.Close;
  13. MP.FileName := CheminMp3;
  14.  
  15. {>> Lecture }
  16. MP.Open;
  17. MP.Play;
  18. finally
  19. Res.Free;
  20. end;
  21. end;


Dans le OnDestroy de la fiche principale:


  1. begin
  2. if FileExists(CheminMp3) then
  3. DeleteFile(CheminMp3);
  4. end;


IV.Conclusion

En définitive, l'utilisation des ressources n'est pas bien compliquée, contrairement à l'idée initiale qu'on pourrait avoir.

Les ressources apportent de grandes facilités pour le programmeur, notamment pour le déploiement de son programme et la gestion de ces fichiers. De plus, comme leur élaboration demande réflexion, les programmes les utilisant sont souvent mieux conçus.

A méditer...


V.Remerciements

Je tiens à remercier :