Fermer Ressources : utilisation pour n'importe quel fichier

Ressources : Utiliser d'autres fichiers, exemple d'un JPG.


dernière mise à jour : dimanche 02 novembre 2003

Avec la technique qui suit, vous allez pouvoir mettre dans votre exe (puis utiliser) n'importe quelle type de fichier (exe, jpg, txt...).

Principe : à l'image de ce que l'on a vu précédemment, on inclu le fichier en question dans l'exe :

Supposons que l'on souhaite avoir accès à un fichier testimg.jpg qui se trouve dans le même dossier que notre projet et supposons que l'on souhaite pouvoir y accéder par le nom 'diversfichier' :

  • Placez la ligne suivante dans notre fichier .RC :

diversfichier RCDATA testimg.jpg
  • Suivez la démarche précédemment vue pour compiler ce .RC et créer ainsi le .RES

A noter que vous pouvez avoir plusieurs lignes dans le fichier RC et donc avoir accès à plusieurs fichiers.

 

Utilisation du fichier placé dans notre exe

Extraction du fichier pour le placer sur le disque dur puis utilisation :
  • Commencez un nouveau projet, placez-y un bouton et un TImage. Les TAnimate possèdent 2 propriétés (ResName et ResHandle) qui nous permettront de se servir de la ressource sans aucun problème.

  • Implémentez l'événement OnClick du bouton et ajoutez des lignes de code afin d'obtenir ceci :

implementation

uses jpeg;
{$R *.DFM}
{$R testressources.RES}
//  testressources.RES a été obtenu par compilation su script testressources.RC
//  qui contenait diversfichier RCDATA testimg.jpg
procedure TForm1.Button1Click(Sender: TObject);
var
 StrNomFichier:string;
 ResourceStream:TResourceStream;
 FichierStream :TFileStream;
begin
  {------------------------------------------------------------------}
  {enregistrement sur le disque du fichier contenu dans la ressource }
  { à noter que cette technique permet de traiter n'importe quel type}
  { de fichier y compris des exe                                     }
  {------------------------------------------------------------------}
  // pour que le fichier créé se place dans le même dossier que l'application
  StrNomFichier:=ExtractFilePath(Application.ExeName)+'Testimg~.jpg';
  // création d'un flux mémoire donnant accès à la ressource compilé 
  // 'diversfichier' de notre fichier testressources.RES
  ResourceStream:=TResourceStream.Create(hInstance, 'diversfichier', RT_RCDATA);
  try
  //FileStream permet aux applications de lire et écrire dans un fichier disque.
    FichierStream:=TFileStream.Create(StrNomFichier, fmCreate);
    try
      //copie du flux donnant accès aux ressources vers le flux fichier
      FichierStream.CopyFrom(ResourceStream, 0);
      // à partir de ce moment, on a un nouveau fichier sur le disque :
      // Testimg~.jpg
    finally
      FichierStream.Free; //libération mémoire
    end;
  finally
    ResourceStream.Free; //libération mémoire
  end;

  {---------------------------------------------------}
  { utilisation du fichier jpg placé sur le disque :  }
  {---------------------------------------------------}
  image1.Picture.LoadFromFile(StrNomFichier);
  // il faudrait alors effacer le fichier désigné par StrNomFichier
  // si on en a plus besoin.
  //DeleteFile(StrNomFichier);
end;

end.
  • Compilez (F9), testez.

Source du projet complet : Sources


Retour au sommaire