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

JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 11 janv. 2006 à 18:59 - Dernière réponse : cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention
- 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 ^^
Afficher la suite 

Votre réponse

13 réponses

cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 11 janv. 2006 à 23:13
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Delphiprog
Cirec 4221 Messages postés vendredi 23 juillet 2004Date d'inscription 11 mai 2018 Dernière intervention - 12 janv. 2006 à 01:59
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Cirec
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 17 janv. 2006 à 16:12
+3
Utile
Attention de ne pas poser de nouvelles questions DANS une question du forum, il est plus utile de créer une nouvelle question =)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de JulioDelphi
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 11 janv. 2006 à 19:00
0
Utile
ps3 : merci à vous d'avance =)
Commenter la réponse de JulioDelphi
Abadianet 50 Messages postés mercredi 2 novembre 2005Date d'inscription 19 juin 2006 Dernière intervention - 11 janv. 2006 à 20:19
0
Utile
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
Commenter la réponse de Abadianet
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 11 janv. 2006 à 20:34
0
Utile
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
Commenter la réponse de JulioDelphi
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 11 janv. 2006 à 21:14
0
Utile
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.
Commenter la réponse de cs_Delphiprog
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 11 janv. 2006 à 21:23
0
Utile
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
Commenter la réponse de JulioDelphi
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 12 janv. 2006 à 16:33
0
Utile
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 =)
Commenter la réponse de JulioDelphi
Nicolas___ 1039 Messages postés jeudi 2 novembre 2000Date d'inscription 24 avril 2013 Dernière intervention - 15 janv. 2006 à 20:14
0
Utile
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
Commenter la réponse de Nicolas___
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 15 janv. 2006 à 21:58
0
Utile
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.
Commenter la réponse de cs_Delphiprog
Nicolas___ 1039 Messages postés jeudi 2 novembre 2000Date d'inscription 24 avril 2013 Dernière intervention - 16 janv. 2006 à 18:00
0
Utile
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
Commenter la réponse de Nicolas___
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 17 janv. 2006 à 17:42
0
Utile
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.
Commenter la réponse de cs_Delphiprog

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.