[DELPHI.NET] utilisation de ressources

Fermé
pitch6969 Messages postés 57 Date d'inscription vendredi 24 mars 2006 Statut Membre Dernière intervention 2 août 2007 - 13 mai 2006 à 15:04
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 - 7 nov. 2006 à 13:43
Bonjour,



Je voudrais créer un fichier de ressources (images BMP) pour un projet .Net

J'ai utiliser le tutorial n°120 qui est vraiment très bien fait. J'ai
téléchargé le source pourvoir comment cela fonctionne (application
win32). J'ai effectuer la même chose pour mon application .Net et cela
ne fonctionne pas.



J'ai créé un fichier client.rc. J'ai ensuite utilisé l'interprétateur
de commande pour générer le fichier .res via la commande brcc32.

Il y a cela d'écrit dans mon fichier .rc :



BITMAP001 BITMAP c:\\image.bmp



Après génération du fichier client.res, je rajoute le fichier
client.res à mon répertoire de projet; j'ajoute la référence dans
mon code. Ensuite quand je veux charger mon image je fais :



image.picture.bitmap.loadFromResourceName(0,'BITMAP001');



Mais cela ne marche pas. Est-ce que quelqu'un a déjà rencontré le problème ?

Quelqu'un a la solution ?



Merci de m'aider.



Cordialement



PITCH6969

21 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
13 mai 2006 à 15:19
Salut,

essaye voir de changer le nom "BITMAP0001" par un nouméro Ex : "100"

et de l'appeler comme ceci

Image1.Picture.Bitmap.LoadFromResourceID(hinstance, 100);

@+
Cirec
0
pitch6969 Messages postés 57 Date d'inscription vendredi 24 mars 2006 Statut Membre Dernière intervention 2 août 2007
13 mai 2006 à 15:25
je te remercie de ta réponse.

c'est quoi hinstance, je le déclare ou ?



Cordialement



PITCH 6969
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
13 mai 2006 à 15:31
tu n'as pas besoin de déclarer hinstance
hinstance est le Handle de l'instance en cours
en claire si la ressource est dans ton application, hinstance te fournis le handle correspondant

@+
Cirec
0
pitch6969 Messages postés 57 Date d'inscription vendredi 24 mars 2006 Statut Membre Dernière intervention 2 août 2007
13 mai 2006 à 15:42
J'ai essayé de faire ce que tu m'as indiqué. La méthode rsourceid attends 2 entier.

J'ai donc écrit :



Image1.Picture.Bitmap.LoadFromResourceID(0, 100);



quand je veux lui plcar hinstance il ne connait pas.



Cordialement,



pitch6969
0

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

Posez votre question
pitch6969 Messages postés 57 Date d'inscription vendredi 24 mars 2006 Statut Membre Dernière intervention 2 août 2007
13 mai 2006 à 15:53
Ce que j'ai écrit au dessus ne fonctionne pas l'image ne s'affiche pas.



PITCH 6969
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
13 mai 2006 à 15:55
Ton projet est il vraiment sous .NET ?
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
13 mai 2006 à 15:58
il faut aussi, après avoir changer le fichier ressource, faire "Construire le Projet"
une compilation seule ne prend pas toujours en comptes les modifications dans le fichier ressource

pour hinstance il ne doit pas être disponible sous .NET (enfin je pense) je vois que cela

@+
Cirec
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
13 mai 2006 à 16:01
ps : peux tu donner les première lignes de ton codes (jusqu'a l'implementation)
et la procedure qui charge l'image ?

@+
Cirec
0
pitch6969 Messages postés 57 Date d'inscription vendredi 24 mars 2006 Statut Membre Dernière intervention 2 août 2007
13 mai 2006 à 16:12
j'ai reconstruit le projet mais ça ne marche toujours pas !!

J'ai pourtant suivi la méthode à la lettre.

As-tu d'autres idées ?



Cordialement,



Pitch6969
0
pitch6969 Messages postés 57 Date d'inscription vendredi 24 mars 2006 Statut Membre Dernière intervention 2 août 2007
13 mai 2006 à 16:16
projet.exe



uses



//ensemble des formes de mon code



{$R *.RES}





dans ma feuille principal sur le form show, je fais :



Image1.Picture.Bitmap.LoadFromResourceID(0, 100);



Cordialement,

PITH6969
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
13 mai 2006 à 16:17
Pour essayer de voir un peut plus loin il faudrait un bout de code et même si c'est possible le code complet
et si toute fois il est trop long tu peux toujours réécrir un code qui ne fait que charger l'image comme ça tu pourras le poster ici.

@+
Cirec
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
13 mai 2006 à 16:20
pour l'instant ce que tu as posté comme code ne m'en dit pas plus il me parait ressembler a un code Win32

@+
Cirec
0
pitch6969 Messages postés 57 Date d'inscription vendredi 24 mars 2006 Statut Membre Dernière intervention 2 août 2007
13 mai 2006 à 16:27
//code de l'exe



program Client;



{%DelphiDotNetAssemblyCompiler '$(SystemRoot)\microsoft.net\framework\v1.1.4322\System.dll'}

{%DelphiDotNetAssemblyCompiler '$(SystemRoot)\microsoft.net\framework\v1.1.4322\System.Data.dll'}

{%DelphiDotNetAssemblyCompiler '$(SystemRoot)\microsoft.net\framework\v1.1.4322\System.Drawing.dll'}

{%DelphiDotNetAssemblyCompiler '$(SystemRoot)\microsoft.net\framework\v1.1.4322\System.XML.dll'}

{%DelphiDotNetAssemblyCompiler 'c:\program files\fichiers communs\borland shared\bds\shared assemblies\3.0\Borland.Vcl.dll'}

{%DelphiDotNetAssemblyCompiler 'c:\program files\fichiers communs\borland shared\bds\shared assemblies\3.0\Borland.Delphi.dll'}

{%DelphiDotNetAssemblyCompiler 'c:\program files\fichiers communs\borland shared\bds\shared assemblies\3.0\Borland.VclRtl.dll'}

uses

System.Reflection,

System.Runtime.CompilerServices,

SysUtils,

Forms,

A_propos in 'principal.pas' {principal.TFprincipal : Borland.Vcl.Forms.TForm},





{$R *.Res}



[STAThread]



begin

Application.Initialize;

Application.CreateForm(TFprincipal, Fprincipal);

Application.Run;

end.





//procedure formShow de ma fenetre principal



procedure TFprincipal.FormShow(Sender: TObject);

begin

//image 1 est dans mon formulaire



image1.Picture.Bitmap.LoadFromResourceName(0,'1');

end;
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
13 mai 2006 à 16:36
Bon c'est ce que craignais : c'est du .NET

je ne me suis pas encore essayer au .NET mais je vais quand même voir si je peu résoudre ton problème.

Par contre il faudra avoir un peut de patience je dois m'absenter pour le reste de l'après midi
mais dès que .. je tiens au courant (positif où négatif)

@+
Cirec
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
13 mai 2006 à 18:19
Salut,


j'ai enfin réussi à charger une image depuis une ressource en .NET :

Voici comment : (Source complet de la Form principale)

unit Unit1;


interface


uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, System.ComponentModel, Borland.Vcl.ExtCtrls;


type
TForm1 = class (TForm)
Image1: TImage;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
private
{ Déclarations privées}
public
{ Déclarations publiques}
end;


var
Form1: TForm1;
RessHandle : THandle = 0;


implementation


{$R *.nfm}
{$R Images.res}


procedure TForm1.FormShow(Sender: TObject);
begin
RessHandle := LoadLibrary('Project1.exe');
If RessHandle <> 0 Then
Image1.Picture.Bitmap.LoadFromResourceName(RessHandle, 'XpImg');
end;


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
If RessHandle <> 0 Then
FreeLibrary(RessHandle);
end;


end.

Bon j'ai fait ça rapidement mais il serait préférable de mettre le code dans un bloc Try Finally


<HR>

n'oubliez pas de cliquer sur Réponse Acceptée
si elle vous convient


<HR>

@+
Cirec
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
14 mai 2006 à 00:40
Le code en delphi .Net est quasi identique à celui écrit en Delphi pour Win 32 tant que l'on utilise la VCL .Net.


Son problème ? tout simplement, il avait oublié d'inclure la ressource contenant le bitmap. En effet, la ligne contenant {$R *.res} ne signifie pas "inclure tous les fichiers .res" comme on peut le supposer. Il faut déclarer explicitement l'inclusion d'une ressource et c'est ce qu'a fait Cirec dans son code.

A titre d'information, j'ai découvert récemment qu'en ajoutant le fichier .rc au projet, Delphi (pour Win 32) le compilait tout seul sans avoir besoin de passer par brcc32 !

May Delphi be with you !

<HR color=#008000>


Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
14 mai 2006 à 06:45
salut a tous les gnomes!

moi ce qui m'eclate le plus dans ce topic c'est ça :

BITMAP001 BITMAP c:\\image.bmp

je doute que windows accepte que l'on fasse :
c:\>md "rien, nada, neant"
c:\>cd "rien, nada, neant"
c:\\>

donc

deja :

BMP1000 BITMAP c:\image.bmp

ensuite aprés la clause INTERFACE de l'unité :

{$R FichierRes.res}

ensuite

bitmap.LoadFromResource(Application.Handle, 'BMP1000');

ou encore :

var RES : TResourceStream;
begin
RES := TResourceStream.Create;
RES := FindResource(Application.Handle, 'BMP1000');
Bitmap.LoadFromStream(RES);
RES.Free;
end;
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
14 mai 2006 à 12:22
Salut,

@F0xi : as tu essayer ce que tu as donné ( sous .NET) ?

bon moi je l'ai fait :

bitmap.LoadFromResource(Application.Handle, 'BMP1000'); //Inconnu


éventuellement
bitmap.LoadFromResourceName(Application.Handle, 'BMP1000'); // Mais ça ne fonctionne pas

ou encore :


begin
RES := TResourceStream.Create;
RES := FindResource(Application.Handle, 'BMP1000');
Bitmap.LoadFromStream(RES);
RES.Free;
end;
[Erreur] Unit1.pas(33): E2250 Aucune version surchargée de 'FindResource' ne peut être appelée avec ces arguments

Voila et d'ailleurs si quelqu'un sait pourquoi où comment on accède au ressource de l'application en .NET ?
La seule méthode qui fonctionne c'est celle que j'ai donné dans mon précédant post

moi ce qui m'eclate le plus dans ce topic c'est ça :

BITMAP001 BITMAP c:\\image.bmp

Si tu avais lu la suite tu aurais lu ceci :

"Après génération du fichier client.res, je rajoute le fichier client.res à mon répertoire de projet; j'ajoute la référence dans mon code."

Ce qui veut dire que la ressource a été compilé donc soit c'est une erreur de copie où BRCC32 l'accèpte tel quel


En tous cas c'est la première fois que je vois une réponse en vert qui ne fonctionne pas


@+
Cirec
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
14 mai 2006 à 13:02
Bon alors pour l'information de Monsieur F0xi (le Maître des Gnomes) :

XpImg BITMAP c:\\14.plage.bmp

BRCC32 Images.rc > compile cette ressource sans problème

Et je constate que la couleur à changé de post ce qui confirme mon précédant message

@+
Cirec
0
cs_Korda Messages postés 23 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 9 avril 2016
4 nov. 2006 à 20:52
bonsoir tt le monde
svp comment arreter un son playsound('data.wav',hinstance,snd_resource);
0
Rejoignez-nous