I. 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 [ftp://www.developpez.ws/club/delphicool/prog/Res_HiA/Res_HiA.zip].
Vous pouvez aussi consulter ce fichier source.
Télécharger l'exemple qui vous aidera à comprendre :
Exécutable Demo [ftp://www.developpez.ws/club/delphicool/tut/utiliz_ressources/ressources_exe.zip] 804 Ko
Source de l'exécutable [ftp://www.developpez.ws/club/delphicool/tut/utiliz_ressources/ressources_src.zip] environ 1 Mo
II. 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 :
var
Res : TResourceStream ;
Mon fichier ressource créé avec Res_HiA est inclus dans l'exécutable comme ceci :
implementation
{$R La_Ressource_en_Plus.res}
III. Une image BMP▲
image1.Picture.Bitmap.LoadFromResourceName(hinstance, 'MONBMP'
);
HInstance est l'instance de votre application. MONBMP est l'identificateur de la ressource bitmap qui sera placée dans un TImage.
IV. Une image JPEG▲
Pour utiliser les fichiers jpeg, vous devez ajouter l'unité JPEG dans la clause uses de votre programme :
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.
V. Une image GIF▲
Il vous faut un composant GIFImage et déclarer l'unité GIFImage dans la clause 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 TForm, ne pas oublier de libérer votre TImage
Car le Gif a été créé en DirectDraw
Image1.Picture.Graphic := nil;
}
End
;
VI. Un fichier texte▲
Res := TResourceStream.Create(0
,'MONTXT'
,'TEXT'
);
MemoTexte.Lines.LoadFromStream(Res);
Res.Free;
VII. Une icône▲
var
Icone: TIcon;
begin
Icone := TIcon.Create;
Icone.Handle := LoadIcon(HInstance, 'MONICON'
);
Icon := Icone;
Image1.Picture.Icon := Icon;
Icone.free;
End
;
VIII. Un son Wav▲
Pour jouer un son au format WAV, il faut déclarer l'unité MMSystem dans la clause 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
;
IX. Un son MP3▲
Pour jouer un son au format 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'événement OnClose du TForm, mettre mp3Joue.Close;
X. Un fichier exécutable▲
var
path : string
;
begin
path := ExtractFilePath(Application.ExeName); // Je récupè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.
XI. Un curseur de souris▲
Screen.Cursors[1
] := LoadCursor(HInstance, 'MONCURSEUR'
); // On extrait le Curseur du Ressource
button12.Cursor := 1
; // On lui dit où le curseur doit apparaître
self
.Cursor := 1
; // On lui dit où le curseur doit apparaître
XII. Un texte d'une StringTable▲
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 appelle.
XIII. 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 sûr, je sais qu'il y a certainement plus simple à faire que ce que j'ai fait, 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 soutien et merci pour la correction d'orthographe.