Pregunta: | 6082 - TECLA INTRO DEL TECLADO NUMERICO |
Autor: | Francisco Javier Ruiz Pernia |
Estoy tratando de saber si se puede hacer que el visual basic distinga entre la tecla INTRO del teclado numérico y la tecla INTRO del teclado normal. Ambas me dan el código de tecla 13 cuando hago una llamada al evento Keypress y KeyDown, ¿Alguien sabe como se puede hacer? |
Respuesta: | Jose A. Hernández |
Hola Francisco. Aquí va la respuesta a tu pregunta. Cuando usas la constante vbKeySeparator para evaluar las pulsaciones de teclas en los eventos KeyUp, KeyDown o KeyPress y distinguir el Enter del teclado alfabético y el Intro del numérico las comparaciones siempre devuelven falso debido a un bug (del VB 4, 5 y 6 !!). Para resolverlo : Declaramos en el formulario : Private Declare Function PeekMessage Lib "user32" Alias _ "PeekMessageA" (lpMsg As MSG, ByVal hwnd As Long, _ ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, _ ByVal wRemoveMsg As Long) As Long Private Type POINTAPI x As Long y As Long End Type Private Type MSG hwnd As Long message As Long wParam As Long lParam As Long time As Long pt As POINTAPI End Type Const PM_NOREMOVE = &H0 Const WM_KEYDOWN = &H100 Const WM_KEYUP = &H101 Const VK_RETURN = &HD Y en el evento : Dim MyMsg As MSG, RetVal As Long ' se le pasa: ' estructura MSG para recibir la información del mensaje ' handle de la ventana ' filtros superior e inferior a 0 para recibir todos los mensajes ' PM_NOREMOVE para dejar las pulsaciones en la cola de mensajes ' usa PM_REMOVE (1) para eliminarlas RetVal = PeekMessage(MyMsg, Me.hwnd, 0, 0, PM_NOREMOVE) ' ahora comparamos el MSG.wParam con VK_RETURN ' si la pulsación fue esta, miramos el bit 24 del lparam. Si está ON se usó el ' teclado numérico, si no el alfabético. If RetVal <> 0 Then If MyMsg.wParam = VK_RETURN Then If MyMsg.lParam And &H1000000 Then MsgBox "Enter del teclado numérico" Else MsgBox "Enter del teclado alfabético" End If End If Else MsgBox "No había mensajes en la cola o a habido problemas con PeekMessage" End If Espero que te sirva. No suelo tener mucho tiempo para esto de la informática, pero si tienes algún problema, dímelo y veremos si se puede hacer algo. Un saludo |
Respuesta: | Hugo Montes |
Aunque so'lo programo en Qbasic y para uso personal, intente' hacer lo mismo a trave's del MS2 utilizando el Ansi.sys cargado en el Config.sys..... no me resulto' pero tbn. reconozco que no segui' ninguna bu'squeda detallada utilizando los mandos Switches, Keyb, modificadores /x /k, combinaciones, etc..... asi' que so'lo quiero mencionarte dos detalles: 1ro.- Pienso en que el Vbasic no esta' demasiado lejos de co'digos y t'ecnicas ba'sicas del MS2 y los anteriores Basic's para MS2 que muchos DESPRECIAN olvida'ndose que en todo el mundo la mayori'a comenzo' con esos compiladores [aunque el Vbasic tiene alcances mayores, es verdad]..... 2do.- A trave's del MS2 y usando el Ansi.sys la u'nica diferencia que encontre' entre las dos teclas Intro fue que usa'ndolas en combinacio'n con las teclas Alt [las alternas] SI' producen dos co'digos nume'ricos distintos..... Porque' no utilizarlas que al fin y al cabo he visto que todo programador siempre coloca las combinaciones de teclas ma's REBUSCADAS que puede encontrar?..... Crees que notari'an la diferencia?..... Hugo Montes., |
Respuesta: | Alf Carmona |
no se puede diferenciar, puesto que es la misma tecla, solamante es cuestion de distribucion del teclado. |