键盘事件问题

zchnnn_1981 2007-09-19 02:10:08
通过按下键盘上任一个键如F1,就能调用想应的按钮事件,光标可能在窗体上任何能接受焦点的位置.我想写在keydown事件里,但是窗体上这么多控件都有keydown事件,不可能每一个都去写那个事件(当然这个也能实现,我想知道有没有其它的方法实现).
如下
窗体里面有一个事件shomAa(),当点击某个按钮时可以触发,按一下F1也可以触发(光标可能在窗体上其它控件上)
...全文
84 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zchnnn_1981 2007-09-20
  • 打赏
  • 举报
回复
感谢xuexic
我的邮箱zchnnn@sohu.com
最好把dll和调用实例给我,分全部给你
xuexic 2007-09-19
  • 打赏
  • 举报
回复
我这里有那个DLL文件,需要可以联系我,可要给我分数啊,^_^
xuexic 2007-09-19
  • 打赏
  • 举报
回复
直接调用一个现成的DLL文件就可以了,写一个底层钩子程序,截获键盘的按下事件
const
WM_HookKEY = WM_USER + $1000;
HookDLL = 'Project2.dll';

type
THookProcedure = procedure;stdcall;


FileMapHandle : THandle;
PMem : ^Integer;
HandleDLL : THandle;
HookOn,HookOff : THookProcedure;
procedure HookKey(var message:TMessage);message WM_HookKEY;

procedure TMainDrawZc.HookKey(var message : TMessage);
var
KeyName : array[0..100] of char;
Action : string;
i : integer;
begin
GetKeyNameText(Message.LParam,@KeyName,100);
if ((Message.LParam shr 31) and 1) = 1 then
Action := 'Key Up'
else
if ((Message.LParam shr 30) and 1) = 1 then
Action := 'ReKey Down'
else
begin
Action := 'KeyDown';

if (String(KeyName) = 'Delete') or (String(KeyName) = 'Down') or
(String(KeyName) = 'Up') or (String(KeyName) = 'Right') or (String(KeyName) = 'Left') then
begin
喝口水 2007-09-19
  • 打赏
  • 举报
回复
注册热键
registerhotkey即可
budded 2007-09-19
  • 打赏
  • 举报
回复
用TActionList,添加一个Action,设置其快捷键,并在其OnExecute事件中调用shomAa()
zchnnn_1981 2007-09-19
  • 打赏
  • 举报
回复
肯定是不行的,光标如果在一个文本框里面怎么触发form的keydown
zhangA 2007-09-19
  • 打赏
  • 举报
回复
写在form的keydown事件里

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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