L'inclusion des fichiers comme des ressources dans une delphi exécutable


Vous pouvez apprendre comment créer votre propre logiciel pour n'importe quelle situation avec l'excellent Logiciels Exigences Déchaîné. Si vous avez besoin de savoir comment intégrer des icônes, des curseurs curseurs animés, des images, des images jpeg, des fichiers wave, fichiers texte et tout autre fichier à l'intérieur d'un Delphi exécutable, il suffit de garder la lecture!

l'inclusion des fichiers comme des ressources dans une Delphi exécutable
Il est possible d'intégrer n'importe quel type de fichier dans un fichier exécutable à l'aide de fichiers de ressources (*.RES). Certains types de ressources sont reconnus par l'API et peut être utilisé directement. D'autres sont simplement prises comme des données binaires et c'est à vous de les utiliser. Dans cet article nous allons voir des exemples de ces deux types.

Pour créer le fichier de ressources, nous commençons avec le fichier source (*.RC), par exemple les RESSOURCES nommées.RC, qui est un simple fichier texte qui contient les entrées de ressource (nom, la classe et le fichier):

sample_bmp BITMAP de l'échantillon.bmp

sample_ico ICÔNE de l'échantillon.ico

sample_cur CURSEUR de l'échantillon.cur

sample_ani ANICURSOR de l'échantillon.ani

sample_jpg JPEG sample.jpg

sample_wav d'ONDE de l'échantillon.wav

sample_txt TEXTE sample.txt
Les noms des ressources (sample_bmp, sample_ico, etc.) sont arbitraires. Le type de ressource peut être reconnu par l'Api (BITMAP, ICÔNE, CURSEUR) ou arbitraires (JPEG, la VAGUE, le TEXTE). Les noms de fichier spécifier les fichiers qui seront inclus dans le .Fichier RES (et plus tard dans le .EXE).

Maintenant, nous avons pour compiler le .Fichier RC pour produire de l' .Fichier RES. Pour cela, nous pouvons utiliser Borland Compilateur de Ressources (brcc32.exe) que vous pouvez probablement trouver dans Delphi dossier BIN. C'est un simple utilitaire de ligne de commande qui attend le nom de la source de fichier en paramètre:

C:\DELPHI\P0025>brcc32 ressources

Borland Compilateur de Ressources Version 5.40

Copyright (c) 1990, 1999 Inprise Corporation. Tous droits réservés.

C:\DELPHI\P0025>_
Pour charger l'éditeur de liens pour intégrer le fichier de ressources dans le fichier exécutable, nous utilisons le fichier de ressources de la directive ($R $ou $ RESSOURCE) dans notre Pascal ource code:

{$R ressources.res}
Chargement des ressources dans votre application est facile pour l' 'se succèdent dans le temps' des ressources comme BITMAP, ICÔNE, CURSEUR, depuis l'API Windows fournit des fonctions (LoadBitmap, LoadIcon et LoadCursor respectivement) pour obtenir les poignées de ces éléments, que, par exemple, nous pouvons attribuer à la propriété Handle de l'objet correspondant:

Image1.Image.Bitmap.Poignée :=

LoadBitmap(hInstance, 'sample_bmp')

Icône.Poignée := LoadIcon(hInstance, 'sample_ico')

l'Écran.Les curseurs[1] := LoadCursor(hInstance, 'sample_cur')
Pour plus d'alternatives lors du chargement de l'image des ressources, voir l'API LoadImage.

d'Autres ressources sont un peu plus difficiles à gérer. Commençons avec des images JPEG. La fonction suivante utilise TResourceStream pour charger la ressource comme un flux qui va être chargé dans un TJPEGImage objet:

la fonction GetResourceAsJpeg(const resname: string): TJPEGImage

var

Stream: TResourceStream

commencer

Stream := TResourceStream.Créer(hInstance, ResName, 'JPEG')

Résultat := TJPEGImage.Créer

Résultat.LoadFromStream(Stream)

enfin

Stream.Gratuit

fin

fin
Exemple:

var

Jpg: TJPEGImage

commencer

// ...

Jpg := GetResourceAsJpeg('sample_jpg')

Image2.Image.Bitmap.Attribuer(Jpg)

Jpg.Gratuit

// ...

fin
Pour les fichiers WAV nous avons besoin d'un pointeur vers la ressource chargé en mémoire, et un fichier texte nous avons besoin de charger une ressource dans une chaîne de caractères. Nous pouvons le faire en utilisant TResourceStream, mais nous allons voir un exemple d'utilisation de l'API:

la fonction GetResourceAsPointer(ResName: pchar ResType: pchar

out Taille: longword): pointeur

var

InfoBlock: HRSRC

GlobalMemoryBlock: HGLOBAL

commencer

InfoBlock := FindResource(hInstance, resname, restype)

si InfoBlock = 0 alors

raise Exception.Créer(SysErrorMessage(GetLastError))

taille := SizeofResource(hInstance, InfoBlock)

si taille = 0, alors

raise Exception.Créer(SysErrorMessage(GetLastError))

GlobalMemoryBlock := LoadResource(hInstance, InfoBlock)

si GlobalMemoryBlock = 0 alors

raise Exception.Créer(SysErrorMessage(GetLastError))

Résultat := LockResource(GlobalMemoryBlock)

si Résultat = nil alors

raise Exception.Créer(SysErrorMessage(GetLastError))

fin

la fonction GetResourceAsString(ResName: pchar ResType: pchar): string

var

ResData: PChar

ResSize: Longword

commencer

ResData := GetResourceAsPointer(resname, restype, ResSize)

SetString(Résultat, ResData, ResSize)

fin
exemples d'appels:

var

sample_wav: pointeur

procedure TForm1.FormCreate(Sender: TObject)

var

taille: longword

commencer

...

sample_wav := GetResourceAsPointer('sample_wav', 'wave', taille)

Memo1.Les lignes.Text := GetResourceAsString('sample_txt', 'texte')

fin
une Fois que nous avons la vague de ressources chargé dans la mémoire nous permet de jouer autant de fois que nous voulons en utilisant l'API sndPlaySound déclaré dans le MMSystem de l'unité:

procedure TForm1.Button1Click(Sender: TObject)

commencer

sndPlaySound(sample_wav, SND_MEMORY ou SND_NODEFAULT ou SND_ASYNC)

fin
Il y a certaines ressources, comme les polices et les curseurs animés) qui ne peuvent pas être utilisés à partir de la mémoire. Nous devons impérativement sauvegarder ces ressources à un fichier de disque temporaire et de les charger à partir de là. La fonction suivante permet d'économiser des ressources dans un fichier:

procédure SaveResourceAsFile(const ResName: string ResType: pchar

const FileName: string)

commencer

avec TResourceStream.Créer(hInstance, ResName, ResType) n'

SaveToFile(nom de fichier)

enfin

fin

fin
La fonction suivante permet l'utilisation de la précédente pour enregistrer une ressource dans un fichier temporaire:

la fonction SaveResourceAsTempFile(const ResName: string

ResType: pchar): string

commencer

Résultat := CreateTempFile

SaveResourceAsFile(ResName, ResType, Résultat)

fin
La discussion de la fonction CreateTempFile tombe au-delà de la portée de cet article et sa mise en œuvre peut être vu dans l'exemple joint au bulletin d'information.

La fonction suivante permet l'utilisation de SaveResourceAsTempFile pour enregistrer une animation curseur de la ressource dans un fichier temporaire, puis il charge le curseur du fichier avec LoadImage et enfin supprime le fichier temporaire. La fonction retourne le handle retourné par LoadImage:

la fonction GetResourceAsAniCursor(const ResName: string): HCursor

var

CursorFile: string

commencer

CursorFile := SaveResourceAsTempFile(ResName, 'ANICURSOR')

Résultat := LoadImage(0, PChar(CursorFile), IMAGE_CURSOR, 0,

0, LR_DEFAULTSIZE ou LR_LOADFROMFILE)

DeleteFile(CursorFile)

si le Résultat = 0 alors

raise Exception.Créer(SysErrorMessage(GetLastError))

fin
Exemple d'appel:

l'Écran.Les curseurs[1] := GetResourceAsAniCursor('sample_ani')

Form1.Curseur := 1
eh Bien, c'est ça. J'espère que vous le trouverez utile. Vous pouvez trouver plus d'informations sur les fichiers de ressources dans la Bibliothèque MSDN:

http://msdn.microsoft.com/library/en-us/winui/hh/winui/rc_6cs3.asp

Vous pouvez trouver le code source complet de cet article dans les archives qui accompagne le Pascal Newsletter #25.









L'inclusion des fichiers comme des ressources dans une delphi executable


L'inclusion des fichiers comme des ressources dans une delphi executable : Plusieurs milliers de conseils pour vous faciliter la vie.


Vous pouvez apprendre comment creer votre propre logiciel pour n'importe quelle situation avec l'excellent Logiciels Exigences Dechaîne. Si vous avez besoin de savoir comment integrer des icones, des curseurs curseurs animes, des images, des images jpeg, des fichiers wave, fichiers texte et tout autre fichier a l'interieur d'un Delphi executable, il suffit de garder la lecture!

l'inclusion des fichiers comme des ressources dans une Delphi executable
Il est possible d'integrer n'importe quel type de fichier dans un fichier executable a l'aide de fichiers de ressources (*.RES). Certains types de ressources sont reconnus par l'API et peut etre utilise directement. D'autres sont simplement prises comme des donnees binaires et c'est a vous de les utiliser. Dans cet article nous allons voir des exemples de ces deux types.

Pour creer le fichier de ressources, nous commençons avec le fichier source (*.RC), par exemple les RESSOURCES nommees.RC, qui est un simple fichier texte qui contient les entrees de ressource (nom, la classe et le fichier):

sample_bmp BITMAP de l'echantillon.bmp

sample_ico ICONE de l'echantillon.ico

sample_cur CURSEUR de l'echantillon.cur

sample_ani ANICURSOR de l'echantillon.ani

sample_jpg JPEG sample.jpg

sample_wav d'ONDE de l'echantillon.wav

sample_txt TEXTE sample.txt
Les noms des ressources (sample_bmp, sample_ico, etc.) sont arbitraires. Le type de ressource peut etre reconnu par l'Api (BITMAP, ICONE, CURSEUR) ou arbitraires (JPEG, la VAGUE, le TEXTE). Les noms de fichier specifier les fichiers qui seront inclus dans le .Fichier RES (et plus tard dans le .EXE).

Maintenant, nous avons pour compiler le .Fichier RC pour produire de l' .Fichier RES. Pour cela, nous pouvons utiliser Borland Compilateur de Ressources (brcc32.exe) que vous pouvez probablement trouver dans Delphi dossier BIN. C'est un simple utilitaire de ligne de commande qui attend le nom de la source de fichier en parametre:

C:\DELPHI\P0025>brcc32 ressources

Borland Compilateur de Ressources Version 5.40

Copyright (c) 1990, 1999 Inprise Corporation. Tous droits reserves.

C:\DELPHI\P0025>_
Pour charger l'editeur de liens pour integrer le fichier de ressources dans le fichier executable, nous utilisons le fichier de ressources de la directive ($R $ou $ RESSOURCE) dans notre Pascal ource code:

{$R ressources.res}
Chargement des ressources dans votre application est facile pour l' 'se succedent dans le temps' des ressources comme BITMAP, ICONE, CURSEUR, depuis l'API Windows fournit des fonctions (LoadBitmap, LoadIcon et LoadCursor respectivement) pour obtenir les poignees de ces elements, que, par exemple, nous pouvons attribuer a la propriete Handle de l'objet correspondant:

Image1.Image.Bitmap.Poignee :=

LoadBitmap(hInstance, 'sample_bmp')

Icone.Poignee := LoadIcon(hInstance, 'sample_ico')

l'Ecran.Les curseurs[1] := LoadCursor(hInstance, 'sample_cur')
Pour plus d'alternatives lors du chargement de l'image des ressources, voir l'API LoadImage.

d'Autres ressources sont un peu plus difficiles a gerer. Commençons avec des images JPEG. La fonction suivante utilise TResourceStream pour charger la ressource comme un flux qui va etre charge dans un TJPEGImage objet:

la fonction GetResourceAsJpeg(const resname: string): TJPEGImage

var

Stream: TResourceStream

commencer

Stream := TResourceStream.Creer(hInstance, ResName, 'JPEG')

Resultat := TJPEGImage.Creer

Resultat.LoadFromStream(Stream)

enfin

Stream.Gratuit

fin

fin
Exemple:

var

Jpg: TJPEGImage

commencer

// ...

Jpg := GetResourceAsJpeg('sample_jpg')

Image2.Image.Bitmap.Attribuer(Jpg)

Jpg.Gratuit

// ...

fin
Pour les fichiers WAV nous avons besoin d'un pointeur vers la ressource charge en memoire, et un fichier texte nous avons besoin de charger une ressource dans une chaîne de caracteres. Nous pouvons le faire en utilisant TResourceStream, mais nous allons voir un exemple d'utilisation de l'API:

la fonction GetResourceAsPointer(ResName: pchar ResType: pchar

out Taille: longword): pointeur

var

InfoBlock: HRSRC

GlobalMemoryBlock: HGLOBAL

commencer

InfoBlock := FindResource(hInstance, resname, restype)

si InfoBlock = 0 alors

raise Exception.Creer(SysErrorMessage(GetLastError))

taille := SizeofResource(hInstance, InfoBlock)

si taille = 0, alors

raise Exception.Creer(SysErrorMessage(GetLastError))

GlobalMemoryBlock := LoadResource(hInstance, InfoBlock)

si GlobalMemoryBlock = 0 alors

raise Exception.Creer(SysErrorMessage(GetLastError))

Resultat := LockResource(GlobalMemoryBlock)

si Resultat = nil alors

raise Exception.Creer(SysErrorMessage(GetLastError))

fin

la fonction GetResourceAsString(ResName: pchar ResType: pchar): string

var

ResData: PChar

ResSize: Longword

commencer

ResData := GetResourceAsPointer(resname, restype, ResSize)

SetString(Resultat, ResData, ResSize)

fin
exemples d'appels:

var

sample_wav: pointeur

procedure TForm1.FormCreate(Sender: TObject)

var

taille: longword

commencer

...

sample_wav := GetResourceAsPointer('sample_wav', 'wave', taille)

Memo1.Les lignes.Text := GetResourceAsString('sample_txt', 'texte')

fin
une Fois que nous avons la vague de ressources charge dans la memoire nous permet de jouer autant de fois que nous voulons en utilisant l'API sndPlaySound declare dans le MMSystem de l'unite:

procedure TForm1.Button1Click(Sender: TObject)

commencer

sndPlaySound(sample_wav, SND_MEMORY ou SND_NODEFAULT ou SND_ASYNC)

fin
Il y a certaines ressources, comme les polices et les curseurs animes) qui ne peuvent pas etre utilises a partir de la memoire. Nous devons imperativement sauvegarder ces ressources a un fichier de disque temporaire et de les charger a partir de la. La fonction suivante permet d'economiser des ressources dans un fichier:

procedure SaveResourceAsFile(const ResName: string ResType: pchar

const FileName: string)

commencer

avec TResourceStream.Creer(hInstance, ResName, ResType) n'

SaveToFile(nom de fichier)

enfin

fin

fin
La fonction suivante permet l'utilisation de la precedente pour enregistrer une ressource dans un fichier temporaire:

la fonction SaveResourceAsTempFile(const ResName: string

ResType: pchar): string

commencer

Resultat := CreateTempFile

SaveResourceAsFile(ResName, ResType, Resultat)

fin
La discussion de la fonction CreateTempFile tombe au-dela de la portee de cet article et sa mise en œuvre peut etre vu dans l'exemple joint au bulletin d'information.

La fonction suivante permet l'utilisation de SaveResourceAsTempFile pour enregistrer une animation curseur de la ressource dans un fichier temporaire, puis il charge le curseur du fichier avec LoadImage et enfin supprime le fichier temporaire. La fonction retourne le handle retourne par LoadImage:

la fonction GetResourceAsAniCursor(const ResName: string): HCursor

var

CursorFile: string

commencer

CursorFile := SaveResourceAsTempFile(ResName, 'ANICURSOR')

Resultat := LoadImage(0, PChar(CursorFile), IMAGE_CURSOR, 0,

0, LR_DEFAULTSIZE ou LR_LOADFROMFILE)

DeleteFile(CursorFile)

si le Resultat = 0 alors

raise Exception.Creer(SysErrorMessage(GetLastError))

fin
Exemple d'appel:

l'Ecran.Les curseurs[1] := GetResourceAsAniCursor('sample_ani')

Form1.Curseur := 1
eh Bien, c'est ça. J'espere que vous le trouverez utile. Vous pouvez trouver plus d'informations sur les fichiers de ressources dans la Bibliotheque MSDN:

http://msdn.microsoft.com/library/en-us/winui/hh/winui/rc_6cs3.asp

Vous pouvez trouver le code source complet de cet article dans les archives qui accompagne le Pascal Newsletter #25.


L'inclusion des fichiers comme des ressources dans une delphi exécutable

L'inclusion des fichiers comme des ressources dans une delphi exécutable : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation