témoin verr num qui s'éteint et s'allume tout le temps

Le
Gundt
bonjour à tous,

J'ai un souci avec un phénomène étrange et qui devient vite agaçant car
il engendre des saisies de données erronées.
Dans l'application que j'ai créée sous Access 97, à chaque fois que
l'utilisateur choisit une valeur dans une une liste déroulante qui
s'ouvre automatiquement, 3 fois sur 4 environ, le témoin verr num s'éteint.
J'ai donc ajouté un petit script qui lance l'activation de verr num au
moment du déroulement de la liste : malheureusement, si le témoin verr
num ne s'était pas éteint, c'est l'effet inverse qui se produit.
Comme l'utilisateur doit saisir des quantités juste après avoir choisi
un article dans le déroulant, cela donne souvent des données
incohérentes (le curseur change de ctrl ou de page écran) ou des
messages d'erreur car le curseur ne se trouve plus sur le ctrl quantité
et que c'est une valeur de saisie obligatoire.

J'ai essayé l'application (qui est faite pour tourner en runtime) sur
XP, sur 2000 et sur 98. J'observe le même phénomène y compris sur mon
poste où est installé Access 97.

Le code que je rajoute à l'ouverture de la liste déroulante, c'est :
Function Ouvreliste()
On Error GoTo Ouvreliste_Err

SendKeys "%{DOWN}"
numk
numk
Ouvreliste_Exit:
Exit Function

Ouvreliste_Err:
MsgBox Error$
Resume Ouvreliste_Exit

End Function

Je mets donc cette fonction =Ouvreliste() en propriété "Sur entrée" du
ctrl déroulant.

Ci-dessous, le code de numk dans le module verrouillage de touches.

Je viens de voir que le code est fait pour 95/98 et NT. Il date un peu
mais pour XP et 2000 : que faudrait-il ajouter ou modifier ?

Comme le code est assez long, je l'ai mis après ma signature.

Connaissez-vous ce problème et si oui, comment l'avez-vous solutionné ?

Merci d'avance.

Gundt


-
Option Compare Database
Option Explicit

'déclaration de type pour la version de l'os
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type

'déclaration des API
Private Declare Function GetVersionEx Lib "kernel32" Alias _
"GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long

Private Declare Sub keybd_event Lib "user32" _
(ByVal bVk As Byte, ByVal bScan As Byte, _
ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Declare Function GetKeyboardState Lib "user32" _
(pbKeyState As Byte) As Long

Private Declare Function SetKeyboardState Lib "user32" _
(lppbKeyState As Byte) As Long

'déclaration des constantes
Const VK_NUMLOCK = &H90
Const VK_SCROLL = &H91
Const VK_CAPITAL = &H14
Const KEYEVENTF_EXTENDEDKEY = &H1
Const KEYEVENTF_KEYUP = &H2
Const VER_PLATFORM_WIN32_NT = 2
Const VER_PLATFORM_WIN32_WINDOWS = 1

'déclaration des variables
Dim o As OSVERSIONINFO
Dim numlockstate As Boolean
Dim scrolllockstate As Boolean
Dim capslockstate As Boolean


' verrouillage de la touche numlock
Function numk()

o.dwOSVersionInfoSize = Len(o)
GetVersionEx o
Dim keys(0 To 255) As Byte
GetKeyboardState keys(0)

numlockstate = keys(VK_NUMLOCK)
If numlockstate <> True Then
'cas de win95 ou win98
If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then
keys(VK_NUMLOCK) = 1
SetKeyboardState keys(0)
''cas de win NT
'dans le cas de NT, enlever les ' ci-après
'ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then
' 'simulation de la pression de la touche
' keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
' 'simulation de la touche relâchée
' keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or
KEYEVENTF_KEYUP, 0
End If
End If

End Function


' verrouillage de la touche capslock
Function capsk()

o.dwOSVersionInfoSize = Len(o)
GetVersionEx o
Dim keys(0 To 255) As Byte
GetKeyboardState keys(0)

capslockstate = keys(VK_CAPITAL)
If capslockstate <> True Then
'cas de win95 ou win98
If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then
keys(VK_CAPITAL) = 1
SetKeyboardState keys(0)
'cas de win NT
ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then
'simulation de la pression de la touche
keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
'simulation de la touche relâchée
keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or
KEYEVENTF_KEYUP, 0
End If
End If

End Function

' verrouillage de la touche scrollock
Function scrollk()

o.dwOSVersionInfoSize = Len(o)
GetVersionEx o
Dim keys(0 To 255) As Byte
GetKeyboardState keys(0)

scrolllockstate = keys(VK_SCROLL)
If scrolllockstate <> True Then
'cas de win95 ou win98
If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then
keys(VK_SCROLL) = 1
SetKeyboardState keys(0)
'cas de win NT
ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then
'simulation de la pression de la touche
keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
'simulation de la touche relâchée
keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or
KEYEVENTF_KEYUP, 0
End If
End If

End Function
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Domi
Le #6185241
Bonjour,

Regarde ce fil de discussion, cela ressemble à ton problème.

http://groups.google.fr/group/microsoft.public.fr.access/browse_thread/thread/f6fdab74ae835f4e/137d654e508fb8fc?lnk=gst&qÊpslock&rnum=6&hl=fr#137d654e508fb8fc

Domi


bonjour à tous,

J'ai un souci avec un phénomène étrange et qui devient vite agaçant car
il engendre des saisies de données erronées.
Dans l'application que j'ai créée sous Access 97, à chaque fois que
l'utilisateur choisit une valeur dans une une liste déroulante qui
s'ouvre automatiquement, 3 fois sur 4 environ, le témoin verr num s'éteint.
J'ai donc ajouté un petit script qui lance l'activation de verr num au
moment du déroulement de la liste : malheureusement, si le témoin verr
num ne s'était pas éteint, c'est l'effet inverse qui se produit.
Comme l'utilisateur doit saisir des quantités juste après avoir choisi
un article dans le déroulant, cela donne souvent des données
incohérentes (le curseur change de ctrl ou de page écran) ou des
messages d'erreur car le curseur ne se trouve plus sur le ctrl quantité
et que c'est une valeur de saisie obligatoire.

J'ai essayé l'application (qui est faite pour tourner en runtime) sur
XP, sur 2000 et sur 98. J'observe le même phénomène y compris sur mon
poste où est installé Access 97.

Le code que je rajoute à l'ouverture de la liste déroulante, c'est :
Function Ouvreliste()
On Error GoTo Ouvreliste_Err

SendKeys "%{DOWN}"
numk
numk
Ouvreliste_Exit:
Exit Function

Ouvreliste_Err:
MsgBox Error$
Resume Ouvreliste_Exit

End Function

Je mets donc cette fonction =Ouvreliste() en propriété "Sur entrée" du
ctrl déroulant.

Ci-dessous, le code de numk dans le module verrouillage de touches.

Je viens de voir que le code est fait pour 95/98 et NT. Il date un peu
mais pour XP et 2000 : que faudrait-il ajouter ou modifier ?

Comme le code est assez long, je l'ai mis après ma signature.

Connaissez-vous ce problème et si oui, comment l'avez-vous solutionné ?

Merci d'avance.

Gundt


----------------------------------------------------
Option Compare Database
Option Explicit

'déclaration de type pour la version de l'os
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type

'déclaration des API
Private Declare Function GetVersionEx Lib "kernel32" Alias _
"GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long

Private Declare Sub keybd_event Lib "user32" _
(ByVal bVk As Byte, ByVal bScan As Byte, _
ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Declare Function GetKeyboardState Lib "user32" _
(pbKeyState As Byte) As Long

Private Declare Function SetKeyboardState Lib "user32" _
(lppbKeyState As Byte) As Long

'déclaration des constantes
Const VK_NUMLOCK = &H90
Const VK_SCROLL = &H91
Const VK_CAPITAL = &H14
Const KEYEVENTF_EXTENDEDKEY = &H1
Const KEYEVENTF_KEYUP = &H2
Const VER_PLATFORM_WIN32_NT = 2
Const VER_PLATFORM_WIN32_WINDOWS = 1

'déclaration des variables
Dim o As OSVERSIONINFO
Dim numlockstate As Boolean
Dim scrolllockstate As Boolean
Dim capslockstate As Boolean


' verrouillage de la touche numlock
Function numk()

o.dwOSVersionInfoSize = Len(o)
GetVersionEx o
Dim keys(0 To 255) As Byte
GetKeyboardState keys(0)

numlockstate = keys(VK_NUMLOCK)
If numlockstate <> True Then
'cas de win95 ou win98
If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then
keys(VK_NUMLOCK) = 1
SetKeyboardState keys(0)
''cas de win NT
'dans le cas de NT, enlever les ' ci-après
'ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then
' 'simulation de la pression de la touche
' keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
' 'simulation de la touche relâchée
' keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or
KEYEVENTF_KEYUP, 0
End If
End If

End Function


' verrouillage de la touche capslock
Function capsk()

o.dwOSVersionInfoSize = Len(o)
GetVersionEx o
Dim keys(0 To 255) As Byte
GetKeyboardState keys(0)

capslockstate = keys(VK_CAPITAL)
If capslockstate <> True Then
'cas de win95 ou win98
If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then
keys(VK_CAPITAL) = 1
SetKeyboardState keys(0)
'cas de win NT
ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then
'simulation de la pression de la touche
keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
'simulation de la touche relâchée
keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or
KEYEVENTF_KEYUP, 0
End If
End If

End Function

' verrouillage de la touche scrollock
Function scrollk()

o.dwOSVersionInfoSize = Len(o)
GetVersionEx o
Dim keys(0 To 255) As Byte
GetKeyboardState keys(0)

scrolllockstate = keys(VK_SCROLL)
If scrolllockstate <> True Then
'cas de win95 ou win98
If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then
keys(VK_SCROLL) = 1
SetKeyboardState keys(0)
'cas de win NT
ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then
'simulation de la pression de la touche
keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
'simulation de la touche relâchée
keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or
KEYEVENTF_KEYUP, 0
End If
End If

End Function




Publicité
Poster une réponse
Anonyme