Al Presionar una Tecla

Access trae sus propios eventos AlBajar, AlSubir o AlPresionar una Tecla, Pero que pasaria si el form esta Minimizado, Oculto o simplemente no tiene el FOCO (Pues nada, no se dispara el evento)

Para ello debemos recurrir a la Funcion API GetAsyncKeyState y crear un Codigo que me detecte la pulsasion de la tecla

*** EL CODIGO ***

Option Compare Database

'***************************************************************

'& &*

'& &*

'& &*

'& &*

'& Jefferson Jimenez (JJJT) &*

'& Cabimas - Venezuela &*

'& Julio - 2010 &*

'& &*

'& &*

'& &*

'& &*

'& &*

'***************************************************************

Option Explicit

'Declaramos al API que me servira para detectar la tecla pulsada

Private Declare Function GetAsyncKeyState _

Lib "user32" ( _

ByVal vKey As Long) As Integer

'Declaramos al API para crear un Timer

Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, _

ByVal nIDEvent As Long, _

ByVal uElapse As Long, _

ByVal lpTimerFunc As Long) As Long

Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, _

ByVal nIDEvent As Long) As Long

'Declaro la variable del FORM

Dim frmForm As Form

'Aca creo el codigo que me servira como detector

Public Sub AlPresionarTecla(frm As Form)

Set frmForm = frm 'Cargo el Form

SetTimer frm.hwnd, 0, 1, AddressOf DetectaTeclaJJJT 'Abro un Timer

End Sub

Private Sub DetectaTeclaJJJT( _

ByVal hwnd As Long, ByVal nIDEvent As Long, _

ByVal uElapse As Long, ByVal lpTimerFunc As Long)

'Solo debes elegir la tecla, le pasas el evento y listo

Dim i As Long

'para los 255 códigos Ascii

For i = 0 To 255

'si se ha pulsado una tecla la APi devuelve -32737

If GetAsyncKeyState(i) = -32767 Then

Select Case i

'Selecciono la tecla segun su valor

Case 9

MsgBox "se presiono la tecla : Tab"

'KillTimer frmForm.hwnd, 0

Case 13

MsgBox "se presiono la tecla : Enter"

'KillTimer frmForm.hwnd, 0

Case 20

MsgBox "se presiono la tecla : Mayuscula"

'KillTimer frmForm.hwnd, 0

Case 112

MsgBox "se presiono la tecla : F1"

'KillTimer frmForm.hwnd, 0

Case 113

MsgBox "se presiono la tecla : F2"

'KillTimer frmForm.hwnd, 0

Case 114

MsgBox "se presiono la tecla : F3"

'KillTimer frmForm.hwnd, 0

Case 115

MsgBox "se presiono la tecla : F4"

'KillTimer frmForm.hwnd, 0

Case 116

MsgBox "se presiono la tecla : F5"

'KillTimer frmForm.hwnd, 0

Case 117

MsgBox "se presiono la tecla : F6"

'KillTimer frmForm.hwnd, 0

Case 118

MsgBox "se presiono la tecla : F7"

'KillTimer frmForm.hwnd, 0

Case 119

MsgBox "se presiono la tecla : F8"

'KillTimer frmForm.hwnd, 0

Case 120

MsgBox "se presiono la tecla : F9"

'KillTimer frmForm.hwnd, 0

Case 121

MsgBox "se presiono la tecla : F10"

'KillTimer frmForm.hwnd, 0

Case 122

MsgBox "se presiono la tecla : F11"

'KillTimer frmForm.hwnd, 0

Case 123

MsgBox "se presiono la tecla : F12"

'KillTimer frmForm.hwnd, 0

End Select

End If

Next i

End Sub 'Fin del Codigo

'***************************************************************

'Para usarlo en cualquier form, en el evento al cargar

'

'Private Sub Form_Load()

'AlPresionarTecla Me

'End Sub

'

'

'JJJT Jefferson Jose Jimenez Tarre (Venezuela)