如何屏蔽TAB键

duanchunguo 2001-12-13 07:30:09
如何屏蔽TAB键
...全文
83 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
coldljy 2001-12-13
  • 打赏
  • 举报
回复
把TAB注册为热键(用API),不写其处理过程

Load
Call RegisterHotKey(Me.hwnd, 200, 0, 9)

UnLoad
Call UnregisterHotKey(Me.hwnd, 9)
MyLf 2001-12-13
  • 打赏
  • 举报
回复
有必要用Api嗎?將控件的TabStop設為Fals不可以嗎?
enmity 2001-12-13
  • 打赏
  • 举报
回复
如果你仅仅是要在你的程序里面实现这个功能的话:

由于Tab键的特殊性,本人尝试使用Keyboard Hook,效果可以,不过,仅作参考,如果要应用在多个TextBox甚至窗体,请自行修改。

建议:容易崩溃,请小心使用。


假定窗体为form1

窗体form1中有名为text1的TextBox;其代码如下:

Option Explicit

Private Sub Form_Load()
iTabCount = 4
EnableKBDHook
End Sub

Private Sub Form_Unload(Cancel As Integer)
UnHookKBD
End Sub

Private Sub Text1_GotFocus()
hwndTextBox = Text1.hWnd
End Sub

Private Sub Text1_LostFocus()
hwndTextBox = 0
End Sub


有一模块,代码如下:
Option Explicit

Declare Function SetWindowsHookEx Lib "user32" Alias _
"SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, _
ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _
ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long

Public hnexthookproc As Long
Public Const HC_ACTION = 0
Public Const WH_KEYBOARD = 2

Public hwndTextBox As Long

Public iTabCount As Integer



Public Sub UnHookKBD()
If hnexthookproc <> 0 Then
UnhookWindowsHookEx hnexthookproc
hnexthookproc = 0
End If
End Sub
Public Function EnableKBDHook()
If hnexthookproc <> 0 Then
Exit Function
End If
hnexthookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf _
MyKBHFunc, App.hInstance, 0)
If hnexthookproc <> 0 Then
EnableKBDHook = hnexthookproc
End If
End Function
Public Function MyKBHFunc(ByVal iCode As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
'这三个叁数是固定的,不能动,而MyKBHFunc这个名称只要和
'SetWindowsHookex()中 AddressOf後的名称一样便可,不一定叫什麽
MyKBHFunc = 0
If iCode < 0 Then
MyKBHFunc = CallNextHookEx(hnexthookproc, iCode, wParam, lParam)
Exit Function
End If
If wParam = vbKeyTab Then '侦测 有没有按到PrintScreen键
If hwndTextBox = Form1.Text1.hWnd Then
MyKBHFunc = 1
'Debug.Print "haha"
'form1.Text1
Form1.Text1.SelStart = IIf(Form1.Text1.SelStart + iTabCount < VBA.Len(Form1.Text1.Text), Form1.Text1.SelStart + iTabCount, VBA.Len(Form1.Text1.Text))
End If
End If
End Function


7,786

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧