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

Windows Forms Discussion :

chargement d'une image SimpleButtonExport.Image dans resource [Débutant]


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Juillet 2012
    Messages : 13
    Points : 8
    Points
    8
    Par défaut chargement d'une image SimpleButtonExport.Image dans resource
    Bonjour,

    En C++/CLI, j'ai une fenetre Chart (UserForm) appelée en dynamique dans la fenetre ppale (FormModel).

    projet\FormModel.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    System::Void formModel_Load(System::Object^  sender, System::EventArgs^  e)
             {		
                this->Text = modele->model_getModelMajorVersion() + " file: " + modele->model_Name;
     
                //
                // charge les layouts dans les dockpanels
                //
                LayoutChart^ layoutchart                                 = gcnew LayoutChart(); 
     
                dockPanelResultsCharts->ControlContainer->Controls->Add(layoutchart);
    }
    et dans le fichier projet\OphLayout\LayoutChart.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    public ref class LayoutChart : public System::Windows::Forms::UserControl
    {
    ...
     
    		void InitializeComponent(void)
    		{
             System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(LayoutChart::typeid));
     
             this->simpleButtonExportExcel = (gcnew DevExpress::XtraEditors::SimpleButton());
     
             // 
             // simpleButtonExportExcel
             // 
             this->simpleButtonExportExcel->Image = (cli::safe_cast<System::Drawing::Image^  >(resources->GetObject(L"simpleButtonExportExcel.Image")));
             this->simpleButtonExportExcel->Location = System::Drawing::Point(395, 12);
             this->simpleButtonExportExcel->Name = L"simpleButtonExportExcel";
             this->simpleButtonExportExcel->Size = System::Drawing::Size(222, 54);
             this->simpleButtonExportExcel->StyleController = this->layoutControlMain;
             this->simpleButtonExportExcel->TabIndex = 10;
             this->simpleButtonExportExcel->Text = L"Export Excel";
             this->simpleButtonExportExcel->Click += gcnew System::EventHandler(this, &LayoutChart::simpleButtonExportExcel_Click);
     
    ...
    }
    Or a l'execution, en regardant avec des breakpoints, il s'arrete et saute toutes les instructions apres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
             this->simpleButtonExportExcel->Image = (cli::safe_cast<System::Drawing::Image^  >(resources->GetObject(L"simpleButtonExportExcel.Image")));
    Le fichier LayoutChart.resx est bien present dans la solution dans le filtre "Fichiers de ressources" et dans le repertoire j'ai bien : projet\ophLayouts\layoutChart.resx

    Si j'ouvre dans la solution le layoutChart.resx, j'ai bien une BitMap referencée
    simpleButtonExportExcel.Image et de propriete "Embedded in .resx"

    Ce que je comprends c'est qu'il ne trouve pas l'image du bouton dans le resx.
    La question bien sur est .. Pourquoi ?

    VS2010 n'arrive pas a faire le lien entre le .resx et l'assembly ?

    ps : je precise que j'ai ajouté l'image du bouton dans la fenetre properties [Design] et qu'elle apparait dans mon layout visuellement.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Juillet 2012
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Bonjour a tous,

    Pas de réponses. personne n'a une idée ou c'est parceque la réponse est evidente ?

    j'ai reessayé et tjrs rien. Je ne vois vraiment pas d'ou ca peut venir.
    Aide bienvenue.
    Merci d'avance

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Juillet 2012
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    j'ai essayé de faire différemment..
    J'ai directement chargé l'image dans la PictureBox
    et donc ainsi intégré l'image dans le fichier resource.

    je trouve effectivement dans le fichier .resx

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <data name="pictureBoxTest.Image" type="System.Drawing.Bitmap, System.Drawing" mimetosoft.net.object.ype="application/x-micrbytearray.base64">
        <value>
            iVBORw0KGgoAAAANSUhEUgAAAlgAAAETCAIAAABlc++5AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
    etc...
    mais a l'execution il me donne une erreur

    An unhandled exception of type 'System.Reflection.TargetInvocationException' occurred in mscorlib.dll

    Donc dans VS2010 le chargement d'image est totalement buggué ?

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Juillet 2012
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    il est clair qu'une fois la comprehension de base des resources trouvée, c'est plus facile. Il suffit d'utiliser le ResourceManager() tel que :

    dans le LayoutChart_FormLoad(...) il faut rajouter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
       // charge la resource "save" et assigne pour export excel
       Assembly^ monassembly = System::Reflection::Assembly::GetExecutingAssembly();
     
       String ^resourcesource = "Projet.repertoireousetrouvelefichierresx.filenamesansextension";        // nom du fichier : aller voir dans Debug
       ResourceManager ^myresources = gcnew Resources::ResourceManager(resourcesource, monassembly );
     
       try
       {
          Object ^objet = myresources->GetObject("ico_file_Save_16");
     
          simpleButtonExportExcel->Image = safe_cast<Image ^> (objet);
       }
    et tout fonctionne tres bien.

    Ce qui veut dire qu'il y a un pb dans la gestion des resources du Form designer de VS2010 car si on ne se trouve pas
    dans la fenetre (Form) principale, VS n'arrive pas a aller chercher la resource par son code automatique :
    resources->GetObject(L"simpleButtonExportExcel.Image"). Il est nécessaire de le faire dynamiquement dans le code.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/02/2012, 14h02
  2. transformation d'une donnée binaire image en image
    Par bonagad1 dans le forum VB.NET
    Réponses: 1
    Dernier message: 04/05/2010, 18h54
  3. Chargement d'une séquence d'images
    Par TDDev dans le forum OpenCV
    Réponses: 5
    Dernier message: 26/08/2008, 09h22
  4. Réponses: 6
    Dernier message: 07/09/2007, 13h56
  5. Chargement d'une lib partagée C++ dans un programme C
    Par Zero dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 30/09/2003, 16h40

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