Accueil > Forum > > > > Faire perdre le focus d'une editbox
Faire perdre le focus d'une editbox
jeudi 15 septembre 2005 à 21:35:55 |
Faire perdre le focus d'une editbox

Mastersam
|
Bonjour, j'ai un léger soucis, je voudrais faire perdre le focus d'une edit box pour récuperer sa valeur après l'appui sur la touche entrer. J'ai essayé d'intercepter le message WM_KEYDOWN ou WM_CHAR dans ma fenetre mère, mais dès que mon curseur est dans l'edit alors ces messages ne sont plus détectés. Que faire ? Merci d'avance pour m'indiquer une piste de réflexion. 
|
|
jeudi 15 septembre 2005 à 22:57:26 |
Re : Faire perdre le focus d'une editbox

BruNews
|
Quel besoin de s'occuper du focus pour cela ??? Mets un bouton IDOK en defpush et sa procédure sera lancée à l'appui de ENTER.
ciao... BruNews, MVP VC++
|
|
vendredi 16 septembre 2005 à 11:55:07 |
Re : Faire perdre le focus d'une editbox
|
vendredi 16 septembre 2005 à 16:43:33 |
Re : Faire perdre le focus d'une editbox

racpp
|
Salut,
Moi aussi, comme patatalo, je préfère le sous-classement. Voici un exemple: // Variable déclarée en global:
WNDPROC OldEditProc;
// Procédure de sous-classement de l'Edit:
LRESULT CALLBACK EditProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CHAR:
// Empêcher le beep après appui sur ENTREE:
if (wParam == VK_RETURN) return 0;
break;
case WM_KEYDOWN:
// Si la touche tapée est "ENTREE":
if (wParam == VK_RETURN)
{
// Faire ce qu'on veut ici:
// ..........
return 0;
}
break;
default:
break;
}
// Appeler la procédure originale:
return CallWindowProc(OldEditProc, hwnd, message, wParam, lParam);
}
Dans le traitement du message WM_CREATE ou WM_INITDIALOG, tu fais ceci:
OldEditProc= (WNDPROC) SetWindowLong(hEdit, GWL_WNDPROC, (LPARAM)EditProc);
Il faut que l'Edit soit déjà crée avant d'appeler SetWindowLong().
Pour plus de détails tu peux regarder ma source:
http://www.cppfrance.com/codes/NAVIGATEUR-WEB-API-/29247.aspx
|
|
vendredi 16 septembre 2005 à 23:12:30 |
Re : Faire perdre le focus d'une editbox

Mastersam
|
Bon j'ai un peu plus de mal avec le sousclassement des proc car en plus je n'ai pas qu'une seule editbox pour laquelle ceci doit fonctionner mais 32 alors ça me fait bcp de procédures ... Parcontre j'ai essayé avec ce qu'a dit Brunews mais j'ai pas du tout comprendre car ça ne veut pas marcher. Voilà ce que j'ai ajouté à mon code: Après la création de ma fenetre "dmxwindow" où se trouvent mes edits j'envoie: SendMessage(dmxwindow,DM_SETDEFID,ID_DEFAULTBUTTON,0); Pour préciser l'handle virtuel du bouton par defaut. J'ai une première question à ce sujet : doit il réellement exister ce bouton ? Puis logiquement l'appuie sur "entrée" quand mon curseur de texte est dans un edit box çà envoie le message WM_COMMAND comme si j'avais appuyé sur le defpush : ID_DEFAULTBUTTON Donc j'intercepte son handle dans le case WM_COMMAND de ma procedure de gestion de ma "dmxwindow" if(LOWORD(wParam)==ID_DEFAULTBUTTON){ SetFocus(hwnd); } Et je remet mon focus sur ma fenetre entière ce qui va envoyer un EN_KILLFOCUS et déclencher la prise en compte de la valeur de mon edit box (bout de code qui existe déjà). Mais hélas rien ne se passe quand j'appuie sur entrée, parcontre le fait d'appeler SetFocus(hwnd); déclenche bien l'effet escompté. J'utilise d'ailleurs cette méthode pour prendre ma valeur de l'edit lorsqu'un clic de souris survient. Je suis en C (pas++) sous dev-cpp ... si ça a une importance ... Merci 
|
|
vendredi 16 septembre 2005 à 23:43:20 |
Re : Faire perdre le focus d'une editbox

BruNews
|
Mets direct le style BS_DEFPUSHBUTTON à la création de ton bouton.
Je n'avais quasi rien compris à ta question mais le sous classement est de loin la meilleure manière de procéder pour controler les entrées utilisateur. Ce n'est pas parce qu'on a X edit qu'il faudra X editProc, la même editProc peut servir à tous les rdit pour lesquels tu veux un traitement ressemblant.
ciao... BruNews, MVP VC++
|
|
samedi 17 septembre 2005 à 18:36:48 |
Re : Faire perdre le focus d'une editbox

racpp
|
Oui c'est vrai tu peux utiliser une seule procédure de sous-classement
pour tes 32 Edits. J'ai déjà fait un programme utilisant ce principe.
J'ai déclaré les HWND de mes 20 Edits dans un tableau en global. Pareil
pour les WNDPROC pour les procédure originales:
HWND hEdit[20];
WNDPROC oldproc[20];
Une autre variable globale sert à préciser l'Edit courant:
int courant;
"courant" est récupéré apès clic dans l'un des 20 Edits grâce à une boucle:
case WM_COMMAND:
for (int j=0;j<20;j++)
{
if( (HWND)lParam == hEdit[j]) break;
}
courant =j;
break;
SetWindowLong est utilisée dans une autre boucle:
for (int i=0;i<20;i++)
{
oldproc[i]= (WNDPROC) SetWindowLong(hEdit[i], GWL_WNDPROC, (LPARAM)EditProc);
}
Dans la procédure de sous-classement j'ai fait:
case WM_KEYDOWN: if (wParam == VK_RETURN) { // Appeler la fonction de récupération du contenu de l'Edit SetFocus(hEdit[courant+1]; // Passer le focus à l'Edit suivant return 0; } break;
//............
return CallWindowProc(oldproc[courant], hwnd, message, wParam, lParam);
J'espère que ça aidera.
|
|
samedi 17 septembre 2005 à 19:16:49 |
Re : Faire perdre le focus d'une editbox

Mastersam
|
Bon je dois être un peu mal doué j'ai fait : HWND boutondefaultdmx; boutondefaultdmx = CreateWindowEx(0, "BUTTON", "", WS_CHILD|BS_DEFPUSHBUTTON, nbcanauxparpage*31-44, 244, 50, 20, hwnd, (HMENU)ID_DEFAULTBUTTON, g_hInst, NULL); puis j'intercepte toujours : if(LOWORD(wParam)==ID_DEFAULTBUTTON){ SetFocus(hwnd); } 
|
|
dimanche 18 septembre 2005 à 00:39:18 |
Re : Faire perdre le focus d'une editbox

Mastersam
|
... suite du message (ça a merdé chef) Mais rien ne se passe. Je vais tenter le subclassement même si j'ai un peu de mal à le comprendre. Mais j'aimerais savoir pourquoi je n'arrive pas à faire fonctionner la méthode de Brunews qui me conviendrais mieux je pense. 
|
|
dimanche 18 septembre 2005 à 15:50:50 |
Re : Faire perdre le focus d'une editbox

racpp
|
Réponse acceptée !
Le principe du sous-classement est très simple:
Chaque contrôle (Edit, Bouton, Static etc...) a une procédure par
défaut qui le gère. Cette procédure est invisible car elle est gérée
par le système. SetWindowLong() nous
permet de récupérer l'adresse de cette procédure et puis la remplacer
par l'adresse de notre procédure de sous-classement. Ainsi tous
les messages destinés à la procédure originale sont interceptés dans la
procédure de sous-classement. Si on fait return 0
dans le traitement d'un message, celui-ci ne sera pas envoyé à la
procédure originale. C'est justement le but recherché. Pour laisser
passer les autres messages on utilise CallWindowProc() comme dans l'exemple.
|
|
Cette discussion est classée dans : edit, focus, wm, editbox, perdre
Répondre à ce message
Sujets en rapport avec ce message
editbox et couleur [ par julienbj ]
Malgré une lecture des différentes sources et réponses sur le sujet, je n'arrive toujours pas à réaliser ce que je veux!Je suis en train de faire une
Focus et couleur... en C pour PocketPC [ par fredsor ]
Bonjour a vousDans mon projet, je dois créer différents composant visuel pour Pocket PC : libellé, editbox,bouton et listbox (la aussi pa le choix)- C
EDITBOX [ par timy94 ]
Mon problème est le suivant: Je voudrais compter le nombre de changement de valeur dans un EditBox Le problème c'est que WM_COMMAND, est envoyé par W
edit box slider [ par thepat2 ]
Bonjour,J ai une editbox et un slider. Lorsque la position du slider (HScroll) est changee l editbox prend la nouvelle valeur.J aimerais maintenant qu
API Windows, gestion de WM_COMMAND [ par coucou_le_minou ]
Bonjour, tout d'abord pardonnez moi si mon message ne correspond pas a la rubrique choisie, j'ai eu quelques soucis a cerner la categorie de mon probl
Recuperation valeur editbox [ par fredsor ]
Bonjour,Je cherche a recupere la valeur d'une editbox, mais ca me revnoi que le premier caractere a chaque fois?J'essaye avec GetWindowText, et aussi
Probleme d'EditBox [ par SergentP ]
Salut,J'ai créer une fenêtre avec un edit box et je cherche à le redimensionner lorsque un WM_SIZING est envoyé, pour cela jutilise SetWindowPos comme
edit et autre [ par deck_bsd ]
Bonsoir a tous :D Voila c'est une bête question mais dans les propriétés d'une editbox,... je n'ai pas trouvé comment faire en sorte que l'affichage
Focus Editbox [ par NeoUmbrella ]
Bonjour, j'aimerais etre averti lorsqu'un editbox a le focuspour ceci je procede comme ceci :case WM_NOTIFY:if(((LPNMHDR)lParam)->code == EN_SETFOCUS)
Sous classement editbox [ par julienbj ]
Je cherche à sous classer une editbox pour modifier son affichage. Je sous classe donc le message WM_PAINT pour pouvoir modifier l'apparence de l'edit
Livres en rapport
|
Derniers Blogs
JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|