|
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' :
diversfichier RCDATA testimg.jpg
|
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.
|
Source du projet complet : Sources
|