[R] Zone input de capture de touche

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
kalixe
Niveau 3
Niveau 3
Messages : 40
Enregistré le : mer. 02 déc. 2009 12:06
Status : Hors ligne

[R] Zone input de capture de touche

#1

Message 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 ?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Zone input de capture de touche

#2

Message par Tlem »

Pourriez-vous être plus explicite ?
Des exemples ?
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
kalixe
Niveau 3
Niveau 3
Messages : 40
Enregistré le : mer. 02 déc. 2009 12:06
Status : Hors ligne

Re: [..] Zone input de capture de touche

#3

Message 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 ?

Image
kalixe
Niveau 3
Niveau 3
Messages : 40
Enregistré le : mer. 02 déc. 2009 12:06
Status : Hors ligne

Re: [..] Zone input de capture de touche

#4

Message 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)
 
kalixe
Niveau 3
Niveau 3
Messages : 40
Enregistré le : mer. 02 déc. 2009 12:06
Status : Hors ligne

Re: [..] Zone input de capture de touche

#5

Message 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)
 
kalixe
Niveau 3
Niveau 3
Messages : 40
Enregistré le : mer. 02 déc. 2009 12:06
Status : Hors ligne

Re: [R] Zone input de capture de touche

#6

Message 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)
 
Répondre