Numéro d'article: 466037 - Dernière mise à jour: mardi 24 février 2004 - Version: 2.0

Récupérer et traiter les touches du clavier

Ancien nº de publication de cet article : F16037
Agrandir tout | Réduire tout

Résumé

LES INFORMATIONS CONTENUES DANS CE DOCUMENT SONT FOURNIES SANS GARANTIE
D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. LE DESTINATAIRE ASSUME LE RISQUE
DE L'UTILISATION DU CONTENU DE CE DOCUMENT.

Cet article suppose que vous êtes familier avec le langage de
développement VISUAL BASIC (ACCESS BASIC pour les versions antérieures à
Microsoft Access 7.00 pour Windows 95), et avec la création d'application
MICROSOFT ACCESS.

Cet exemple est fourni à titre d'information pour les utilisateurs
avertis. Si vous utilisez incorrectement des fonctions API, vous risquez
de causer des erreurs au niveau de votre système d'exploitation et de
devoir redémarrer votre ordinateur. Pour plus d'informations concernant
l'utilisation des API WINDOWS avec MICROSOFT ACCESS veuillez vous référer
aux documentations du WINDOWS SDK (SOFTWARE DEVELOPMENT KIT).

Symptômes


Comment connaître et traiter les touches du clavier par anticipation pour
éviter un déclenchement d'action sur un contrôle de formulaire ou au
niveau du formulaire lui-même ?


Résolution


Cet article technique propose plusieurs méthodes pour traiter la gestion
des touches claviers dans un formulaire ACCESS.

Méthode simple : Evénement "Sur sortie".
****************************************
Cet exemple explique comment tester si les touches clavier : Entrée,
Tabulation, Majuscule-Tabulation, Page-Suivante, Page-Précèdente ont été
pressés sur un contrôle d'un formulaire et ainsi contourner ou éviter
toute action sensé se déclencher.

AVANTAGE :
Simple à mettre en place.
INCONVENIENT :
Il sera nécessaire de créer une procédure événementielle de ce type sur
l'événement "Sur sortie" de tous les contrôles à traiter, donc autant de
fois le code à copier/coller que de contrôles à gérer.

Vous trouverez ci-dessous un exemple en Visual Basic qui annule l'action
la frappe de touches clavier.

Private Sub Adresse_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case 13, 9, 33, 34
KeyCode = 0
Case Else
Debug.Print KeyCode, Shift
End Select
End Sub

Remarque :
- Pour Access 2.0, voir le fichier CONSTANT.TXT du répertoire ACCESS,
pour les constantes et valeur des touches clavier.
- Pour Access 7.0, à partir d'une fenêtre de module, choisir
l'Explorateur d'Objet à partir de la commande Affichage, dans la liste
nommée "Access - Microsoft Access for Windows 95", dans la liste
"Modules/Class" choisir Constants.


Méthode avec API .
*****************

Pour Microsoft Access 2.0
-------------------------

Cet exemple montre comment utiliser la fonction API GetKeyState() de
Windows pour détecter quelle touche ou combinaisons de touches a été
frappé au clavier pour quitter un contrôle d'un formulaire. Cette
technique permet d'éviter de quitter un contrôle de formulaire ou d'être
rediriger sur une action spécifique.

Tout en utilisant l'API et un code proche de la fonction
VerifieToucheClavier () ci-dessous, on pourrait créer une procédure
événementielle sur l'événement "Sur sortie" de tous les contrôles à
traiter.

La méthode proposée ici permet d'activer la gestion des touches clavier
en une seule fois à l'aide de trois fonctions Access Basic.

AVANTAGE :

- Permet de gérer les touches clavier au niveau du formulaire complet, au
niveau de l'application complète.
- Activer ou désactiver à tout moment la gestion des touches clavier

INCONVENIENT :
Méthode relativement complexe avec API.

1. Créer un nouveau module général.
Dans la section déclarations, entrer le code suivant :

' **** SECTION DECLARATIONS ******************************
Option Compare Database 'Utilise l'ordre de la base pour les
comparaisons de chaînes
Option Explicit

Global Const VK_CONTROL = &H11
Global Const VK_SHIFT = &H10

Global Const VK_TAB = &H9
Global Const VK_RETURN = &HD
Global Const VK_PRIOR = &H21 ' PGUP
Global Const VK_NEXT = &H22 ' PGDN

Declare Function GetKeyState% Lib "user.exe" (ByVal nKey%)

Global TestControleTouches As Integer'
********************************************************

Puis saisir les trois fonctions suivante dans un nouveau module générale
ACCESS BASIC :

Function ActiveControlTouches ()
Dim x As Integer

' Initialise à Vrai la variable Global TestControleTouches
TestControleTouches = True

' Active la fonction VerifieToucheClavier()
x = VerifieToucheClavier()

End Function

Function StopControlTouches ()

' Initialise à Vrai la variable Global TestControleTouches
' déclenche l'action de quitter-désactiver la fonction
VerifieToucheClavier
TestControleTouches = False

End Function

Function VerifieToucheClavier ()
Dim sControl As String
Dim sShift As String

Do
DoEvents
sControl = ""
sShift = ""

' Teste la frappe de la touche clavier Contrôle CTRL or Majuscule SHIFT
If GetKeyState(VK_CONTROL) < 0 Then sControl = "Ctrl+"
If GetKeyState(VK_SHIFT) < 0 Then sShift = "Shift+"

' Teste la frappe de la touche clavier TABulation
If GetKeyState(VK_TAB) < 0 Then
MsgBox "Vous venez d'appuyer sur les touches " & sControl & sShift &
"TABULATION!"
End If

' Teste la frappe de la touche clavier ENTREE
If GetKeyState(VK_RETURN) < 0 Then
MsgBox "Vous venez d'appuyer sur les touches " & sControl & sShift &
"ENTREE !"
End If

' Teste la frappe de la touche clavier PAGE SUIVANTE
If GetKeyState(VK_NEXT) < 0 Then
MsgBox "Vous venez d'appuyer sur les touches " & sControl & sShift &
"PAGE SUIVANTE !"
End If

' Teste la frappe de la touche clavier PAGE PRECEDENTE
If GetKeyState(VK_PRIOR) < 0 Then
MsgBox "Vous venez d'appuyer sur les touches " & sControl & sShift &
"PAGE PRECEDENTE !"
End If
DoEvents
Loop While TestControleTouches = True

End Function

2. Pour tester cette nouvelle fonctionnalité, créez une nouvelle macro
avec les actions suivantes :

OuvrirFormulaire: "Nom du Formulaire"
ExecuterCode: =ActiveControlTouches()

Vous pouvez également en mode modification du formulaire créer deux
controles de types bouton de commande avec les caractéristiques
suivantes:

Bouton1 :
---------
Légende : Stoppe la gestion des Touches Clavier.
Evénement Sur Clic : = StopControlTouches ()

Bouton2:
--------
Légende : Active la gestion des Touches Clavier.
Evénement Sur Clic : = =ActiveControlTouches ()

EXPLICATION :

L'exemple est conçu de telle sorte qu'après le chargement du formulaire
la gestion des touches est activée pour l'ensemble de l'application, d'où
la possibilité de gérer cette gestion par ces deux boutons de commande.

3. Pour tester, charger le formulaire, et essayer de quitter-sortir du
contrôle que vous avez modifié à l'étape 2.


AUTRE EXEMPLE : Désactiver les touches PAGE PRECEDENTE et PAGE SUIVANTE
*************************************************************************
*

Désactiver les touches du clavier PAGE PRECEDENTE et PAGE SUIVANTE AVEC
l'API GetKeyState() Windows sur un formulaire

1. Créer dans un nouveau module général le code suivant :

Option Explicit
Global Const VK_PRIOR = &H21 ' PGUP
Global Const VK_NEXT = &H22 ' PGDN
Declare Function GetKeyState% Lib "user.exe" (ByVal nKey%)

Function DésactivePGUP_PGDN()
If GetKeyState(VK_PRIOR) < 0 Or GetKeyState(VK_NEXT) < 0 Then
DoCmd CancelEvent
End If
End Function

2. Sur la propriété SUR SORTIE de tous les contrôles d'un formulaire dont
vous souhaitez désactiver les touches du clavier PAGE PRECEDENTE et PAGE
SUIVANTE, taper :
=DésactivePGUP_PGDN()


Méthode Access 7.0 : propriété Aperçu des touches (KeyPreview)
***************************************************************
La propriété Aperçu des touches (KeyPreview) vous permet de spécifier si
les événements de clavier du formulaire sont appelés avant les évènements
de clavier des contrôles.

Vous pouvez utiliser la propriété Aperçu des touches (KeyPreview) pour
créer une procédure de gestion du clavier pour un formulaire. Par
exemple, lorsqu'une application utilise des touches de fonction,
l'attribution de la valeur OUI à la propriété Aperçu des touches
(KeyPreview) vous permet de traiter les frappes de touches au niveau du
formulaire plutôt que de devoir écrire du code pour chacun des contrôles
qui pourrait recevoir des événements de frappe de touches.

Cet exemple explique comment tester si les touches clavier : Entrée,
Tabulation, Majuscule-Tabulation, Page-Suivante, Page-Précèdente ont été
pressés dans un formulaire et ainsi par anticipation contourner ou éviter
toute action sensée se déclencher.

Solution :
1. Afficher les propriétés du formulaire, et affecter la valeur Oui à la
propriété Aperçu des touches.

2. Sur l'événement Sur Touche Appuyée créer le code en Visual Basic qui
annule l'action la frappe de touches clavier avant celle des contrôles.

Private Sub Adresse_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case 13, 9, 33, 34
KeyCode = 0
Case Else
Debug.Print KeyCode, Shift
End Select
End Sub

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Access 2.0 Standard
  • Microsoft Access 95 Standard
Mots-clés : 
fmr mdl KB466037
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Retired KB ArticleExclusion de responsabilité concernant les contenus obsolètes dans la Base de connaissances
Cet article concerne des produits pour lesquels Microsoft n'offre plus de support. Il est par conséquent fourni « en l'état » et ne sera plus mis à jour.