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

Visual C++ Discussion :

Action sur button


Sujet :

Visual C++

  1. #1
    Membre tr�s actif
    Homme Profil pro
    Electronicien
    Inscrit en
    Ao�t 2008
    Messages
    377
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Electronicien
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 377
    Par d�faut Action sur button
    comment faire une condition sur l'effet d'un button nomm� Deconnexion

    if (Deconnexion->Enabled) serialPort1->Close;

    au mieux je souhaiterai fermer ma connexion serialPort1->Close; sur l'action d'un clic sur la croix de mon form principal.

    Merci

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Tu veux dire un �v�nement ou une condition?
    Pour une condition, g�n�ralement on les fait sur des checkboxes plut�t que sur des boutons.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre tr�s actif
    Homme Profil pro
    Electronicien
    Inscrit en
    Ao�t 2008
    Messages
    377
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Electronicien
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 377
    Par d�faut
    Bah en fait j'ai cr�� un bouton pour d�connect� le bus USB avant la fermeture du form par ce que quand je souhaitai fermer mon form alors qu'il �tait encore en train de r�cup�re mes valeurs celui-ci frisait et ne ce fermait plus, je suis obliger de faire un alt contr�le sup pour arr�ter l'application.

    Je pense qu'il faut donc que je ferme ma connections USB au moment ou je clic sur la croix du form principal, mais je n'y suis pas arriver

  4. #4
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Ah, je pense qu'il y a un risque qu'il y ait un probl�me de "verrou mortel" o� chaque thread attend une r�ponse de l'autre...

    Pour les appels o� il n'est pas essentiel d'attendre que le thread graphique ait fini de mettre � jour ses contr�les avant de continuer, tu peux rempla�er les Invoke() par des BeginInvoke() (mais pour �a, il va falloir modifier la fonction SetText() ou en faire une copie que tu modifies ensuite).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre tr�s actif
    Homme Profil pro
    Electronicien
    Inscrit en
    Ao�t 2008
    Messages
    377
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Electronicien
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 377
    Par d�faut
    Merci j'esserai demain

  6. #6
    Membre tr�s actif
    Homme Profil pro
    Electronicien
    Inscrit en
    Ao�t 2008
    Messages
    377
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Electronicien
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 377
    Par d�faut
    Bonjour,

    j'ai donc mis un BeginInvoke() dans ma fonction SetText() comme �a

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    		private: virtual void SetText(String^ text) sealed
     
    		{
     
    			if (this->Analog0->InvokeRequired)
     
    			{
     
    				SetTextCallback^ d = gcnew SetTextCallback(this,&VCCDC::Form1::SetText);
     
     
     
    				this->BeginInvoke(d, gcnew String(text));   
     
    			}
    			else
    			{
     
    				Analog0->Clear();
    				Analog0->AppendText(valeur1.ToString());
     
    				Analog1->Clear();
    				Analog1->AppendText(valeur2.ToString());
     
    				Analog2->Clear();
    				Analog2->AppendText(valeur3.ToString());
     
    				Analog3->Clear();
    				Analog3->AppendText(valeur4.ToString());
     
    				Analog4->Clear();
    				Analog4->AppendText(valeur5.ToString());
     
    				Analog5->Clear();
    				Analog5->AppendText(valeur6.ToString());
     
    				Analog6->Clear();
    				Analog6->AppendText(valeur7.ToString());
     
    				Analog7->Clear();
    				Analog7->AppendText(valeur8.ToString());
     
    				Analog8->Clear();
    				Analog8->AppendText(valeur9.ToString());  
     
     
    			}
    		}
    a cet endroit this->Invoke(d, gcnew String(text)); remplacer par this->BeginInvoke(d, gcnew String(text));

    en fait, �a r�soud mon probl�me de latence expos� l�

    http://www.developpez.net/forums/d13...icher-textbox/

    dont mes valeurs varie � la second de r�action maintenant, seulement il met impossible de bouger la fen�tre ou de la fermer

  7. #7
    Membre tr�s actif
    Homme Profil pro
    Electronicien
    Inscrit en
    Ao�t 2008
    Messages
    377
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Electronicien
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 377
    Par d�faut
    a vrai dire j'ai du mal � comprendre ce que fait cette condition

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    		private: virtual void SetText(String^ text) sealed
     
    		{
     
    			if (this->InvokeRequired)
    			{
    				SetTextCallback^ d = gcnew SetTextCallback(this,&VCCDC::Form1::SetText);
    				this->BeginInvoke(d, gcnew String(text));
     
    			}
    			else
    			{
     
    				Analog0->Clear();
    				Analog0->AppendText(valeur1.ToString());
     
    				Analog1->Clear();
    				Analog1->AppendText(valeur2.ToString());
     
    				Analog2->Clear();
    				Analog2->AppendText(valeur3.ToString());
     
    				Analog3->Clear();
    				Analog3->AppendText(valeur4.ToString());
     
    				Analog4->Clear();
    				Analog4->AppendText(valeur5.ToString());
     
    				Analog5->Clear();
    				Analog5->AppendText(valeur6.ToString());
     
    				Analog6->Clear();
    				Analog6->AppendText(valeur7.ToString());
     
    				Analog7->Clear();
    				Analog7->AppendText(valeur8.ToString());
     
    				Analog8->Clear();
    				Analog8->AppendText(valeur9.ToString());  
     
     
    			}
    		}
    Si je comprend bien cette condition, on vient chercher les valeurs disponible dans l'autre thread "serialPort1_DataReceived" au quel cas on n'affiche pas tout de suite, donc on ne passe pas dans le else, et si la condition est false donc "serialPort1_DataReceived" n'est plus disponible on affiches les valeurs r�cup�r�es.

  8. #8
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Ce code est bizarre, car dans le else il devrait utiliser text, et ne l'utilise pas...

    Normalement, il faudrait un truc du genre:
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    private: 
    	delegate void SetTextCallbackSetText(TextBox^ textBoxARegler, String^ text);
     
    void SetText(TextBox^ textBoxARegler, String^ text)
    {
    	if(this->InvokeRequired)
    	{
    		SetTextCallback^ d = gcnew SetTextCallback(this, &VCCDC::Form1::SetText);
    		this->BeginInvoke(d, textBoxARegler, text);
     
    	}
    	else
    	{
    		//Pas la peine de faire Clear() + AppendText(), on peut faire les deux d'un coup
    		textBoxARegler->Text = text;
    	}
    }
     
    private: void serialPort1_DataReceived(System::Object^  sender, System::IO::Ports::SerialDataReceivedEventArgs^  e) 
    {
    	try
    	{
    		//Un tableau managé de quatre bytes
    		array<System::Byte>^ buf = gcnew array<System::Byte>(4);
     
    		//On lit les quatre bytes
    		serialPort1->Read(buf, 0, 4);
    		System::Byte highByte = buf[3];
    		buf[3] = 0;
    		int valeur = IntFromBytesLittleEndian(buf, 0);
    		System::String^ hexText = valeur.ToString("X8");
    		System::String^ decText = valeur.ToString();
     
    		switch (highByte)
    		{
    		case 1 : SetText(Analog0, hexText); SetText(Analog1, hexText); break;
    		case 2 : SetText(Analog2, hexText); SetText(Analog3, hexText); break;
    		case 3 : SetText(Analog4, hexText); SetText(Analog5, hexText); break;
    		case 4 : SetText(Analog6, hexText); SetText(Analog7, hexText); break;
    		default:
    			//valeur = IntFromBytesLittleEndian(buf, 0);
    			//Et on affiche en hexadécimal
    			//SetText(valeur.ToString("X8"));
    			break;
    		}
     
     
     
     
    	}
    	catch(...)
    	{
    	}
    }
    Et �a peut encore �tre am�lior�, en passant directement les deux textboxes et valeur � la fonction SetText()...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Membre tr�s actif
    Homme Profil pro
    Electronicien
    Inscrit en
    Ao�t 2008
    Messages
    377
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Electronicien
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 377
    Par d�faut
    Merci

    Par contre j'ai cette erreur sur

    SetTextCallback^ d = gcnew SetTextCallback(this, &VCCDC::Form1::SetText);

    avec

    Erreur 1 error C3352: 'void VCCDC::Form1::SetText(System::Windows::Forms::TextBox ^,System::String ^)'*: la fonction sp�cifi�e est incompatible avec le type d�l�gu� 'void (System::String ^)'

  10. #10
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Tu dois modifier la d�claration du d�l�gu� SetTextCallback.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre tr�s actif
    Homme Profil pro
    Electronicien
    Inscrit en
    Ao�t 2008
    Messages
    377
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Electronicien
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 377
    Par d�faut
    Effectivement pas mal cette architecture que tu proposes mais j'ai cherch� ce qui ce passe au sujet de l'erreur que j'ai descrit sur le pr�c�dent poste et je ne vois pas pour l'instant quel est le probl�me .

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
     
    		private: System::Void serialPort1_DataReceived(System::Object^  sender, System::IO::Ports::SerialDataReceivedEventArgs^  e) 
    		{
     
    			try
    			{
     
    				array<System::Byte>^ buf = gcnew array<System::Byte>(4);
     
    				//On lit les quatre bytes
    				serialPort1->Read(buf, 0, 4);
    				System::Byte highByte = buf[3];
    				buf[3] = 0;
    				int valeur = IntFromBytesLittleEndian(buf, 0);
    				System::String^ hexText = valeur.ToString("X8");  //Et on affiche en hexadécimal
    				System::String^ decText = valeur.ToString(); //Et on affiche en décimal
     
     
    				switch (highByte)
    				{
    				case 1 :	SetText(Analog0, decText);	break;
    				case 2 :	SetText(Analog1, decText);	break;
    				case 3 :	SetText(Analog2, decText);	break;
    				case 4 :	SetText(Analog3, decText);	break;
    				case 5 :	SetText(Analog4, decText);	break;
    				case 6 :	SetText(Analog5, decText);	break;
    				case 7 :	SetText(Analog6, decText);	break;
    				case 8 :	SetText(Analog7, decText);	break;
    				case 9 :	SetText(Analog8, decText);	break;		
    				case 10:	SetText(Analog9, decText);	break;
    				case 11:	SetText(Analog10, decText);	break;
    				default:
    					//valeur = IntFromBytesLittleEndian(buf, 0);
    					//Et on affiche en hexadécimal
    					//SetText("Pas de valeurs");
    					break;
    				}
     
     
    			}
    			catch(...)
    			{
    			}
    		}
     
     
    	private:delegate void SetTextCallbackSetText(TextBox^ textBoxARegler, String^ text);
     
    	void SetText(TextBox^ textBoxARegler, String^ text) 
    	{
    		if (this->InvokeRequired)
    		{
    			SetTextCallback^ d = gcnew SetTextCallback(this, &VCCDC::Form1::SetText);
    			this->BeginInvoke(d, textBoxARegler, text);
     
    		}
    		else
    		{
    			//Pas la peine de faire Clear() + AppendText(), on peut faire les deux d'un coup
    			textBoxARegler->Text = text;
    		}
    	}


    J'ai mis tout par ce que je ne sais pas d'ou peu provenir le probl�me, sachant que j'ai donc r�adapt� le code par rapport a ce que tu m'a d�taill�

  12. #12
    Membre tr�s actif
    Homme Profil pro
    Electronicien
    Inscrit en
    Ao�t 2008
    Messages
    377
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Electronicien
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 377
    Par d�faut
    OK C'est compris , et �a fonctionne enfin, aller maintenant je m'attaque � l'envoi de donn�es vers ma maquette.

    Merci

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Action sur radio buttons
    Par loutoune54 dans le forum jQuery
    R�ponses: 2
    Dernier message: 01/03/2013, 12h24
  2. R�ponses: 3
    Dernier message: 06/04/2010, 11h56
  3. Comment mettre une action sur le button
    Par darkmen11 dans le forum VC++ .NET
    R�ponses: 5
    Dernier message: 01/05/2009, 14h32
  4. Pb d'action sur un clip
    Par bencasp dans le forum Flash
    R�ponses: 4
    Dernier message: 22/10/2003, 17h11
  5. [Flash MX] Action sur un bouton
    Par WriteLN dans le forum Flash
    R�ponses: 9
    Dernier message: 20/10/2003, 14h01

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