IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++/CLI Discussion :

[C++/CLI / Csharp][2.0] Comment recuperer une ressource ?


Sujet :

C++/CLI

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Points : 343
    Points
    343
    Par défaut [C++/CLI / Csharp][2.0] Comment recuperer une ressource ?
    Problème simple concernant le framework 2.0
    Je possede une picture box dans ma form et je souhaite lui faire changer d'image selon le comportement de ma form.
    j'essaye d'utiliser ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Resources::ResourceSet resx(L"Form1.resX");
    IC_Etat->Image = safe_cast<System&#58;&#58;Drawing&#58;&#58;Image^> &#40;resx.GetObject&#40;"inactif"&#41;&#41;;
    mais en fait je recupere une excepion du type
    An unhandled exception of type 'System.ArgumentException' occurred in mscorlib.dll

    Additional information: Stream is not a valid resource file.
    en gros il me dit que ce n'est pas un stream : en fait je sais que ce n'est aps un stream : c'est mon pathname de mon resX.
    j'ai regarder et intellisense me propose bien un constructeur qui prend un pathname et non un stream. Alors je vois pas pourquoi ça fonctionne pas.
    Bref si quelqu'un a une solution pour avoir par exemple 3-4 image et selon si on clike sur un bouton sa affiche tellle ou telle image.
    Merci

    PS: les image ne doivent pas etre dynamic : elle sont cacher a linterieur de l'appli il faut quelle soit compilé comme s'il s'agissait d'un icone.
    1 || 1 = 1
    1 && 1 = 1
    1 * 1 = 1
    Bon après tout, peut-être que Van Damme avait raison :
    1 + 1 = 1 // harmonie parfaite

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    http://msdn2.microsoft.com/library/s08s45bc.aspx#
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Points : 343
    Points
    343
    Par défaut
    a oui j'avai oublier de preciser que j'avai deja consulter la msdn et que cela produisai la meme exception... en gros neguib : ton lien je le connaissais mais si tu regarde bien ma syntaxe est bonne. et la je vien de REfaire ma syntaxe pour que cela ressemble a l'exemple msdn:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Resources&#58;&#58;ResourceSet^ rs = gcnew Resources&#58;&#58;ResourceSet&#40;"Form1.resX"&#41;;
    et la meme exception est generer ! alors .... voilà quoi si quelqu'un a reussi a faire ça déjà
    1 || 1 = 1
    1 && 1 = 1
    1 * 1 = 1
    Bon après tout, peut-être que Van Damme avait raison :
    1 + 1 = 1 // harmonie parfaite

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    c'est vraiment bizarre

    Bon en fait, cela doit parler d'une exception interne, car sousjascent à ce constructeur, il a une instanciation d'1 ResourceReader(fileName) qui lui même fait appel à une instanciation de FileStream
    Et là il serait peut être interressant de verifier (try/catch) s'il s'agit bien d'un ArgumentException de ton constructeur
    Citation Envoyé par MSDN
    path est une chaîne vide (""), ne contient que des espaces blancs ou contient un ou plusieurs caractères non valides.
    Alors qu'effectivement le constructeur de FileStream recèle de bien plus nombreuses sources d'exceptions (notamment toutes les IOExceptions)
    Tentes avec le chemin complet du fichier etc...
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Points : 343
    Points
    343
    Par défaut
    Voila ce que me dit le msdn :
    Citation Envoyé par MSDN
    ResourceSet (Stream)
    Creates a new instance of the ResourceSet class using the system default ResourceReader that reads resources from the given stream.
    Supported by the .NET Compact Framework.

    ResourceSet (String)
    Creates a new instance of the ResourceSet class using the system default ResourceReader that opens and reads resources from the given file.
    Supported by the .NET Compact Framework.
    Et voilà ce que j'en conclu :
    Le constructeur qui prend comme paramètre un string correspondant au pathname n'est pas implementé.
    Par consequent lorsqu'il voit un type string comme paramètre du constructeur il l'utilise comme stream mais ce ne sont pas des type compatible. Et du coup ben ça me met dans la merde ...
    Bref ... donc j'aimerai alors utiliser ce qui marchent : je vais utiliser le constructeur qui prend un Stream comme paramètre (même si je sais pas ce que c'est)
    1 || 1 = 1
    1 && 1 = 1
    1 * 1 = 1
    Bon après tout, peut-être que Van Damme avait raison :
    1 + 1 = 1 // harmonie parfaite

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Points : 343
    Points
    343
    Par défaut
    Ca marche pas ! -__-
    Bon on va faire plus simple comment linker de maniere static des images et n'importe laquelle dans un picture box grace a la methode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MyPictureBox->Image = &#40;System&#58;&#58;Drawing&#58;&#58;Image^&#41;???? ;
    en gros comment obtenir un type System:rawing::Image a partir d'une ressource dans le resX (et aussi faut-il vraiment utiliser le file.resX si on veut une ressource staticement linker)
    Tant de question sans reponse ...
    Merci d'avance pour les nombreuses reponse que vous allez m'aporter
    1 || 1 = 1
    1 && 1 = 1
    1 * 1 = 1
    Bon après tout, peut-être que Van Damme avait raison :
    1 + 1 = 1 // harmonie parfaite

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Points : 343
    Points
    343
    Par défaut
    J'ai un PictureBox et je veu m'en servir pour simuler une diode allumée ou éteinte ... j'ai creer 2 image que j'ai ajouter dans mon fichiers resx(est ce qu'il fallait ?). Mais je n'arrive pas a donner un attribut a mon PictureBox pour changer l'image car il me demande un type System:rawing::Image.
    En gros je reprend ma question d'avant :
    comment obtenir un type System:rawing::Image a partir d'une ressource dans le resX ?
    1 || 1 = 1
    1 && 1 = 1
    1 * 1 = 1
    Bon après tout, peut-être que Van Damme avait raison :
    1 + 1 = 1 // harmonie parfaite

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Points : 621
    Points
    621
    Par défaut
    Mode d'emploi pour utiliser des ressources avec Visual C++ 2005 Express.

    IL faut éviter d'utiliser le fichier resx associer aux forms puisqu'il est recréé par le designer à chaque modification...
    On peut utiliser son propre fichier resx. VS Express n'offre pas de template pour créer directement ces fichier.
    Il faut donc créer un fichier vide avec l'extension resx : dans l'explorateur menu Fichier/Nouveau/Document texte puis changer le nom.
    Pour l'exemple, j'utiliserai le nom "custom.resx"

    Ajouter ce fichier au projet.

    Insérer une image à partir de l'éditeur Visual Studio.

    Le code suivant permet de récupérer l'image et de l'afficher dans une PictureBox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     Resources&#58;&#58;ResourceManager^ resManager = gcnew Resources&#58;&#58;ResourceManager&#40;"test.custom", Reflection&#58;&#58;Assembly&#58;&#58;GetExecutingAssembly&#40;&#41;&#41;;
     this->pictureBox1->Image = safe_cast<Image^>&#40;resManager->GetObject&#40;"imageTest"&#41;&#41;;
    "test.custom" est composé du nom d'application et du nom du fichier resx
    "imageTest" est le nom de l'image dans le fichier resx.

    Mode d'emploi pour utiliser des ressources avec Visual C# 2005 Express.

    Pour la même opération en C#, il est beaucoup plus simple d'utiliser la page de propriété du projet qui offre un onglet Resources qui correspond à un fichier resx.
    Le compilateur C# fait tout le travail et le même exemple se réduit à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                this.pictureBox1.Image = global&#58;&#58;test.Properties.Resources.imageTest;
    où "test" est le nom du projet et "imageTest" le nom de l'image.
    On ne peut pas faire boire un âne qui n'a pas soif.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Points : 621
    Points
    621
    Par défaut
    Après réflexion, l'utilisation des ressources me paraît bien compliquée pour résoudre ton problème.

    Il me semble plus adapté d'utiliser un composant ImageList pour stocker uniquement des images liées à une Form.
    On ne peut pas faire boire un âne qui n'a pas soif.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Points : 343
    Points
    343
    Par défaut
    Merci NicolasG, pour tes information plus que utiles
    car on va dire que j'avaias beau chercher : c'est quand même pas facile a trouver.
    C.U.
    1 || 1 = 1
    1 && 1 = 1
    1 * 1 = 1
    Bon après tout, peut-être que Van Damme avait raison :
    1 + 1 = 1 // harmonie parfaite

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/05/2006, 20h20
  2. comment recuperer une variable sans input?
    Par fenneck dans le forum Langage
    Réponses: 20
    Dernier message: 02/04/2006, 20h26
  3. [Mail] Comment recuperer une variable d'environement.
    Par bullrot dans le forum Langage
    Réponses: 3
    Dernier message: 06/03/2006, 16h01
  4. Picklist: comment recuperer une partie de la valeur
    Par mesquest dans le forum Bases de données
    Réponses: 3
    Dernier message: 07/06/2004, 09h54
  5. comment recuperer une variable dans flash
    Par krépuscul dans le forum Flash
    Réponses: 30
    Dernier message: 16/10/2003, 10h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo