Roßerto
|
SAO PAULO SP - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 12/11/2007 11:02 hs
Pessoal, como disse o nosso amigo Donkey, o codigo do João só funciona se vc não tiver nenhum controle no form, caso contrario não funciona. mesmo com a propriedade KEYPREVIEW como TRUE. Donkey, vc só vai conseguir capturar o TAB via API. um exemplo: 'By default, VB uses the Tab key to move focus between controls. 'To capture the tab key you will need to use 'windows API GetAsyncKeyState
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vVirtKey As Long) As Integer
Private Function KeyPressed(iKey As Integer) As Boolean If GetAsyncKeyState(iKey) < 0 Then KeyPressed = True Else KeyPressed = False End If End Function
Private Sub txtTab_LostFocus() If KeyPressed(vbKeyTab) = True Then MsgBox "TAB Key Pressed" End If End Sub
Espero que te dê alguma luz para o que vc procura. Abraços Roberto
|
|
|
|
Roßerto
|
SAO PAULO SP - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 12/11/2007 11:07 hs
Um outro exemplo: Public Sub HookKB() If m_hKbHook = 0& Then 'not already hooked m_hKbHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, 0&, App.ThreadID) End If End Sub
Public Sub UnHookKB() If m_hKbHook <> 0& Then 'not already unhooked UnhookWindowsHookEx m_hKbHook m_hKbHook = 0& End If End Sub
Private Function KeyboardProc(ByVal Code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long On Error Resume Next If Code < HC_ACTION Then KeyboardProc = CallNextHookEx(m_hKbHook, Code, wParam, ByVal lParam) Else If wParam = vbKeyTab Then KeyboardProc = 1& 'eat it If (lParam And &H80000000) Then Screen.ActiveForm.Form_KeyUp vbKeyTab, 0 Else Screen.ActiveForm.Form_KeyDown vbKeyTab, 0 End If End If End If End Function
'=== end bas module ===
'=== form module === Public Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyTab Then '...do whatever... Debug.Print "KeyDown - Tab" End If End Sub
Public Sub Form_KeyUp(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyTab Then '...do whatever... Debug.Print "KeyUp - Tab" End If End Sub
Private Sub Form_Load() HookKB Me.Show End Sub
Private Sub Form_Unload(Cancel As Integer) UnHookKB End Sub
outro exemplo super interessante Roberto
|
TÓPICO EDITADO
|
|
|
|
Ivo
|
GUARULHOS SP - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 12/11/2007 11:11 hs
Pode crer Roberto testei aqui e não funcionou mesmo só usando API mesmo valeu cara abraços
|
|
|
Donkey
|
PRESIDENTE PRUDENTE SP - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 12/11/2007 11:22 hs
Valeu Roberto. Obrigado pela ajuda.
|
|
|
DeeJay
não registrado
|
|
ENUNCIADA !
|
|
|
Postada em 14/11/2007 09:28 hs
faz o seguinte:
cria a function (public) em um modulo
Public Sub Manipula_teclas( ) If KeyCode = vbKeyTab Then MsgBox " Pressionado o TAB ! ", vbInformation End If End Sub e no Evento keyDown de cada controle do seu form coloca o Manipula_teclas Ex: Private Sub NOMEDOCONTROLE_KeyDown(KeyCode As Integer, Shift As Integer) Manipula_teclas End Sub
Abraços....
|
|
|
Donkey
|
PRESIDENTE PRUDENTE SP - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 14/11/2007 09:38 hs
Deejay... acho que vc não leu o tópico ou não testou o seu código. Com certeza não testou, pq no código que vc passou simplesmente vc não passa nenhum argumento na função, então não tem como saber que tecla foi pressionada, mesmo que seu código resolvesse meu problema ele não funcionaria. O Roberto já solucionou meu problema. Obrigado pela intenção.
|
|
|