Page 1 sur 1
[R] Zone input de capture de touche
Posté : mer. 09 juin 2010 14:01
par kalixe
Bonjour,
Quelqu'un serait-il comment réaliser une zone input mais dans lequel ne s'affiche uniquement des sequences de touches sélectionnées à partir de _isPressed, mais aucune autre touche que celles sélectionnées ? Existe-t-il une fonction pour ?
Re: [..] Zone input de capture de touche
Posté : mer. 09 juin 2010 14:54
par Tlem
Pourriez-vous être plus explicite ?
Des exemples ?
Re: [..] Zone input de capture de touche
Posté : mer. 09 juin 2010 15:02
par kalixe
Je ne sais pas si vous connaissez fraps ? ca permet de faire des captures d'écran ou vidéo.
Il y a des zones input, mais ces zones sont des configurations pour lancer les actions, or dans ces zones lorsqu'on clique dedans ca sélectionne ce qu'il y a dedans, qui plus est ca ne réagit pas comme une zone input ca a affiche la touche que l'on a appuyé si on tape du texte ca ne gardera que la dernière lettre tapée, est-ce juste une zone input modifiée par des fonctions ?

Re: [..] Zone input de capture de touche
Posté : jeu. 10 juin 2010 09:52
par kalixe
Bon voilà , j'ai bidouillé un truc, une zone input controlée, ne sont acceptées que les touches définies ici les touches du clavier numérique. Je ne laisse pas passer les autres touches, enfin malheureusement elles entrent mais la donnée est automatiquement remise à la dernière valeur correcte tapée. Quelqu'un aurait quelques chose de plus propre ?
Pour reprendre l'exemple de fraps il me manque une chose, c'est que tout le texte dans la zone input soit toujours sélectionnée, il y a une fonction pour ça ?
Code : Tout sélectionner
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
Global $lastSelect
$lastSelect = "Choix de la touche"
$dll = DllOpen("user32.dll")
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("KeyInput", 288, 91, 192, 124)
$keyInput = GUICtrlCreateInput("", 80, 32, 113, 21)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
KeySelect()
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
sleep(100)
WEnd
Func KeySelect()
If _IsPressed("60", $dll) Then
$keyPressed = "0 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("61", $dll) Then
$keyPressed = "1 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("62", $dll) Then
$keyPressed = "2 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("63", $dll) Then
$keyPressed = "3 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("64", $dll) Then
$keyPressed = "4 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("65", $dll) Then
$keyPressed = "5 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("66", $dll) Then
$keyPressed = "6 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("67", $dll) Then
$keyPressed = "7 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("68", $dll) Then
$keyPressed = "8 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("69", $dll) Then
$keyPressed = "9 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("6A", $dll) Then
$keyPressed = "* [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("6B", $dll) Then
$keyPressed = "+ [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("6D", $dll) Then
$keyPressed = "- [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("6E", $dll) Then
$keyPressed = ", [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("6F", $dll) Then
$keyPressed = "/ [Keypad]"
setKey($keyPressed)
Else
setkey($lastSelect)
EndIf
EndFunc
Func setKey($key)
if $key <> "" Then
$lastSelect = $key
EndIf
GUICtrlSetData($keyInput,$key)
EndFunc
DllClose($dll)
Re: [..] Zone input de capture de touche
Posté : jeu. 10 juin 2010 10:00
par kalixe
Ok, c'est bon j'ai trouvé ce que je cherchais à faire :
Code : Tout sélectionner
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
Global $lastSelect
$lastSelect = "Choix de la touche"
$dll = DllOpen("user32.dll")
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("KeyInput", 288, 91, 192, 124)
$keyInput = GUICtrlCreateInput("", 80, 32, 113, 21)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
KeySelect()
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
sleep(100)
WEnd
Func KeySelect()
If _IsPressed("60", $dll) Then
$keyPressed = "0 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("61", $dll) Then
$keyPressed = "1 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("62", $dll) Then
$keyPressed = "2 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("63", $dll) Then
$keyPressed = "3 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("64", $dll) Then
$keyPressed = "4 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("65", $dll) Then
$keyPressed = "5 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("66", $dll) Then
$keyPressed = "6 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("67", $dll) Then
$keyPressed = "7 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("68", $dll) Then
$keyPressed = "8 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("69", $dll) Then
$keyPressed = "9 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("6A", $dll) Then
$keyPressed = "* [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("6B", $dll) Then
$keyPressed = "+ [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("6D", $dll) Then
$keyPressed = "- [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("6E", $dll) Then
$keyPressed = ", [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("6F", $dll) Then
$keyPressed = "/ [Keypad]"
setKey($keyPressed)
Else
setkey($lastSelect)
EndIf
EndFunc
Func setKey($key)
if $key <> "" Then
$lastSelect = $key
EndIf
GUICtrlSetData($keyInput,$key)
GUICtrlSetState($keyInput,$GUI_FOCUS)
EndFunc
DllClose($dll)
Re: [R] Zone input de capture de touche
Posté : jeu. 10 juin 2010 12:19
par kalixe
Je vois que le sujet est passé à résolu tout seul
pour info, pour les personnes que ça peut intéresser un jour, j'ajoute une modification importante.
Effectivement l'utilisation de $GUI_FOCUS, fais un select de la zone (tres bien) mais aussi va forcer le focus sur votre control (pas forcément pratique) et donc plus moyen d'utiliser les autres.
Je présente donc une méthode plus intéressante, c'est de créer notre zone de control en ReadOnly comme l'utilisateur ne peut rien rentrer directement tout est controlé par notre fonction _isPressed selon ce qu'on a autorisé.
Voici le code :
Code : Tout sélectionner
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
Global $lastSelect
$lastSelect = "Choix de la touche"
$dll = DllOpen("user32.dll")
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("KeyInput", 288, 91, 192, 124)
$keyInput = GUICtrlCreateInput("", 80, 32, 113, 21,$ES_READONLY)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
KeySelect()
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
sleep(100)
WEnd
Func KeySelect()
If _IsPressed("60", $dll) Then
$keyPressed = "0 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("61", $dll) Then
$keyPressed = "1 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("62", $dll) Then
$keyPressed = "2 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("63", $dll) Then
$keyPressed = "3 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("64", $dll) Then
$keyPressed = "4 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("65", $dll) Then
$keyPressed = "5 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("66", $dll) Then
$keyPressed = "6 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("67", $dll) Then
$keyPressed = "7 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("68", $dll) Then
$keyPressed = "8 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("69", $dll) Then
$keyPressed = "9 [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("6A", $dll) Then
$keyPressed = "* [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("6B", $dll) Then
$keyPressed = "+ [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("6D", $dll) Then
$keyPressed = "- [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("6E", $dll) Then
$keyPressed = ", [Keypad]"
setKey($keyPressed)
ElseIf _IsPressed("6F", $dll) Then
$keyPressed = "/ [Keypad]"
setKey($keyPressed)
Else
setkey($lastSelect)
EndIf
EndFunc
Func setKey($key)
if $key <> "" Then
$lastSelect = $key
EndIf
GUICtrlSetData($keyInput,$key)
EndFunc
DllClose($dll)