begin process at 2012 05 28 09:14:15
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

API

 > 

Arret sur click d'un bouton


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Arret sur click d'un bouton

lundi 13 mars 2006 à 16:26:25 | Arret sur click d'un bouton

julienbornet

Bonjour quelqu'un connaitrait il la fonction qui permet de verifier si un bouton a ete clique.
Je travail dans une dialogu box et je souhaite programmer une fonction du style:

case bouton1:
while (bouton2 n'est pas cliquer)
do
{
   actions
}

Ce qui pourait par exemple correspondre a un chronometre.

Merci d'avance
lundi 13 mars 2006 à 16:33:09 | Re : Arret sur click d'un bouton

Joky

Membre Club
Sous classe ton bouton, et traite le message WM_LBUTTONDOWN

if(!Meilleur("Joky")) return ERREUR;<

lundi 13 mars 2006 à 17:11:32 | Re : Arret sur click d'un bouton

racpp

Administrateur CodeS-SourceS
Salut,
Il faut toujours éviter ce genre de boucle while(). Ca bouffe les ressources.
Il faut plutot intercepter l'événement de clic dans procedure de la boite de dialogue grace à WM_COMMAND. Cet événment fournit le HWND et l'identificateur du controle cliqué dans lParam et wParam respectivement. Voici un petit exemple utilisant bouton1 comme identificateur:
case WM_COMMAND:
      Select=LOWORD(wParam);
      switch(Select)
      {
      case bouton1:   
          // Actions à faire...
          return 0;
       case .....
       // ......
        }

Pour faire un chronomètre, il est préférable d'utiliser le Timer de Windows avec les fonctions SetTimer(), KillTimer() et traiter le message WM_TIMER dans la procédure de ta boite de dialogue.



lundi 13 mars 2006 à 20:31:33 | Re : Arret sur click d'un bouton

julienbornet

En fait je ne cherche pas a faire un chronometre mais a enregistre des donnes dans un fichier. C'est donnes arrive d'une carte d'aquisition. Ainsi en appuyant sur start je commence a enregister et en appuyant sur stop j'arrete (d'ou l'analogie avec le chrono).

J'ai utiliser ceci:

int end = 0;

case bouton1:
end = 0;            // je reinitialise au cas ou je veux reprendre apres un arret
while (end = 0)
do
{
   actions
}
return true

case buton2:
end = 1;
return true;

Pensez vous que cette solutions soit correct. Y a t'il quelque chose de plus smart?
lundi 13 mars 2006 à 20:33:10 | Re : Arret sur click d'un bouton

julienbornet

Ah oh fait j'aoublias je suis un rookies, alors "sous classe" un bouton kesako?
mardi 14 mars 2006 à 01:28:41 | Re : Arret sur click d'un bouton

SAKingdom

Membre Club
Tu peu faire par exemple:

bool boutonclic = false;

switch(message)
{
    case WM_COMMAND:
       if((HWND)wParam == LeBouton)
          boutonclic = true;
     break;
}

et plus loin dans WM_PAINT ou dans un timer tu test:

if(boutonclic == false)
{
    /* ce que tu doit faire */
}
else if(boutonclic == true)
    boutonclic = false; /* pour réinitialiser */

Pour enregistrer dans un fichier c'est normalement fprintf ou pour l'API WriteFile
mais pour fprintf c'est:

FILE *file;

file = fopen("w", "fiichier.txt");
fprintf(file, "Bonjour les amis");
fclose(file);


___________________________________________
Les plus grands esprits trouvent toujours une solution

mardi 14 mars 2006 à 16:39:35 | Re : Arret sur click d'un bouton

racpp

Administrateur CodeS-SourceS
Salut,
SAKingdom > Si LeBouton est un HWND alors il faut faire:
if((HWND)lParam == LeBouton)

Si c'est un identificateur, alors il faudra faire:
if(LOWORD(wParam)==LeBouton)

julienbornet > Pour comprendre le sous-classement, même si tu n'en as pas besoin, regarde cette page:
http://www.cppfrance.com/infomsg/PROBLEME-LISTBOX-CLIQUER-0_420877.aspx

mardi 14 mars 2006 à 17:13:59 | Re : Arret sur click d'un bouton

julienbornet

Bon voila alors en fait j'ai tester ma structure et le probleme c'est que des que j'entre dans la boucle, cette derniere bouffe toute les resources et je ne peux plus rien faire donc impossible de cliquer et d'arreter la boucle.
J'ai eglement tester les structures que vous me propser mais le probleme c'est que je ne comprend pas trop comment l'implementer. Qu'est ce que le WM_PAINT. Je n'utilise que WM_INITDIALOG: et WM_COMMAND: . J'ai aussi essayer ceci dans une structure de test:

case IDC_BUTTON1:
if (end == 0)
{
number = number + 1;
}
return TRUE;

case IDC_BUTTON2:
end = 1;
SetDlgItemInt(hDlg, IDC_EDIT1, number,FALSE);
return TRUE;

le probleme vous l'orez comrpis c'est que si j'utilise cette structure dans mon prog en remplacant le number = number+1 par ma fonction fprintf, il faut que je clic sans arret sur le bouton. Hors les donnees de la carte d'aqui arrive toutes les milliseconde donc ...
C'est pourkoi je voulais utiliser le while. De plus ma structure test est la pour voir si je suis capable d'arreter une boucle si oui, alors je suis capable d'arreter l'aqui.
Voila j'espeer avoir ete clair

Merci de me faire par de vos idees
mardi 14 mars 2006 à 17:42:01 | Re : Arret sur click d'un bouton

julienbornet

voici le code que j'ai implementer:

// Programmation of the button "Start aquisiation"
case IDC_BUTTON_STARTAQUI:
/*First we serify if the file have benne created*/
if (Crefil != 1)
{
   strcpy(meserr,"Please create a file");
   SetDlgItemText(Dlg, IDC_TEXTBOX_AQUISITIONSTATUS, meserr);
   
return FALSE;
}

/*If the file is created, we inialize some variable and start the aquisition*/
end = 0;
fprintf(fic, "\n\n Data\n");
start = clock();
while (end == 0)
{
      fprintf(fic, "\n ")
      
/*First we write the time of the point aquisition*/
      
elapsed = clock()- start; 
      rectime = elapsed*10e-4;
      fprintf(fic, "Time:%f ",rectime);
      
      
/*Then if the absolut postion have been choose we cheked that we can wrote it and we wrote the data*/
      
if (IsDlgButtonChecked(Dlg, IDC_ABSOLUTEPOSITION) == BST_CHECKED)
      { 
         error = cnc_absolute(FlibHndl,-1,4+4*MAX_AXIS,&Datapoint);
         
if (error == 0)
         {
            fprintf(fic, "x = %8ld y = %8ld z = %8ld b = %8ld c = %8ld ",Datapoint.data[0] ,Datapoint.data[1] ,Datapoint.data[2] ,Datapoint.data[3] ,Datapoint.data[4]);
         }
         
else 
         {
            GetDlgItemText(Dlg, IDC_TEXTBOX_AQUISITIONSTATUS, mes ,50);
            sprintf(meserr, "An error occured. Error Number : %i",error);
            strcat (mes,meserr);
            SetDlgItemText(Dlg, IDC_TEXTBOX_AQUISITIONSTATUS, mes);
         }
        }
      
      
/*Then if the feedrate have been choose we cheked that we can wrote it and we wrote the data*/
      i
f (IsDlgButtonChecked(Dlg, IDC_FEEDRATE) == BST_CHECKED)
      {
         error = cnc_actf(FlibHndl, &feedrate);
         
if (error==0)
         {
            fprintf(fic, "Feedrate = %ld ",feedrate);
         } 
         
else
         
{
            GetDlgItemText(Dlg, IDC_TEXTBOX_AQUISITIONSTATUS, mes ,50);
            sprintf(meserr, "An error occured. Error Number : %i",error);
            strcat (mes,meserr);
            SetDlgItemText(Dlg, IDC_TEXTBOX_AQUISITIONSTATUS, mes);
         }
      }


      /*Then if the servoloadmeter have been choose we cheked that we can wrote it and we wrote the data*/
      
if (IsDlgButtonChecked(Dlg, IDC_SERVOLOADMETER) == BST_CHECKED)
      {
         error = cnc_rdsvmeter(FlibHndl, &maxaxis, Axisload); 
         
if (error == 0)
         { 
            
for (i=0; i<maxaxis; i++)
            {
               fprintf(fic, "SvLM %c = %d ", Axisload[i].svload.name , Axisload[i].svload.data);
            }
         }
         
else 
         {
            GetDlgItemText(Dlg, IDC_TEXTBOX_AQUISITIONSTATUS, mes ,50);
            sprintf(meserr, "An error occured. Error Number : %i",error);
            strcat (mes,meserr);
            SetDlgItemText(Dlg, IDC_TEXTBOX_AQUISITIONSTATUS, mes); 
         }
      }


      /*Then if the spindle speed have been choose we cheked that we can wrote it and we wrote the data*/
      
if (IsDlgButtonChecked(Dlg, IDC_SPINDLESPEED) == BST_CHECKED)
      {
         error = cnc_acts(FlibHndl, &spindspeed);
// Test if there is an error
         
if (error == 0)
         { 
            fprintf(fic, "Spindle speed = %ld ", spindspeed.data);
         }
         
else 
         {
            GetDlgItemText(Dlg, IDC_TEXTBOX_AQUISITIONSTATUS, mes ,50);
            sprintf(meserr, "An error occured. Error Number : %i",error);
            strcat (mes,meserr);
            SetDlgItemText(Dlg, IDC_TEXTBOX_AQUISITIONSTATUS, mes); 
         }
       }


      /*Then if the spindle load meter have been choose we cheked that we can wrote it and we wrote the data*/
      
if (IsDlgButtonChecked(Dlg, IDC_SPINDLELOADMETER) == BST_CHECKED)
      {
         
short num = 1;
         error = cnc_rdspmeter(FlibHndl, 0, &num, Spindload); 
         
if (error == 0)
         { 
            fprintf(fic, "Spindle load = %d ", Spindload[1].spload.data);
         }
         
else 
         {
            GetDlgItemText(Dlg, IDC_TEXTBOX_AQUISITIONSTATUS, mes ,50);
            sprintf(meserr, "An error occured. Error Number : %i",error);
            strcat (mes,meserr);
            SetDlgItemText(Dlg, IDC_TEXTBOX_AQUISITIONSTATUS, mes); 
         }
       }


      /*Then if the G Code have been choose we cheked that we can wrote it and we wrote the data*/
      
if (IsDlgButtonChecked(Dlg, IDC_GCODE) == BST_CHECKED)
      {
         error = cnc_rdseqnum(FlibHndl, &Numblock); 
         
if (error == 0)
         { 
            fprintf(fic, "N%ld\n",Numblock.data);
         }
         
else 
         {
            GetDlgItemText(Dlg, IDC_TEXTBOX_AQUISITIONSTATUS, mes ,50);
            sprintf(meserr, "An error occured. Error Number : %i",error);
            strcat (mes,meserr);
            SetDlgItemText(Dlg, IDC_TEXTBOX_AQUISITIONSTATUS, mes); 
         }
      }



// Programmation of the button "Stop aquisiation"
case IDC_BUTTON_STOPAQUI:
end = 1;
return TRUE;

mardi 14 mars 2006 à 17:47:25 | Re : Arret sur click d'un bouton

julienbornet

Ne soyez pas surpris si les commenatires sont en anglais c parce que je suis en stage pour un organisme ou la langue officielle est l'anglais du coup tout les documents doivent etre en anglais.
Comme vous pourvez le voir ma structure de test s'apparente tres bien a ceci dans sa forme generale.

De plus connaissez vous un moyen pour verifer toutes les check box d'un coup et ainsi dire :

case bouton start:

Verifie les donnees a enregister
While (bouton stop appyuer)
{
enregistre les donnees a aenregister
}


voila merci encore


1 2

Cette discussion est classée dans : bouton, fonction, arret, click


Répondre à ce message

Sujets en rapport avec ce message

Comment attribuer la fonction OpenFile a un bouton? [ par tormoj ] Comment attribuer la fonction OpenFile a un bouton?Merci d'avance à tous.tormoj Affichage d'une photo et arret d'affichage [ par rasta_raf ] Bonjour,Je programme avec la bibliothèque MFC de Visual C++ 6.0 et j'ai créé une application SDI qui affiche une FormView où il y a 2 boutons (Bouton Bouton d'arret d'urgence [ par tanguy_laverdure ] Bonjour, j'ai cree une application qui lorsqu'on appui sur un bouton lance un traitement. ce traitement peut être long et je souhaiterai avoir la poss BUTTON [ par ToToL ] BonjoursMon probleme est le suivant : quand on cré un bouton on lui donne des "style" du genre : WS_VISIBLE. auriez vs un endroit ou il sont tous repe Comment faire appel à une fonction? [ par freepouy18 ] Bonjour a tous,Voila, j'ai créé un formulaire avec MSInfoPath2003 contenant un bouton. Ce bouton fait appel à une fonction créée sous MSInfoPtah. J'ai Creation d'un Thread en MFC et arret par un bouton [ par djtiaf ] Bonjour à tous,Je cherche à créer un Tread tout simple :fonction Thread du bouton Start{while (arret=false) { Sleep(1000) // on laisse 1 sec Multitache et MFC [ par tigerskin ] Bonjour a tous.J'ai un petit soucis je  voudrais réaliser un bouton d'arret d'urgence pour une application qui execute une tache en fond et qui me blo [.NET] comment simuler click d un bouton [ par jerome86600 ] ou quel parametre il faut mettre dans button1->ckick(...,...) Aide pour une fonction recherche avec suivant [ par oeil123 ] je n'arrive pas a trouver la fonction que microsoft utilise pour faire le dialog recherche avec le fameux bouton suivant qui m'interesse.En fait je vo Bouton au fonction de la touche retour arrière [ par toxjamescook ] Bonjour,voila je developpe en c++ builder et je voudrais savoir comment je peux définir un clic bouton pour qu'il agisse comme la touche du clavier re


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,889 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales