听键盘输入
listen to Keyboard input
我有一个 vb 6 程序,其中的表单像幻灯片一样打开 我创建了一个文本框来获取键盘输入,例如 esc、左键、右键、向上键或向下键,就像在 MS Powerpoint 中。但是,当向表单添加许多控件时,用户可能会单击其中的任何一个,并且附加到我的文本框控件(我称为 cmdline)的键码将不起作用,除非我向其他控件添加另一个代码以强制将光标聚焦到命令行
Private Sub cmdline_KeyDown(KeyCode As Integer, Shift As Integer)
'Space Key
If KeyCode = 32 Then
cmdPlay_Click
End If
'Page Up Key
If KeyCode = 33 Then
showFirstStanza
End If
'Page Down Key
If KeyCode = 34 Then
showLastStanza
End If
'End Key
If KeyCode = 35 Then
showLastStanza
End If
'Home Key
If KeyCode = 36 Then
showFirstStanza
End If
'Left key
If KeyCode = 37 Then
SavedThis = SaveSettings("projection_font_size", SiteSettings("projection_font_size") - 2)
lblSongText.FontSize = SiteSettings("projection_font_size")
End If
'Up Key
If KeyCode = 38 Then
cmdPrev_Click
End If
'Right Arrow
If KeyCode = 39 Then
SavedThis = SaveSettings("projection_font_size", SiteSettings("projection_font_size") + 2)
lblSongText.FontSize = SiteSettings("projection_font_size")
End If
'Down Arrow
If KeyCode = 40 Then
cmdNext_Click
End If
'Key C
If KeyCode = 67 Then
fonttypez = fonttypez - 1
Select Case fonttypez
Case 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
font_type_tosave
Case Else
fonttypez = 13
font_type_tosave
End Select
font_type_int
lblSongText.FontName = SiteSettings("projection_font_type")
End If
'Key V
If KeyCode = 86 Then
fonttypez = fonttypez + 1
Select Case fonttypez
Case 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
font_type_tosave
Case Else
fonttypez = 13
font_type_tosave
End Select
font_type_int
lblSongText.FontName = SiteSettings("projection_font_type")
End If
'Key X
If KeyCode = 88 Then
kala = kala + 1
Select Case kala
Case 1, 2, 3, 4, 5, 6, 7, 8
SavedThis = SaveSettings("preffered_theme", kala)
Case Else
kala = 1
SavedThis = SaveSettings("preffered_theme", kala)
End Select
SetProjectionTheme
End If
'Key Z
If KeyCode = 90 Then
kala = kala - 1
Select Case kala
Case 1, 2, 3, 4, 5, 6, 7, 8
SavedThis = SaveSettings("preffered_theme", kala)
Case Else
kala = 1
SavedThis = SaveSettings("preffered_theme", kala)
End Select
SetProjectionTheme
End If
'Add Key
If KeyCode = 107 Then
SavedThis = SaveSettings("projection_font_size", SiteSettings("projection_font_size") + 2)
lblSongText.FontSize = SiteSettings("projection_font_size")
End If
'Subtract Key
If KeyCode = 109 Then
SavedThis = SaveSettings("projection_font_size", SiteSettings("projection_font_size") - 2)
lblSongText.FontSize = SiteSettings("projection_font_size")
End If
End Sub
有没有人有代码可以帮助我在没有附加控件的情况下获得键盘输入。
顺便说一句,使用菜单非常酷,因为无论聚焦哪个控件,键盘输入都可以轻松捕获。我不想使用此表单上的菜单,除非它可以隐藏。
实现你想要的:
- 有一个函数需要在顶部声明,如您所愿
在我的代码中看到。
- 然后写一个函数让你的控件按下
键盘。
- 你需要一个循环或类似计时器的东西
用于调用函数的间隔 1000
这是实现您想要的修改后的代码
'declare this function at the top of your form:
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Public Function getControls()
'Space Key
If GetAsyncKeyState(vbKeySpace) <> 0 Then 'code 32
cmdPlay_Click
End If
'Page Up Key
If GetAsyncKeyState(vbKeyPageUp) <> 0 Then 'code 33
showFirstStanza
End If
'Page Down Key
If GetAsyncKeyState(vbKeyPageDown) <> 0 Then 'code 34
showLastStanza
End If
'End Key
If GetAsyncKeyState(vbKeyEnd) <> 0 Then 'code 35
showLastStanza
End If
'Home Key
If GetAsyncKeyState(vbKeyHome) <> 0 Then 'code 36
showFirstStanza
End If
'Left key
If GetAsyncKeyState(vbKeyLeft) <> 0 Then 'code 37
SavedThis = SaveSettings("projection_font_size", SiteSettings("projection_font_size") - 2)
lblSongText.FontSize = SiteSettings("projection_font_size")
End If
'Up Key
If GetAsyncKeyState(vbKeyUp) <> 0 Then 'code 38
cmdPrev_Click
End If
'Right Arrow
If GetAsyncKeyState(vbKeyRight) <> 0 Then 'code 39
SavedThis = SaveSettings("projection_font_size", SiteSettings("projection_font_size") + 2)
lblSongText.FontSize = SiteSettings("projection_font_size")
End If
'Down Arrow
If GetAsyncKeyState(vbKeyDown) <> 0 Then 'code 40
cmdNext_Click
End If
'Key C
If GetAsyncKeyState(vbKeyC) <> 0 Then 'code 67
fonttypez = fonttypez - 1
Select Case fonttypez
Case 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
font_type_tosave
Case Else
fonttypez = 13
font_type_tosave
End Select
font_type_int
lblSongText.FontName = SiteSettings("projection_font_type")
End If
'Key V
If GetAsyncKeyState(vbKeyV) <> 0 Then 'code 87
fonttypez = fonttypez + 1
Select Case fonttypez
Case 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
font_type_tosave
Case Else
fonttypez = 13
font_type_tosave
End Select
font_type_int
lblSongText.FontName = SiteSettings("projection_font_type")
End If
'Key X
If GetAsyncKeyState(vbKeyX) <> 0 Then 'code 88
kala = kala + 1
Select Case kala
Case 1, 2, 3, 4, 5, 6, 7, 8
SavedThis = SaveSettings("preffered_theme", kala)
Case Else
kala = 1
SavedThis = SaveSettings("preffered_theme", kala)
End Select
SetProjectionTheme
End If
'Key Z
If GetAsyncKeyState(vbKeyZ) <> 0 Then 'code 90
kala = kala - 1
Select Case kala
Case 1, 2, 3, 4, 5, 6, 7, 8
SavedThis = SaveSettings("preffered_theme", kala)
Case Else
kala = 1
SavedThis = SaveSettings("preffered_theme", kala)
End Select
SetProjectionTheme
End If
'Add Key
If GetAsyncKeyState(vbKeyAdd) <> 0 Then 'code 107
SavedThis = SaveSettings("projection_font_size", SiteSettings("projection_font_size") + 2)
lblSongText.FontSize = SiteSettings("projection_font_size")
End If
'Subtract Key
If GetAsyncKeyState(vbKeySubtract) <> 0 Then 'code 109
SavedThis = SaveSettings("projection_font_size", SiteSettings("projection_font_size") - 2)
lblSongText.FontSize = SiteSettings("projection_font_size")
End If
'ESCAPE KEY
If GetAsyncKeyState(vbKeyEscape) <> 0 Then
Unload Me
End If
End Function
Private Sub trmListen_Timer()
Call getControls
End Sub
我有一个 vb 6 程序,其中的表单像幻灯片一样打开 我创建了一个文本框来获取键盘输入,例如 esc、左键、右键、向上键或向下键,就像在 MS Powerpoint 中。但是,当向表单添加许多控件时,用户可能会单击其中的任何一个,并且附加到我的文本框控件(我称为 cmdline)的键码将不起作用,除非我向其他控件添加另一个代码以强制将光标聚焦到命令行
Private Sub cmdline_KeyDown(KeyCode As Integer, Shift As Integer)
'Space Key
If KeyCode = 32 Then
cmdPlay_Click
End If
'Page Up Key
If KeyCode = 33 Then
showFirstStanza
End If
'Page Down Key
If KeyCode = 34 Then
showLastStanza
End If
'End Key
If KeyCode = 35 Then
showLastStanza
End If
'Home Key
If KeyCode = 36 Then
showFirstStanza
End If
'Left key
If KeyCode = 37 Then
SavedThis = SaveSettings("projection_font_size", SiteSettings("projection_font_size") - 2)
lblSongText.FontSize = SiteSettings("projection_font_size")
End If
'Up Key
If KeyCode = 38 Then
cmdPrev_Click
End If
'Right Arrow
If KeyCode = 39 Then
SavedThis = SaveSettings("projection_font_size", SiteSettings("projection_font_size") + 2)
lblSongText.FontSize = SiteSettings("projection_font_size")
End If
'Down Arrow
If KeyCode = 40 Then
cmdNext_Click
End If
'Key C
If KeyCode = 67 Then
fonttypez = fonttypez - 1
Select Case fonttypez
Case 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
font_type_tosave
Case Else
fonttypez = 13
font_type_tosave
End Select
font_type_int
lblSongText.FontName = SiteSettings("projection_font_type")
End If
'Key V
If KeyCode = 86 Then
fonttypez = fonttypez + 1
Select Case fonttypez
Case 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
font_type_tosave
Case Else
fonttypez = 13
font_type_tosave
End Select
font_type_int
lblSongText.FontName = SiteSettings("projection_font_type")
End If
'Key X
If KeyCode = 88 Then
kala = kala + 1
Select Case kala
Case 1, 2, 3, 4, 5, 6, 7, 8
SavedThis = SaveSettings("preffered_theme", kala)
Case Else
kala = 1
SavedThis = SaveSettings("preffered_theme", kala)
End Select
SetProjectionTheme
End If
'Key Z
If KeyCode = 90 Then
kala = kala - 1
Select Case kala
Case 1, 2, 3, 4, 5, 6, 7, 8
SavedThis = SaveSettings("preffered_theme", kala)
Case Else
kala = 1
SavedThis = SaveSettings("preffered_theme", kala)
End Select
SetProjectionTheme
End If
'Add Key
If KeyCode = 107 Then
SavedThis = SaveSettings("projection_font_size", SiteSettings("projection_font_size") + 2)
lblSongText.FontSize = SiteSettings("projection_font_size")
End If
'Subtract Key
If KeyCode = 109 Then
SavedThis = SaveSettings("projection_font_size", SiteSettings("projection_font_size") - 2)
lblSongText.FontSize = SiteSettings("projection_font_size")
End If
End Sub
有没有人有代码可以帮助我在没有附加控件的情况下获得键盘输入。
顺便说一句,使用菜单非常酷,因为无论聚焦哪个控件,键盘输入都可以轻松捕获。我不想使用此表单上的菜单,除非它可以隐藏。
实现你想要的:
- 有一个函数需要在顶部声明,如您所愿 在我的代码中看到。
- 然后写一个函数让你的控件按下 键盘。
- 你需要一个循环或类似计时器的东西 用于调用函数的间隔 1000
这是实现您想要的修改后的代码
'declare this function at the top of your form:
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Public Function getControls()
'Space Key
If GetAsyncKeyState(vbKeySpace) <> 0 Then 'code 32
cmdPlay_Click
End If
'Page Up Key
If GetAsyncKeyState(vbKeyPageUp) <> 0 Then 'code 33
showFirstStanza
End If
'Page Down Key
If GetAsyncKeyState(vbKeyPageDown) <> 0 Then 'code 34
showLastStanza
End If
'End Key
If GetAsyncKeyState(vbKeyEnd) <> 0 Then 'code 35
showLastStanza
End If
'Home Key
If GetAsyncKeyState(vbKeyHome) <> 0 Then 'code 36
showFirstStanza
End If
'Left key
If GetAsyncKeyState(vbKeyLeft) <> 0 Then 'code 37
SavedThis = SaveSettings("projection_font_size", SiteSettings("projection_font_size") - 2)
lblSongText.FontSize = SiteSettings("projection_font_size")
End If
'Up Key
If GetAsyncKeyState(vbKeyUp) <> 0 Then 'code 38
cmdPrev_Click
End If
'Right Arrow
If GetAsyncKeyState(vbKeyRight) <> 0 Then 'code 39
SavedThis = SaveSettings("projection_font_size", SiteSettings("projection_font_size") + 2)
lblSongText.FontSize = SiteSettings("projection_font_size")
End If
'Down Arrow
If GetAsyncKeyState(vbKeyDown) <> 0 Then 'code 40
cmdNext_Click
End If
'Key C
If GetAsyncKeyState(vbKeyC) <> 0 Then 'code 67
fonttypez = fonttypez - 1
Select Case fonttypez
Case 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
font_type_tosave
Case Else
fonttypez = 13
font_type_tosave
End Select
font_type_int
lblSongText.FontName = SiteSettings("projection_font_type")
End If
'Key V
If GetAsyncKeyState(vbKeyV) <> 0 Then 'code 87
fonttypez = fonttypez + 1
Select Case fonttypez
Case 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
font_type_tosave
Case Else
fonttypez = 13
font_type_tosave
End Select
font_type_int
lblSongText.FontName = SiteSettings("projection_font_type")
End If
'Key X
If GetAsyncKeyState(vbKeyX) <> 0 Then 'code 88
kala = kala + 1
Select Case kala
Case 1, 2, 3, 4, 5, 6, 7, 8
SavedThis = SaveSettings("preffered_theme", kala)
Case Else
kala = 1
SavedThis = SaveSettings("preffered_theme", kala)
End Select
SetProjectionTheme
End If
'Key Z
If GetAsyncKeyState(vbKeyZ) <> 0 Then 'code 90
kala = kala - 1
Select Case kala
Case 1, 2, 3, 4, 5, 6, 7, 8
SavedThis = SaveSettings("preffered_theme", kala)
Case Else
kala = 1
SavedThis = SaveSettings("preffered_theme", kala)
End Select
SetProjectionTheme
End If
'Add Key
If GetAsyncKeyState(vbKeyAdd) <> 0 Then 'code 107
SavedThis = SaveSettings("projection_font_size", SiteSettings("projection_font_size") + 2)
lblSongText.FontSize = SiteSettings("projection_font_size")
End If
'Subtract Key
If GetAsyncKeyState(vbKeySubtract) <> 0 Then 'code 109
SavedThis = SaveSettings("projection_font_size", SiteSettings("projection_font_size") - 2)
lblSongText.FontSize = SiteSettings("projection_font_size")
End If
'ESCAPE KEY
If GetAsyncKeyState(vbKeyEscape) <> 0 Then
Unload Me
End If
End Function
Private Sub trmListen_Timer()
Call getControls
End Sub