Qu'est
ce qu'un fichier Ressource ?
C'est un Fichier qui contient
votre icône, votre version et peu contenir pas mal de choses.
Comment créer ce
fichier Ressource ?
Comme ce tut parle de l'utilisation
d'un ressource, je vous conseille d'utiliser mon programme Res_HiA disponible
dans la section Programmes de http://delphicool.developpez.com.
Télécharger
l'exemple qui vous aideras à comprendre :
Commençons
Extraire :
- Image
BMP
- Image
JPEG
- Image
GIF
- Un
fichier Texte
- une
Icône
- Un son
Wav
- Un son
MP3
- Un
exécutable
- Un
Curseur
- Un
Texte d'une StringTable
Pour extraire
un ressource dans son application on doit connaître le nom de
la Ressource et son Type.
Pour voir de quoi il s'agit,
je vous conseille le très bon logiciel Res
Hacker, qui vous aideras à comprendre de quoi nous allons
parler.
Avant j'ai déclaré
une variable Res dans VAR, pour pouvoir l'utiliser partout sans la redéclarer
à chaque fois :
var
Res
: TResourceStream ;
|
Mon fichier ressource
crée avec Res_HiA est inclus dans l'exe comme ceci :
implémentation
{$R,
Le_Ressource_en_Plus.res}
|
Image
BMP
Voir
une Capture avec Res Hacker
Image1.Picture.Bitmap.LoadFromResourceName(hInstance,
'MONBMP');
|
HInstance est
l'instance de votre Application.
On appelle le Ressource MONBMP, que l'on place dans TImage.
Image
JPEG
Voir
une Capture avec Res Hacker
Vous devez d'abord
déclarer JPEG dans Uses.
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 acueuillir votre Ressource.
Image
GIF
Voir
une Capture avec Res Hacker
Il vous faut
un composant GIGImage (disponible sur http://delphicool.developpez.com)
Et déclarer dans GIFImage dans Uses.
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 Form, ne pas oublier de libérer votre
TImage
Car le Gif à été crée en DirectDraw
Image1.Picture.Graphic := nil;
}
End;
|
Un
Fichier Texte
Voir
une Capture avec Res Hacker
Res
:= TResourceStream.Create(0,'MONTXT','TEXT');
MemoTexte.Lines.LoadFromStream(Res);
Res.Free; |
Une
Icône
Voir
une Capture avec Res Hacker
var
Icone:
TIcon;
begin
Icone := TIcon.Create;
Icone.Handle := LoadIcon(HInstance, 'MONICON');
Icon := Icone;
Image1.Picture.Icon := Icon;
Icone.free;
End; |
Un
son Wav
Voir
une Capture avec Res Hacker
Pour Jouer un
WAV il faut déclarer MMSystem dans Uses.
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; |
Un
son MP3
Voir
une Capture avec Res Hacker
Pour jouer du
MP3 j'ai utilisé le composant TMediaPlayer.
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'evenement OnClose du Form, mettre
mp3Joue.Close;
|
Un
exécutable
Voir
une Capture avec Res Hacker
var
path : string;
begin
path
:= ExtractFilePath(Application.ExeName); //
Je recup le Chemin de mon exe
Res
:= TResourceStream.Create(0,'MONEXE','EXEFILE');
Res.SaveToFile(path + 'Monexe.exe');
Res.Free;
WinExec(Pchar(path + 'Monexe.exe'),sw_normal);
// On exécute l'exe
End;
|
Pour executer l'exe qui est
dans mon application, je l'extrai dans le répertoire de l'application.
Un
Curseur
Voir
une Capture avec Res Hacker
Screen.Cursors[1]
:= LoadCursor(HInstance, 'MONCURSEUR');
//
On extrait le Curseur du Ressource
Button12.Cursor
:= 1;
// On lui dit ou le curseur doit apparaître
Self.Cursor
:= 1; //
On lui dit ou le curseur doit apparaître
|
Un
Texte d'une StringTable
Voir
une Capture avec Res Hacker
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, on un Index, c'est par celui ci qu'on les appellent.
Je n'ai pas la prétention
de vous apprendre comment utiliser les Ressources.
Mais de vous montrer ce que j'ai appris.
Biensur je sais qu'il à certainement plus simple à faire
que ce que j'ai fait, mais pour un débutant comme moi, je ne
l'ai connait pas encore, alors je vous prie d'être un peu indulgent
avec moi, Merci.
par
DelphiCool
Haut
de page
|