none
Syntaxe de la Progress Bar RRS feed

  • Question

  • Bonjour et merci encore pour l'aide apportée Ce formulaire qui a été ouvert pour traiter le problème de la Progress bar a évolué pour prendre en compte tout ce que je ne suis pas arrivé à faire.

    J'ai acheté 2 bouquins et j'ai fait les 2 premiers exercices sur msdn

    Je n'ai cependant pas trouve de livres sur C++ avec Visual studio 2010. Une référence serait la bienvenue

    Je n'arrive d'ailleurs plus a aller sur le tutorial de msdn un lien serait le bienvenu.

    J'avance la maquette de mon application grâce a vos conseils. Je vous en remercie encore. Maintenant l'enchainement d'un menu avec une form marche.
    J'ai pris le code de la progress bar sur des forums et j'ai résolue une part des problèmes de compilation. il reste quelques erreurs dans l'appel des fonctions membres. J'ai fait trois appels de fonction membres avec des syntaxe variées et chacune me provoque une erreur de compilation différente.
    A fin de vous orienter je joins le code de la maquette et les résultats de compilation.

    Form1(void)
    		{
    			InitializeComponent();
    			//
    			//TODO: ajoutez ici le code du constructeur
    			//
    			Shown += gcnew EventHandler(  this, &Form1::Form1_Shown);
                // To report progress from the background worker we need to set this property
                  backgroundWorker1->WorkerReportsProgress = true;
                // This event will be raised on the worker thread when the worker starts System::ComponentModel::DoWorkEventArgs ^
                 System::ComponentModel::DoWorkEventArgs^ backgroundWorker1_DoWork; // This event will be raised when we call ReportProgress backgroundWorker1->ProgressChanged += gcnew ProgressChangedEventHandler(Test6::Form1::backgroundWorker1_ProgressChanged); }

    j'introduis maintenant le status de compilation:

    1>  Test6.cpp
    1>d:\usr\memoria\dev\aln_kernel\make\test6\test6\Form1.h(30): error C3924: erreur dans l'argument #2 de l'appel du constructeur délégué 'System::ComponentModel::DoWorkEventHandler' :
    1>          pointeur attendu vers la fonction membre
    1>d:\usr\memoria\dev\aln_kernel\make\test6\test6\Form1.h(32): error C3352: 'void Test6::Form1::backgroundWorker1_ProgressChanged(System::Object ^,System::ComponentModel::ProgressChangedEventArgs)' : la fonction spécifiée est incompatible avec le type délégué 'void (System::Object ^,System::ComponentModel::ProgressChangedEventArgs ^)'
    1>ÉCHEC du build.

    Je serai content d'avoir de l'aide: ce sera cool.












    • Modifié JeanNoel53 mercredi 25 avril 2012 00:02
    samedi 21 avril 2012 12:36

Réponses

Toutes les réponses

  • Bonjour,

    Pour découvrir Visual C++ pour Visual Studio 2010 vous pouvez utiliser la page MSDN dédiée à cette technologie d’où vous pouvez naviguer pour analyser des exemples. Vous pouvez aussi découvrir Visual C++ en utilisant ces exemples pour VS 2010.

    Concernant les erreurs : l’évènement Shown a deux paramètres, dans votre code je vois seulement 1, mais il n’est pas clair comment il est construit (voir ici comment consommer des évènements dans une application Windows). Puis, les évènements DoWork et Progress Changed prennent aussi deux paramètres et je vois seulement 1 dans votre cas. Je vous invite analyser cet exemple (en bas de la page) pour voir comment utiliser un BackgroundWorker.  

    Pour parcourir les dossiers et les fichiers d’un dossier en Visual C++ vous pouvez utiliser la méthode décrite ici.

    Finalement, svp ouvrez un thread nouveau pour chaque question. Il est difficile répondre et suivre votre progrès si vous posez plusieurs questions sur des sujets différents dans le même thread. Merci de votre compréhension et collaboration.

    Bonne journée,

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    mardi 24 avril 2012 08:08
  • J'ai finalement retiré de ce thread tout ce qui ne se rapportait pas a la progress bar. J'ai vu avec intérêt les nombreux liens dont vous m'avez fait part, je vous en remercie

    J'ai néanmoins un problème récurent dans ce sujet.J'ai maintenant une implémentation qui ressemble comme une sœur a l'exemple fibonnaci donné dans l'exemple Mais il ne compile toujours pas. J'ai avancé en ce sens que le event handler est maintenant bon. pour les paramètre j'utilise comme dans l'exemple this pour le 1) paramètre et dans mon cas &Test6::texteDeLaRequête pour le deuxième paramètre et j'ai le résultat suivant

    	public ref class Form1 : public System::Windows::Forms::Form
    	{
    	public:
    		Form1(void)
    		{
    			InitializeComponent();
    			//
    			//TODO: ajoutez ici le code du constructeur
    			//
    			this->progressBar1->Hide();
    			Shown += gcnew EventHandler(  this, &Form1::Form1_Shown);
                            // To report progress from the background worker we need to set this property
     			backgroundWorker1->WorkerReportsProgress = true;
                            // This event will be raised on the worker thread when the worker starts System::ComponentModel::DoWorkEventArgs ^
    			backgroundWorker1->DoWork += gcnew DoWorkEventHandler( this, &Form1::backgroundWorker1_DoWork);
                            // This event will be raised when we call ReportProgress
     			backgroundWorker1->ProgressChanged += gcnew ProgressChangedEventHandler( this, &Form1::backgroundWorker1_ProgressChanged);
    		}

    et le diagnostique du compilateur n'est pas bon pour les deux dernières lignes de code; Pourquoi?

    1>Form1.h: error C3352: 'void Test6::Form1::backgroundWorker1_DoWork(System::Object ^,System::ComponentModel::DoWorkEventArgs)' : la fonction spécifiée est incompatible avec le type délégué 'void (System::Object ^,System::ComponentModel::DoWorkEventArgs ^)'
    1>Form1.h: error C3352: 'void Test6::Form1::backgroundWorker1_ProgressChanged(System::Object ^,System::ComponentModel::ProgressChangedEventArgs)' : la fonction spécifiée est incompatible avec le type délégué 'void (System::Object ^,System::ComponentModel::ProgressChangedEventArgs ^)'
    J'ai poussé le vice jusqu’à déplacer la fonction dans une fonction IntitializeProgressBar avec le même résultat. J'ai maintenant une implémentation qui est la copie de l’exemple fibonnaci
    Que faut il faire pour faire compiler ce code?


    Jean Noël Martin



    • Modifié JeanNoel53 mercredi 25 avril 2012 00:55
    mercredi 25 avril 2012 00:45
  • Bonjour,

    Les messages d’erreur indiquent que vous n’avez pas respecté les deux signatures : void backgroundWorker1_DoWork( Object^ sender, DoWorkEventArgs^ e ) et void backgroundWorker1_ProgressChanged( Object^ sender, ProgressChangedEventArgs^ e ).

    Bonne journée,

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    • Marqué comme réponse JeanNoel53 mercredi 25 avril 2012 07:39
    mercredi 25 avril 2012 05:55
  • Et pourtant c'est la copie conforme de l'exemple Fibonacci qui lui compile: je continue à chercher.

    en fait il fallait que le type des paramètre appelé soit des hat en deuxième argument et je n'avais pas mis ce code dans mon post

    C'est cool ca marche merci à l'équipe

    #pragma once
    #include "OpenAFile.h"
    namespace Test6 {
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    	using namespace System::Threading;
    
    	/// <summary>
    	/// Description résumée de Form1
    	/// </summary>
    	
    	public ref class Form1 : public System::Windows::Forms::Form
    	{
    	public:
    		Form1(void)
    		{
    			InitializeComponent();
    			//
    			//TODO: ajoutez ici le code du constructeur
    			//
    			this->progressBar1->Hide();
    			IntitializeProgressBar();
    		}
    		    
    		void IntitializeProgressBar(void)
    		{
    			Shown += gcnew EventHandler(  this, &Form1::Form1_Shown);
                            // To report progress from the background worker we need to set this property
     			backgroundWorker1->WorkerReportsProgress = true;
                            // This event will be raised on the worker thread when the worker starts System::ComponentModel::DoWorkEventArgs ^
    			backgroundWorker1->RunWorkerCompleted += gcnew RunWorkerCompletedEventHandler( this, &Form1::backgroundWorker1_RunWorkerCompleted );
    			backgroundWorker1->DoWork += gcnew DoWorkEventHandler( this, &Form1::backgroundWorker1_DoWork);
                            // This event will be raised when we call ReportProgress
     			backgroundWorker1->ProgressChanged += gcnew ProgressChangedEventHandler( this, &Form1::backgroundWorker1_ProgressChanged );
    		}
    
    		void Form1_Shown( System::Object^ Sender, System::EventArgs^ e)
            {
                // Start the background worker
                backgroundWorker1->RunWorkerAsync();
            }
    		
               // This event handler deals with the results of the
               // background operation.
              void backgroundWorker1_RunWorkerCompleted( Object^ /*sender*/, RunWorkerCompletedEventArgs^ e )
              {
          
              }
    
    		// On worker thread so do our thing!
            void backgroundWorker1_DoWork( System::Object^ sender, DoWorkEventArgs^ e)
            {
                // Your background task goes here
                for (int i = 0; i <= 100; i++)
                {
                    // Report progress to 'UI' thread
                    backgroundWorker1->ReportProgress(i);
                    // Simulate long task
                }
             }
    		
            // Back on the 'UI' thread so we can update the progress bar
    		void backgroundWorker1_ProgressChanged( System::Object^ sender, ProgressChangedEventArgs^ e)
            {
                // The progress percentage is a property of e
                progressBar1->Value = e->ProgressPercentage;
            }
    
    	protected:
    		/// <summary>
    		/// Nettoyage des ressources utilisées.
    		/// </summary>
    		~Form1()
    		{
    			if (components)
    			{
    				delete components;
    			}
    		}


    Jean Noël Martin


    • Modifié JeanNoel53 mercredi 25 avril 2012 07:39
    mercredi 25 avril 2012 07:31