[Dll] Inclure des images dans une .Dll et les charger ensuite.

Résolu
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 - 11 janv. 2006 à 18:59
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 17 janv. 2006 à 17:42
Bonjoir !

A mon tour d'avoir un problème sans solution :
J'ai une form1 avec un composant TImage posé. (super !)
J'ai 20mo d'images à charger dedans. DONC si j'inclus mes 20mo de BMP en .res, mon exe fera 20.5mo, vraiment pas top.
J'ai pensé à inclure donc mes images dans un DLL (de 20mo donc :/) pour pouvoir faire un exe de 500k. je pourrais meme mettre à jour mes images sans toucher à l'exe.
Ma question est donc : comment mettre ces images dans ma dll pour ensuite les apeller dans mon TImage sur ma form1 de mon projet ?

ps : D'autres solutions existent, je suis preneur MAIS je veux tout de meme reussir à mettre des images dans une dll pour les charger par la suite.
ps2 : non, je ne peux pas utiliser des JPG, juste des BMP bien lourdes ^^

13 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
11 janv. 2006 à 23:13
Il n'est pas plus difficile d'inclure une ressource dans une DLL que dans un exe puisque la directive est la même : $r. On ne fait même plus attention à ce que l'IDE fait tout seul en ajoutant {$R *.dfm} au début des sections implémentation ou dans une DLL comme ceci :
library Project2;

uses
SysUtils,
Classes;

{$R *.res}

begin
end..
Il suffit d'en faire autant en ajoutant, de la même manière :
library Project2;
uses
SysUtils,
Classes;

{$R *.res}
{$R MaRessource.res}
begin
end.
Pour te faciliter la tâche, un éditeur de ressources comme RES_HIA peut faire gagner beaucoup de temps et éviter les erreurs de frappe, surtout si tu as beaucoup de fichiers à inclure.
<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
12 janv. 2006 à 01:59
Salut,

Voici un petit exemple vite fait testé sous D4 OK

MesIMG.rc :

CLOUD BITMAP "Cloud.bmp"

la DLL :

library ResDLL;


uses
SysUtils,
Classes;
{$R MesIMG.res}
begin
end.

Le Prog. :

unit Unit1;


interface


uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;


type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;


var
Form1: TForm1;


implementation


{$R *.DFM}


procedure TForm1.Button1Click(Sender: TObject);
Var
hRes : Cardinal;
begin
hRes := LoadLibrary('ResDLL.dll');
If hRes <> 0 Then
Try
Image1.Picture.Bitmap.LoadFromResourceName(hRes, 'CLOUD');
Finally
FreeLibrary(hRes);
End;
end;


end.

en espérant que ça t'aideras

@+
Cirec
3
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
17 janv. 2006 à 16:12
Attention de ne pas poser de nouvelles questions DANS une question du forum, il est plus utile de créer une nouvelle question =)
3
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
11 janv. 2006 à 19:00
ps3 : merci à vous d'avance =)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Abadianet Messages postés 40 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 19 juin 2006 1
11 janv. 2006 à 20:19
Bonsoir JulioDelphi,

Pourquoi ne pas mettre tes images dans une base de données
J'utilise Absolute Database (http://www.componentace.com).
Tu as une version Free pour une utilisation perso et tes images sont compressées dans la base (d'où un gain de place en plus !)
Au final tu n’as que ton exe et le seul fichier (*.ABS) pour ta base de données (pas de DLL ou autres fichier à ajouter)

Abadiane
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
11 janv. 2006 à 20:34
Oui pourquoi pas, je DL ça et je test.
J'ai zippé mes images pour le moment dans un zip renommé en .dll (houuu l'affreux !!!) je ne gagne meme pas 1mo :/

Bon, a part cette solution ^^ je souhaite de toute façon savoir comment mettre des images dans une dll pour lex charger dans mon TImage sur ma form =)

merci abadianet
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
11 janv. 2006 à 21:14
JulioDelphi is back !
En clair, tu veux créer et utiliser une DLL de resources.
Pour cela, je te conseille de (re)visiter le site de Delphicool sur l'utilisation des ressources.
Note bien que le paramètre HInstance utilisé peut être celui renvoyé par la fonction LoadLibrary.
<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
11 janv. 2006 à 21:23
J'ai usé cette page et mon clavier dessus par la même occasion :( d'autres pages parlant de DLL en ressources aussi.
Je sais mettre des images dans un .res, aller les chercher etc, mais pas dans une DLL.
est-ce si différent ?
(en fait ce sont des .GIF que je veux utiliser mais bon, là n'est pas le soucis du format d'image.)
C'est un problème qui date en fait pour moi, mais ma pause Delphi n'a pas amélioré la chose ^^
Bon, je vais prendre cette page et la rererelire (je n'ai pas encore recup le net chez moi :s)

Dès que je trouve, je post ici. si quelqu'un a encore plus de details, alors n'hesitez pas je suis preneur =^)

ps@delphiprog : durdur de s'y remettre, mais motivé comme toujours :p
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
12 janv. 2006 à 16:33
mais...mais...MAIS !
c'est "aussi bête" que ça ? dis donc, j'ai cherché midi à quatorze heures moi ...
holala ! je test ça ce soir Oo
merci =)
0
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
15 janv. 2006 à 20:14
Salut ,

tout d abbord merci delphiprog pour l astuce et cirec pour l exemple

Mais j aimerais poser une question a la suite de tout cela

Comment se fait il que mon fichier .res pese seulement 65ko et ma .dll elle 149ko ???

Merci

Ciao
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
15 janv. 2006 à 21:58
Comment pourrait-on te répondre sans avoir connaissance des autres unités ou du code inclus par ailleurs dans ta DLL ?

Indications :
Une DLL standard (avec SysUtils et Classes) fait 89088 octets.
Une DLL Standard n'incluant aucune autre unité fait : 15872 octets.

Pour une DLL n'incluant que des ressources, tu dois pouvoir te passer des services de Classes et SyUtils à mon avis.
<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
16 janv. 2006 à 18:00
Merci Delphiprog

Je vais essayer sans Classes et SyUtils
Deja j avais pas fait attention que je mettais autres chose que mon fichier .res ds la dll ... enfin il y en avait 2 ...

Ciao
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
17 janv. 2006 à 17:42
Disons que la question de Nicolas___ était très complémentaire à la tienne.
Néanmoins, je valide ta réponse, moi
<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
Rejoignez-nous