Page 1 sur 1
[R] Bloquer et débloquer SHIFT
Posté : sam. 22 mars 2014 20:58
par aulus
Bonjour,
Afin que l'utilisateur puisse entrer une année dans un input, sans avoir besoin d'appuyer sur la touche SHIFT lorsque son portable ne possède pas de clavier numérique, j'imagine simuler la touche SHIFT LOCK enfoncé si remplissage de l'input puis SHIFT UNLOCK en quittant l'input.
J'ai pensé faire appel à Func WM_COMMAND()
Puis :
Pourriez-vous me dire si mon appel à WM_COMMAND est la meilleure solution ?
Merci
Re: [..] Bloquer et débloquer SHIFT
Posté : sam. 22 mars 2014 22:25
par mikell
Oui
Mais personnellement comme j'aime pas les Send je le ferais plutôt comme ça pour que ça marche avec les 2 claviers en ignorant (ou pas...) la touche Shift
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $array[10] = ["à", "&", "é", '"', "'", "(", "-", "è", "_", "ç"]
$gui = GUICreate("test", 200, 100)
$input = GUICtrlCreateInput("", 30, 30, 50, 20)
GUISetState()
GUIRegisterMsg($WM_COMMAND, "_Date")
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func _Date($hWnd, $Msg, $wParam, $lParam) ;WM_COMMAND
#forceref $hWnd, $Msg, $lParam
Switch BitAND($wParam, 0x0000FFFF)
Case $input
For $i = 0 to 9
GuiCtrlSetData($input, StringReplace(GuiCtrlRead($input), $array[$i], $i) )
Next
EndSwitch
Return 'GUI_RUNDEFMSG'
EndFunc
Re: [..] Bloquer et débloquer SHIFT
Posté : sam. 22 mars 2014 22:33
par jguinch
Avec la touche SHIFT enfoncée, tu risques de rencontrer des problèmes lorsque l'utilisateur ira cliquer ou tapper en dehors de la GUI : il faudra alors gérer tous les cas de figure.
Une solution pourrait être d'intercepter les touches tapées et faire un remplacement (remplacer à par 0, & par 1 ...)
► Afficher le texte
Code : Tout sélectionner
#include <EditConstants.au3>
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
Global $aKeys[10] = [ "à", "&", "é", '"', "'", "(", "-", "è", "_", "ç" ]
; [...]
Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
#forceref $hWnd, $Msg
Local $nNotifyCode = BitShift($wParam, 16)
Local $nID = BitAND($wParam, 0x0000FFFF)
Local $sText
Switch $nID
Case $input ; ton input
Switch $nNotifyCode
Case $EN_CHANGE
$sText = GUICtrlRead($input)
For $i = 0 To 9
$sText = StringReplace( $sText, $aKeys[$i], $i)
Next
GUICtrlSetData($input, $sText)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
Edit : encore grillé par Mikell !!!! (avec la même idée, en plus)

Re: [..] Bloquer et débloquer SHIFT
Posté : sam. 22 mars 2014 22:51
par mikell
Les grands esprits se rencontrent

Re: [..] Bloquer et débloquer SHIFT
Posté : dim. 23 mars 2014 10:15
par aulus
Merci à tous deux pour votre meilleure solution que la mienne. J'avais des doutes en effet sur l'efficacité de Send("{SHIFTUP}"), imaginant que l'utilisateur n'ait pas la bonne idée de remplir l'input sensé débloquer le shift.
J'ai réussi à adapter votre code au mien, la fonction WM_COMMAND() existant déjà dans mon programme.
Je ne regrette pas d'avoir demandé votre avis. Merci encore.