Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Activar la tecla NumLock

82 views
Skip to first unread message

Orlando Leal

unread,
Sep 2, 2003, 3:54:34 PM9/2/03
to

Cuando escribo en un campo de texto la tecla NumLock se me desactiva como
hago para que quede activada, en el evento key press. Y como le desactivo
el pitido cuando le doy enter en cada campo de texto.

Gracias


Softjaen

unread,
Sep 2, 2003, 5:30:16 PM9/2/03
to

"Orlando Leal" escribió:

>
> Cuando escribo en un campo de texto la tecla NumLock se me
> desactiva como hago para que quede activada.
>

Hola, Orlando:

Eso es muy raro.

Te dejo un «tip» que tenía a mano para activar/desactivar la tecla del
bloque numérico. Adáptalo a tus necesidades.

El siguiente procedimiento activará/desactivará la tecla del bloque
numérico.
Si deseas comprobar el estado de dicha tecla, debes de llamar previamente a
la función API «GetKeyState», y si ésta devuelve cero (0), significa que la
tecla no está activada, por lo que si deseas activarla, entonces deberás de
utilizar el procedimiento «keybd_event».

Option Explicit

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 GetKeyState Lib "user32" _
(ByVal nVirtKey As Long) As Integer

'
' El procedimiento activará la tecla del bloque numérico
' si no está activada
'
Public Sub ActivateNumLock()

Const KEYEVENTF_EXTENDEDKEY = &H1
Const KEYEVENTF_KEYUP = &H2
Const VK_NUMLOCK = &H90
Dim iNumLock As Integer

' Comprobamos el estado de la tecla virtual perteneciente
' al bloque numérico
iNumLock = GetKeyState(VK_NUMLOCK)

' Si la función devuelve 1, significa que la tecla está
' encendida, por tanto, si devuelve 0, activamos la tecla.
If iNumLock = 0 Then
keybd_event VK_NUMLOCK, vbKeyNumlock, KEYEVENTF_EXTENDEDKEY _
Or 0, 0
keybd_event VK_NUMLOCK, vbKeyNumlock, KEYEVENTF_EXTENDEDKEY _
Or KEYEVENTF_KEYUP, 0
End If

End Sub

Private Sub Command1_Click()
ActivateNumLock
End Sub

> Y como le desactivo el pitido cuando le doy enter en cada
> campo de texto.
>

En el evento «KeyPress» del control de texto, intercepta la tecla «enter», y
estableces a cero el valor del parámetro «KeyAscii»:

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
KeyAscii = 0
End If
End Sub

Un saludo.

--
Enrique Martínez
[MS MVP - VB]


Diego2k

unread,
Sep 2, 2003, 11:54:20 PM9/2/03
to
A mi me ha pasado muchas veces .. por eso hice esta funcion el problema es
que necesita del control sysinfo porque segun el sistema operativo son
diferente los eventos

Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As
Long ' TRAE EL ESTADO DE UNA TECLA
Public Declare Function SetKeyboardState Lib "user32" (kbArray As
KeyboardBytes) As Long ' ESTABLECE EL ESTADO DE LAS TECLAS

Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan
As Byte, ByVal dwflags As Long, ByVal dwExtraInfo As Long)

'***************************************************************************
******************
'* PRENDE EL NUM LOCK
'***************************************************************************
******************
Public Sub PrendeElNumLock()
If GetKeyState(VK_NUMLOCK) = 0 Then
Select Case frmMain.SysInfo1.OSPlatform
Case 1 'WIN 9X
kbArray.kbByte(VK_NUMLOCK) = 1
SetKeyboardState kbArray
Case 2 'WIN NT
keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or
KEYEVENTF_KEYUP, 0
End Select
End If
End Sub

"Orlando Leal" <orlan...@hotmail.com> escribió en el mensaje
news:uTQtkvYc...@TK2MSFTNGP11.phx.gbl...

0 new messages