PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → WM_RBUTTONDOWN et WM_CHAR
WM_RBUTTONDOWN et WM_CHAR
Débuté par Jack, 30 avr. 2024 21:39 - 3 réponses
Posté le 30 avril 2024 - 21:39
Bonsoir à tous,

J'avais déjà posté sur l'interception de touches ou d'événements souris.

J'ai amélioré un exemple de programme de calculette qui était trop simpliste.

Le problème : j'ai bien EXTERNE "KEYCONST.wl" et EXTERNE "WINCONST.WL".

Avec WM_RBUTTONDOWN je renvoie vers un bouton qui initialise le champ de saisie des chiffres, fonctionne.

Si j'utilise WM_CHAR (SI ToucheEnfoncée(VK_ESCAPE) = Vrai ALORS
Info("Touche ESCAPE") // pour test
FIN)

Avant que je fournisse des chiffres à la calculette, fonctionne, après non, comme si la fenêtre n'avait plus le focus, je force le focus maie rien à faire, aucune action, le but est de faire la même exécution que WM_RBUTTONDOW , mon champ chiffres est une chaine où je concatène les chiffres saisis.





Là je sèche vraiment.

Merci à vous si solution, car j'ai cherché avant de vous écrire ne comprenant pas ces deux comportements, il y a un problème de focus pour moi dans WM_CHAR
Posté le 02 mai 2024 - 20:17
Bonsoir, je me répond.

Visiblement les boutons gardent le focus après appui.

Solution pas très élégante :, chaque bouton a un événement WM_KEYDONW qui renvoie à une procédure ESCAPE() où si la touche VK_ESCAPE est activée on exécute le bouton C qui fait un RAZ complet des valeurs.

Auparavant je mettais les événements dans la fenêtre mais les boutons conservant leur focus au détriment de la fenêtre j'ai donc utilisé la solution ci dessus en espérant n'avoir pas d'effets de bord. Je teste.

Bonne soirée
Posté le 04 mai 2024 - 20:24
Bonsoir,

Je me réponds à nouveau.

N'étant pas satisfait j'ai trouvé la solution pour m'adresser à la fenêtre pour l'événement VK_ESCAPE malgré le focus demeuré sur les boutons :

Fin d'initialisation de la fenêtre (code) :

Evénement("ToucheDown","*.*",WM_KEYDOWN)

Procédure ToucheDown() ci dessous

PROCÉDURE ToucheDown()

nMessage est un entier système = _EVE.wMessage o
nWparam est un entier système = _EVE.wParam

//SI nMessage=WM_KEYDOWN _ET_ nWparam=VK_NUMPAD6
//Ici quand la touche F1 sera enfoncée
//Trace(FenEnCours(),ChampEnCours())
//FIN

SI nMessage=WM_KEYDOWN _ET_ nWparam=VK_ESCAPE
//Ici quand la touche VK_ESCAPE sera enfoncée
//Trace(FenEnCours(),ChampEnCours())
ESCAPE() (Procédure ESCAPE())
FIN

PROCÉDURE ESCAPE()

SI ToucheEnfoncée(VK_ESCAPE)= Vrai ALORS
ExécuteTraitement(BTN_C,trtClic)
// //Info("Touche escape enfoncée")

FIN

Dans cet événement la fenêtre reprend son focus et on peut traiter les événements.

C'est bien de gratter et trouver mais pas intuitif tout de même.

Bonne soirée à tous.
Posté le 05 mai 2024 - 17:19
Re bonjour à toutes et tous,

Pour finir, je parlais de focus or en interceptant les messages Windows plus d'histoire de focus.

J'arrive après avoir relu vos contributions et des compléments sur Internet à ce que je voulais, notamment la détection de la touche =

La procédure finale :

PROCÉDURE ToucheDown()

nMessage est un entier système = _EVE.wMessage
nWparam est un entier système = _EVE.wParam

//SI nMessage=WM_KEYDOWN _ET_ nWparam=VK_NUMPAD6 --> 6 sur le pavé numérique
//Ici quand la touche 6 du pavé numérique sera enfoncée
//Trace(FenEnCours(),ChampEnCours())
//FIN

SI nMessage=WM_KEYDOWN ALORS// _ET_ nWparam=VK_ESCAPE
//Ici quand la touche VK_ESCAPE sera enfoncée
//Trace(FenEnCours(),ChampEnCours())
//info(nWparam)

SI nWparam=27 ALORS // Touche ESCAPE

ESCAPE()

FIN

SI nWparam = 187 ALORS // Touche =

ExécuteTraitement(BTN_egal,trtClic)

FIN

FIN

Ma calculette a enfin l'aspect voulue, notamment la touche =





Merci à toutes et tous.