Passage d'un control a l'autre par la touche enter
chemins_hermes
Messages postés8Date d'inscriptionsamedi 3 janvier 2004StatutMembreDernière intervention19 juillet 2006
-
19 juil. 2006 à 00:55
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
20 juil. 2006 à 11:05
bonjour, je cherche le moyen de creer un control Tedit qui
- 1 : n'accepte que les nombres (expl: 1.02 , 2.00 )
- 2 : a la validation par Enter passe au control suivant.(je n'ai pas trouver comment faire cela n'accepte que la touche TAB pour passer au control suivant)
- 3 : eventuellement avec les touche fleche haut bas droite gauche home fin , le focus ce deplace du control actuel a celui situé soit audessu, audessous , a droite ou a gauche.
- 4 il y a 6 controles Tedit en deux rangées de 3.
je debute il y a bien le detournement de la wndproc mais je n'arrive pas a trouver comment simuler l'appui de TAB lorsque j'appui sur Enter.
ou d'envoyer un message pour donner le focus au control suivant
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 19 juil. 2006 à 05:38
Salut,
Personnellement, j'utilise le détournement de la WNDPROC de l'Edit. Ca s'appelle le sous-classement. Puisque la fenêtre mère ne pourra pas détecter l'appui sur la touche dans un Edit ayant le focus, il faudra donc sous-classer ce dernier afin d'intercepter cette touche dans la procédure de sous classement. Pendant le traitement du message WM_KEYDOWN, on vérifie que wParam correspond à VK_RETURN ou VK_TAB. Si c'est le cas, on appelle la fonction GetWindow() qui permet de trouver le HWND de l'Edit précédent ou suivant. On passera ensuite ce HWND à SetFocus(). Une seule procédure servira pour tous les Edits.
Pour l'Edit qui ne doit accepter que les nombres, tu lui mets le style ES_NUMBER. Là encore, le sous-classement permet un filtrage beaucoup plus sophistiqué en cas de besoin.
Je ne tavaille pas sur Builder mais le principe reste le même. Si tu veux utiliser les APIs, je peux te faire un exemple de code.
chemins_hermes
Messages postés8Date d'inscriptionsamedi 3 janvier 2004StatutMembreDernière intervention19 juillet 2006 19 juil. 2006 à 14:28
En vrai code:
PostMessage(hdlg, WM_NEXTDLGCTL, 0, 0); // next ctrl
PostMessage(hdlg, WM_NEXTDLGCTL, 1, 0); // prev ctrl
Merci du renseignement
je suppose que hdlg et le handle de la fiche contenant les controls. ?
mais, je viens d'essayer cette methode mais il n'y a aucun effet.
je rappelle mon projet .
une fiche TForm contient 6 composants( control )Tedit.
placé en deux rangées de 3.
je desire que lorsque je tape ENTER (ou fleche droite ou gauche) je passe au Tedit suivant ou precedent.
je ne tape dans ces Tedit que des nombres (avec decimales)
j'ai essayé avec le Handle de TForm et celui du control dans lequel je tape un nombre. mais rien ne ce passe . pourtant le message est bien envoyé .(peut etre j'ai pas utilisé le bon Handle )
je prefere que le message soit envoyé par le Tedit concerné ( pour créer un composant deviré par la suite)
chemins_hermes
Messages postés8Date d'inscriptionsamedi 3 janvier 2004StatutMembreDernière intervention19 juillet 2006 19 juil. 2006 à 14:52
Dans Cbuilder 3 je n'arrive pas
lorsque je fait
Handlesuivant = GetWindow(Handle,GW_HWNDNEXT);
Handle etant le Handle du control dans lequel je suis.
j'obtiens toujours un handle NULL.
d'autre Part SetFocus est une methode de TWinControl elle n'a pas d'argument.
je semble pas avoir acces a la fonction de window SetFocus (HWND);
Merci du renseignement
je rappelle mon projet .
une fiche TForm contient 6 composants( control )Tedit.
placé en deux rangées de 3.
je desire que lorsque je tape ENTER (ou fleche droite ou gauche) je passe au Tedit suivant ou precedent.
je ne tape dans ces Tedit que des nombres (avec decimales)
j'ai essayé avec le Handle de TForm et celui du control dans lequel je tape un nombre. mais rien ne ce passe . pourtant le message est bien envoyé .(peut etre j'ai pas utilisé le bon Handle )
je prefere que le message soit envoyé par le Tedit concerné ( pour créer un composant deviré par la suite)
merci.
Vous n’avez pas trouvé la réponse que vous recherchez ?
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 20 juil. 2006 à 05:40
Salut,
Essaie de travailler directement en API. Pour cela je pense que tu devras créer un nouveau projet ne faisant pas appel aux trucs specifiques à Builder. C'est possible car j'ai une fois vu sur ce site un code source 100% API utilisant Builder. Tu peux aussi changer d'outil de travail en optant par exemple pour Visual C/C++ Express 2005. Il est gratuit et excellent.
Voici un tutorial contenant les liens de téléchargement et les étapes à suivre pour le paramétrer:
http://www.cppfrance.com/codes/PROGRAMMER-WIN32-AVEC-VISUAL-CPLUSPLUS-EXPRESS-TUTORIAL_38359.aspx