设为首页收藏本站

SKY外语、计算机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: fieldmax
打印 上一主题 下一主题

VB_识别多按键同时按下

[复制链接]

16

主题

0

好友

216

积分

中级会员

Rank: 3Rank: 3

生肖
性别

最佳新人 论坛元老

跳转到指定楼层
楼主
发表于 2012-4-28 21:32:50 |只看该作者 |倒序浏览
本帖最后由 sky_yx 于 2015-12-30 14:22 编辑

  1. [i]'[/i][i]*****************************************************************
  2. '本函数用于识别多按键同时按下,最多支持同时按下128个按键
  3. '编写时间:2005年6月10日,编写人:田野(Field MAX)
  4. '
  5. '函数用法:KeyClick([KeyDown][KeyUp])
  6. 'KeyDown 按下的KeyPass(可选)
  7. 'KeyUp   抬起的KeyPass(可选)
  8. '
  9. '使用方法:分别在KeyDown和KeyUp事件内使用本函数即可获得案件码。
  10. '          获取案件码时可不输入附加值。
  11. '
  12. '*****************************************************************
  13. Public AllKeyPass(127) As Integer
  14. Public Function KeyClick(Optional ByVal KeyDown As Integer = 0, Optional ByVal KeyUp As Integer = 0) As String
  15. Dim i As Long
  16. Dim NewKeyPass As String
  17.     For i = 0 To 127
  18.         If KeyDown <> 0 And AllKeyPass(i) = KeyDown Then Exit Function
  19.     Next
  20.     For i = 0 To 127
  21.         If AllKeyPass(i) = 0 Then
  22.             AllKeyPass(i) = KeyDown
  23.             Exit For
  24.         End If
  25.     Next
  26.     For i = 0 To 127
  27.         If AllKeyPass(i) = KeyUp Then AllKeyPass(i) = 0
  28.         If AllKeyPass(i) <> 0 Then
  29.             NewKeyPass = NewKeyPass & AllKeyPass(i) & ","
  30.         End If
  31.     Next
  32.     If Len(NewKeyPass) = 0 Then
  33.         KeyClick = "0"
  34.     Else
  35.         KeyClick = Left(NewKeyPass, Len(NewKeyPass) - 1)
  36.     End If
  37. End Function
  38. ----------------------------------------------------------------------
  39. '演示
  40. Private Sub Command1_Click()
  41. Debug.Print KeyClick
  42. End Sub
  43. Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  44.     Debug.Print KeyClick(KeyCode)
  45. End Sub
  46. Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
  47.     Debug.Print KeyClick(, KeyCode)
  48. End Sub
  49. Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  50.     Debug.Print KeyClick(Button)
  51. End Sub
  52. Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  53.     Debug.Print KeyClick(, Button)
  54. End Sub[/i]
复制代码


分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
分享淘帖0 收藏收藏1 评分评分

60

主题

8

好友

1161

积分

金牌会员

Rank: 6Rank: 6

生肖
星座
处女座
性别

最佳新人 活跃会员 灌水之王 论坛元老

沙发
发表于 2012-5-15 14:07:26 |只看该作者
本帖最后由 sky_yx 于 2015-12-30 14:22 编辑

很好很强大  我试试   

你老婆要生了。我要当爹了
回复

使用道具 评分 举报

60

主题

8

好友

1161

积分

金牌会员

Rank: 6Rank: 6

生肖
星座
处女座
性别

最佳新人 活跃会员 灌水之王 论坛元老

板凳
发表于 2012-5-15 14:45:10 |只看该作者
本帖最后由 sky_yx 于 2015-12-30 14:22 编辑

不懂不明白  求解   窗体上建立一个label  怎么控制他的上下左右

你老婆要生了。我要当爹了
回复

使用道具 评分 举报

16

主题

0

好友

216

积分

中级会员

Rank: 3Rank: 3

生肖
性别

最佳新人 论坛元老

地板
发表于 2012-5-15 17:23:01 |只看该作者
本帖最后由 sky_yx 于 2015-12-30 14:22 编辑

把MouseDown事件的X、Y转化为公共变量,在MouseMove事件通过前面的X、Y进行差值运算就可以移动了

回复

使用道具 评分 举报

60

主题

8

好友

1161

积分

金牌会员

Rank: 6Rank: 6

生肖
星座
处女座
性别

最佳新人 活跃会员 灌水之王 论坛元老

5#
发表于 2012-5-16 18:16:36 |只看该作者
本帖最后由 sky_yx 于 2015-12-30 14:22 编辑

田野老师  那个多键按下你这个代码 我实在搞不好    我照你以前说的写的代码识别多键按下的  其他的基本上都好的 就是还有点小小问题   
我在窗体上建了个label  名字叫c1
按下多键时如果首先松开最后按下的那个键c1停止移动  如果先松开前面按的键则正常
如首先按上  再按右     如果先松开右  则停止移动(理想中应该继续向上移动)  如果先松开上则继续向右移动正常。
vb万分迷惑  求解

你老婆要生了。我要当爹了
回复

使用道具 评分 举报

您需要登录后才可以回帖 登录 | 立即注册


手机版|SKY外语计算机学习 ( 粤ICP备12031577 )    

GMT+8, 2024-12-22 00:56 , Processed in 0.144122 second(s), 28 queries .

回顶部