我现在写了个查询的代码,已经把查询结果显示到DBGrid中了,但我想用键盘上的方向键在DBGrid中控制一下查询结果,也就是上下移动的时候能将光标选中的记录显示在下面。哪位高手大侠能帮小弟解决一下,谢谢!
求:delphi7有关键盘方向键的问题
答案:1 悬赏:80 手机版
解决时间 2021-08-24 18:43
- 提问者网友:世勋超人
- 2021-08-24 02:33
最佳答案
- 五星知识达人网友:woshuo
- 2021-08-24 02:53
在VB中,有多种方法可以实现键盘模拟,我们就介绍几种比较典型的。 1.局部级模拟 从上面的流程可以看出,键盘事件是最终被送到活动窗口,然后才引起目标程序响应的。那么最直接的模拟方法就是:直接伪造一个键盘消息发给目标程序。哈哈, 这实在是很简单,windows提供了几个这样的API函数可以实现直接向目标程序发送消息的功能,常用的有SendMessage和 PostMessage,它们的区别是PostMessage函数直接把消息仍给目标程序就不管了,而SendMessage把消息发出去后,还要等待目 标程序返回些什么东西才好。这里要注意的是,模拟键盘消息一定要用PostMessage函数才好,用SendMessage是不正确的(因为模拟键盘消 息是不需要返回值的,不然目标程序会没反应),切记切记!PostMessage函数的VB声明如下:Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long参数hwnd 是你要发送消息的目标程序上某个控件的句柄,参数wMsg 是消息的类型,表示你要发送什么样的消息,最后wParam 和lParam 这两个参数是随消息附加的数据,具体内容要由消息决定。再来看看wMsg 这个参数,要模拟按键就靠这个了。键盘消息常用的有如下几个:WM_KEYDOWN 表示一个普通键被按下WM_KEYUP 表示一个普通键被释放WM_SYSKEYDOWN 表示一个系统键被按下,比如Alt键WM_SYSKEYUP 表示一个系统键被释放,比如Alt键如 果你确定要发送以上几个键盘消息,那么再来看看如何确定键盘消息中的wParam 和lParam 这两个参数。在一个键盘消息中,wParam 参数的 含义较简单,它表示你要发送的键盘事件的按键虚拟码,比如你要对目标程序模拟按下A键,那么wParam 参数的值就设为VK_A ,至于lParam 这个参数就比较复杂了,因为它包含了多个信息,一般可以把它设为0,但是如果你想要你的模拟更真实一些,那么建议你还是设置一下这个参数。那么我们就详细 了解一下lParam 吧。lParam 是一个long类型的参数,它在内存中占4个字节,写成二进制就是 00000000 00000000 00000000 00000000 一共是32位,我们从右向左数,假设最右边那位为第0位(注意是从0而不是 从1开始计数),最左边的就是第31位,那么该参数的的0-15位表示键的发送次数等扩展信息,16-23位为按键的扫描码,24-31位表示是按下键还 是释放键。大家一般习惯写成16进制的,那么就应该是&H00 00 00 00 ,第0-15位一般为&H0001,如果是按下键,那 么24-31位为&H00,释放键则为&HC0,那么16-23位的扫描码怎么会得呢?这需要用到一个API函数 MapVirtualKey,这个函数可以将虚拟码转换为扫描码,或将扫描码转换为虚拟码,还可以把虚拟码转换为对应字符的ASCII码。它的VB声明如 下:Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long参 数wCode 表示待转换的码,参数wMapType 表示从什么转换为什么,如果是虚拟码转扫描码,则wMapType 设置为0,如果是虚拟扫描码转 虚拟码,则wMapType 设置为1,如果是虚拟码转ASCII码,则wMapType 设置为2.相信有了这些,我们就可以构造键盘事件的 lParam参数了。下面给出一个构造lParam参数的函数:Declare Function MapVirtualKey Lib "user32" Ali
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯