Composant tthrescollection

Soyez le premier à donner votre avis sur cette source.

Vue 3 621 fois - Téléchargée 514 fois

Description

TThResCollection sert de conteneur de "ressources" non compilées avec l'application.

Vous pouvez l'utiliser comme un fichier ressources traditionnel, mais c'est surtout utile, par exemple, dans un programme offrant à l'utilisateur des options de personnalisation (images, sons, texte, icônes...). Tout se retrouve dans un seul fichier, plus besoin d'en ouvrir parfois des dizaines au démarrage de l'application. Vous pouvez y stocker... n'importe quoi.

Très facile à utiliser : consultez le fichier pdf ci-joint.

ResCollectionEditor : programme de création de fichier.

Test.r : exemple de fichier resssources à ouvrir avec ResCollectionEditor.

Conclusion :


Petit code sans prétention, mais comme il m'est très utile...
Merci d'avance pour vos commentaires.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
54
Date d'inscription
dimanche 23 février 2003
Statut
Membre
Dernière intervention
21 décembre 2009

Superbe !!!!
TThResCollection décuple les possibilités de Delphi !

Je l'utilise pour mettre au point un logiciel, mais je bloque sur un point.
Je génère des pdf grâce à LibHaru, qui permet d'inclure des images dans un pdf grâce à

HPDF_LoadRawImageFromMem()

HPDF_Image HPDF_LoadRawImageFromMem (HPDF_Doc pdf, const HPDF_BYTE *buf, HPDF_UINT width,
HPDF_UINT height,
HPDF_ColorSpace color_space,
HPDF_UINT bits_per_component);

Parameters

buf - The pointer to the image data.

c'est là mon problème : ce pointeur vers les données images est un HPDF_BYTE (pointeur sur un BYTE) et je ne sais pas s'il est possible grâce à TThResCollection d'obtenir un tel pointeur...

Autrement, je serais obligé d'enregistrer un fichier image à partir des images de la collection et de les recharger ensuite... pas très élégant ?

Merci !
Messages postés
418
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
26 novembre 2013
3
Merci Jean_Jean.
Je suis également heureux de voir que cette source te sera utile.
Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
3
Excuse moi ThWilliam!
C'est l'inconvénient des amateurs occupés par ailleurs. Ils découpent leur temps comme les processeurs multitâches sauf qu'ils n'ont pas leur mémoire infaillible.
C'est donc OK, ton code répond bien aux promesses que j'avais entrevu en regardant justement ton pdf très clair.
Donc je suis un Delphiste heureux.
Bravo!
Messages postés
418
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
26 novembre 2013
3
Salut Jean_Jean,

Je te le répète : mon code n'a rien avoir avec les fichiers ressources de Delphi.
Donc, tu oublies toutes les fonctions ou types qui les manipulent (TResourceStream, LoadFromResourceName...).

Pour ajouter dans TThResCollection un Jpeg (en partant d'un fichier Jpeg):
with ResCol.AddRes('SKINVISTA') do
SetResStream(RES_JPEG, 'mon fichier.jpg');

Pour afficher l'image jpeg:

var
ResRet: integer;
Jpg: TJpegImage;
begin
ResRet := ResCol.FindRes('SKINVISTA');
if (ResRet > -1) and (ResCol[ResRet].ResType = RES_JPEG) then
begin
Jpg:= TJpegImage.Create;
try
Jpg.LoadFromStream(ResCol[ResRet].ResStream);
ImgVignetteSkin.Picture.Assign(jpg);
finally
Jpg.Free;
end;
end;
end;

N'oublie pas de lire le fichier pdf joint dans le zip.

A +
Thierry
Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
3
Bj ThWilliam,
1. OK, ça marche pour les Bitmap.
2. Est-ce que tu prévois d'intégrer les images jpg ou png?
Non, je ne suis pas déçu, même si je pense que ça n'est pas encore l'appli parfaite que je recherche. J'apprends toujours des codes déposés. D'ailleurs, je note rarement les codes pour cette raison! ou alors qu'une bonne note!
Je pense qu'il ne faudrait pas grand chose pour intégrer un type jpeg dans le composant. On gagne souvent 50% en taille mémoire.
J'ai essayé en code externe avec le code ci-dessous, mais ça plante car il ne reconnait pas le format!
procedure TFormOptions.FormShow(Sender: TObject);
var ResRet : integer;
jpg : TjpegImage;
Res : TResourceStream;
begin
ResRet := ResCol.FindRes('SKINVISTA');
if ResRet > -1 then
begin
jpg := TJPEGimage.Create;
Res := TResourceStream.Create(hinstance, 'SKINVISTA', RT_RCDATA);
Jpg.LoadFromStream(Res);
ImgVignetteSkin.Picture.Bitmap.Assign(jpg);
Res.Free;
jpg.Free;
end;
end;
Je passe par un stream, mais je n'ai pas encore trouvé!
Si tu as la solution simple?!
3. Est-ce valable à ton avis d'intégrer ces fichiers ressources dans des Dll avec appel dynamique pour économiser de la mémoire. En effet, j'ai certaines fiches dans mon projet qui donnent la main à l'utilisateur avec la possibilité de choisir de nombreuses images. Ces opérations ne sont pas courantes au regard de l'utilisation du logiciel.

Merci pour ce code et tes réponses.
A+
Afficher les 11 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.