Empecher certain charactere dans une boite de texte

PinkRabbit84 Messages postés 40 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 29 décembre 2004 - 28 déc. 2004 à 23:04
PinkRabbit84 Messages postés 40 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 29 décembre 2004 - 29 déc. 2004 à 00:20
J'aimerai empecher l'utilisateur de taper certain charactere dans une boite de texte.

J'ai essayer d'intercepter les messages envoyer au TEXTBOX et en gardant l'adresse de l'ancienne WndProc mais lorsque ma nouvelle WndProc recoie le message WM_SETTEXT la ligne:

return CallWindowProc((WNDPROC)GetWindowLong(hWnd, GWL_USERDATA), hWnd, iMsg, wParam, lParam);

fait l'erreur suivante:
First-chance exception at 0x00000001 in BoxEdit.exe: 0xC0000005: Access violation reading location 0x00000001.

Merci d'avance

PinkRabbit

16 réponses

cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
28 déc. 2004 à 23:17
Tu sous classes, et lors de la reception du msg WM_CHAR, tu verifie les caracteres.

+2(p - n)
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
28 déc. 2004 à 23:20
Au fait, c lorsk tu fais SetClassLong(...) pour sous classer kil te faut recuperer l'ancien WNDPROC de ton textbox :

//En global
WNDPROC oldproc;

oldproc = SetClassLong(..);

...
return CallWindowProc(olproc, hwnd, message, wparam, lparam);

Voila

+2(p - n)
0
PinkRabbit84 Messages postés 40 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 29 décembre 2004
28 déc. 2004 à 23:21
c'est ca que j'essayais de faire, mais comem je l'ai explquer dans mon message,

return CallWindowProc((WNDPROC)GetWindowLong(hWnd, GWL_USERDATA), hWnd, iMsg, wParam, lParam);

genere une erreur lorsque c'est le message WM_SETTEXT

LRESULT CALLBACK RenameProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{

return CallWindowProc((WNDPROC)GetWindowLong(hWnd, GWL_USERDATA), hWnd, iMsg, wParam, lParam);
}

tout les autres messages passent mais pas lui... quelqu'un a un idee??
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
28 déc. 2004 à 23:33
Atta, excuse moi, jme trompe ptet, mais c koi ca : GetWindowLong(hWnd, GWL_USERDATA) ??

Tu voudrais pas plutot mettre GWL_WNDPROC ?

+2(p - n)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
28 déc. 2004 à 23:34
Et pis dsl, mais c pas tout a fait ce ke je t'ai dit de faire plus haut...Avec ce ke je t'ai dit, c sur, tout marche.

+2(p - n)
0
PinkRabbit84 Messages postés 40 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 29 décembre 2004
28 déc. 2004 à 23:35
Non c'est bien GWL_USERDATA que je voulais mettre, car j'ai garder l'addresse de l'ancienne WndProc dans le UserData de la fenetre
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
28 déc. 2004 à 23:48
L'ancienne WndProc est donnée par l'appel de SetWindowLongPtr, comme te l'a dit AlexMan
0
PinkRabbit84 Messages postés 40 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 29 décembre 2004
28 déc. 2004 à 23:53
Je sais ca, le probleme c'est pas ma function RenameProc. Elle marche! C'est quand elle recoie le message WM_SETTEXT que CallWindowProc deconne.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
28 déc. 2004 à 23:56
C'est bête d'appeler a chaque fois GetWindowLong plutot que d'utiliser une variable globale oldProc
Fais-tu quelque chose de spécial quand tu recois WM_SETTEXT?
0
PinkRabbit84 Messages postés 40 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 29 décembre 2004
29 déc. 2004 à 00:04
Non rien.. en fait ma function RenameProc est encore vide:

LRESULT CALLBACK RenameProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
return CallWindowProc((WNDPROC)GetWindowLong(hWnd, GWL_USERDATA), hWnd, iMsg, wParam, lParam);
}
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
29 déc. 2004 à 00:07
Mais cette erreur tu dois l'avoir aussi avant de sous-classer dans ce cas la!
C'est un SetWindowText que tu fais?
0
PinkRabbit84 Messages postés 40 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 29 décembre 2004
29 déc. 2004 à 00:10
Non sans sous-classer tout marche

Oui c'est un SetWindowText
0
PinkRabbit84 Messages postés 40 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 29 décembre 2004
29 déc. 2004 à 00:13
J'ai mis, comme AlexMAN l'avait dit:

// En global
WNDPROC OldWndProc

et ca marche la...

pointeur pointait surement n'import'ou
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
29 déc. 2004 à 00:16
J'ai fait un test chez moi, marche très bien.
Vérifie que tu as changé la WndProc de l'edit avec SetWindowLong et non pas SetClassLong
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
29 déc. 2004 à 00:18
Si tu lui a rien mis, aucune raison que GetWindowLong(hWnd, GWL_USERDATA) te donne l'adresse de la WndProc par défaut!
0
PinkRabbit84 Messages postés 40 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 29 décembre 2004
29 déc. 2004 à 00:20
lol, je sais, j'y avait storer l'ancienne WndProc.. je comprend juste pas pourquoi elle ne me donnais pas la bonne addresse
0
Rejoignez-nous