Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1524 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [VC++6 / API Win32] détecter la touche "entrée" dans un edit box

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VC++6 / API Win32] détecter la touche "entrée" dans un edit box

n°229385
Cool Coyot​e
Posté le 17-10-2002 à 13:06:44  profilanswer
 

Salut!
 
La question est dans le titre mais je vais apporter kkes précisions.
Actuellement ce que j'écris dans mon edit (1 seule ligne), je peux le valider par un bouton. Je désire supprimer ce bouton et valider plutôt par la touche "entrée", mais je n'ai rien trouvé de concluant.
 
Si quelqu'un a une piste, ce serait top.
 
PS : pas de MFC ici, c'est tout en API
 
Thx !!

mood
Publicité
Posté le 17-10-2002 à 13:06:44  profilanswer
 

n°229544
Cool Coyot​e
Posté le 17-10-2002 à 16:26:12  profilanswer
 

:bounce:  :D

n°229636
Pitounet
Posté le 17-10-2002 à 18:15:15  profilanswer
 

il y a le message Wm_KEYDOWN je crois, et après, tu recherche si le code du caractère tapé est celui de la touche entré...

n°229684
Cool Coyot​e
Posté le 17-10-2002 à 19:25:14  profilanswer
 

salut, j'y ai bien pensé oui, le problème c'est que WM_KEYDOWN ne me fournit pas le handle de l'objet dans lequel j'ai tapé entrée... donc si j'ai 2 edit box par exemple, je rique de taper dans une et valider la deuxième  ;)
 
J'ai pensé aussi à EN_CHANGE qui détecte si le contenu d'un edit a changé en me renvoyant l'handle de l'édit, mais je sais pas si la touche entrée est considérée comme un changement et de toute façons ça ne me renvoie pas quelle touche a été pressée, ça ne correspond donc pas non plus.
 
Bref doit bien exister un message qui corresponde à ce que je cherche mais j'ai pas encore trouvé... Please help !!!
 
En tous les cas merci pour ta réponse  :)

n°229897
hellbilly
free smile
Posté le 18-10-2002 à 08:16:32  profilanswer
 

Cool Coyote a écrit a écrit :

Salut!
 
La question est dans le titre mais je vais apporter kkes précisions.
Actuellement ce que j'écris dans mon edit (1 seule ligne), je peux le valider par un bouton. Je désire supprimer ce bouton et valider plutôt par la touche "entrée", mais je n'ai rien trouvé de concluant.
 
Si quelqu'un a une piste, ce serait top.
 
PS : pas de MFC ici, c'est tout en API
 
Thx !!




 
Il faut que tu modifies les propriétés de ton edit grâce à la fonction SetWindowLong.

Code :
  1. WNDPROC oldProc = (WNDPROC)SetWindowLong(GetDlgItem(hwnd, IDC_EDIT), GWL_WNDPROC, (LONG)editProc);


A chaque fois que ton edit recoit un message la fonction editProc va être appelée et t'as plus qu'a gérer la touche entrée. oldProc est l'ancienne fonction qui était associée à ton edit.
 

Code :
  1. LRESULT CALLBACK editProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  2. {
  3. int id = GetDlgCtrlID(hwnd);
  4.   if (IDC_EDIT == id)
  5.   {
  6.    switch (message)
  7.    {
  8.     case WM_KEYDOWN :
  9.      if (wParam == VkKeyScan(0x0D))
  10.      {
  11.                           // Gestion de la touche entrée.
  12.      }
  13.      break;
  14.    }
  15. }
  16. return CallWindowProc(oldProc, hwnd, message, wParam, lParam);
  17. }


 

n°229915
Cool Coyot​e
Posté le 18-10-2002 à 09:49:17  profilanswer
 

ahhhhhhh !!!! merci à toi !!!  :love:  
Je désespérais un peu j'avoue  ;)  
 
J'ai pas le code sous les yeux là mais d'ici ce soir je vais tester tout ça !
 
Merci encore  :)

n°315544
antsite
Je me souviens
Posté le 22-02-2003 à 16:33:11  profilanswer
 

J'ai créé un edit dans ma dialog, j'y ai géré avec la méthode ci-dessus l'appui sur touche entrée. Seulement il n'y a pas de bouton avec la propriété "Default" et donc lorsque j'appui sur entrée et bien ça fait bien ce que je veux mais j'ai droit à un beep à chaque fois !
Comment faire pour éviter ça ?

n°315587
HelloWorld
Salut tout le monde!
Posté le 22-02-2003 à 18:20:13  profilanswer
 

Citation :

salut, j'y ai bien pensé oui, le problème c'est que WM_KEYDOWN ne me fournit pas le handle de l'objet dans lequel j'ai tapé entrée


 
Lorsque tu recois un evenement, tu recois le handle de la fenetre concernee ...

Code :
  1. LRESULT CALLBACK WndProc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam )
  2. {
  3.     if ( Msg == WM_CHAR )
  4.     {
  5.         // hWnd = handle de la fenetre qui a recu le caractere
  6.     }


Citation :

Comment faire pour éviter ça ?


ca doit venir du fait qu'il appelles quand meme oldProc alors qu'il a traite l'evenement.
Ton edit fait alors le traitement normal. Il doit pas etre multiline, donc quand tu fais <entree>, il beep parceque tu peux pas faire multiline.
Donc dans ce cas faut renvoyer 0 et non pas appeler oldProc.
Vaut mieux utiliser WM_CHAR aussi. J'ai pas testé, mais je suis pas sûr que WM_KEYDOWN marche pour la touche entree du pad numerique.


Message édité par HelloWorld le 22-02-2003 à 18:31:51

---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°2089606
GreGsGreGs
Posté le 15-07-2011 à 15:44:35  profilanswer
 

LRESULT CALLBACK EditProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 switch(message)
 {
  case WM_CHAR:
   if(wParam == VK_RETURN)    /* Si il detecte la touche Entrer*/
   {
     
   }
 }
 
 return CallWindowProc(oldProc, hwnd, message, wParam, lParam);
}


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [VC++6 / API Win32] détecter la touche "entrée" dans un edit box

 

Sujets relatifs
[HTML]Form désactiver la touche entrée ?[PHP] Détecter le nom d une page 2, le retour
Shellexecute Win32[PHP] Détecter le nom de la page en cours
API Sendmessage et retour de flammePb avec l'API WaitCommEvent
[Perl][win32] connaître le browser internet par défaut[MFC] Utilisation de la touche TAB dans un RichEdit
[C Win32] Comment récupérer le nom d'utilisateur ? 
Plus de sujets relatifs à : [VC++6 / API Win32] détecter la touche "entrée" dans un edit box


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR