在delphi中如何设置热键来转移焦点,如点击按键A就把焦点移到了edit1编辑框里

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在delphi中如何设置热键来转移焦点,如点击按键A就把焦点移到了edit1编辑框里相关的知识,希望对你有一定的参考价值。

以下是我的示例代码:

1. 设置Form的keypreview设置为true.

2. 响应KeyPress事件

procedure TForm2.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key in [\'a\',\'A\'] then
begin
Edit1.SetFocus;//如果按a或A就将窗口焦点移动到Edit1控件。

end;
end;

提示: 以上代码是比较容易、简单的处理,但也有一些需要注意的地方:

1. 焦点的转移只有在当前的父窗口获取焦点的时候,才会执行成功。

2. 需要注意FormKeyPress会一直响应按键A,所以,假设你正在编辑框中按下字母A,焦点也会转移。由于不知道你具体的意图,所以上面的代码就是按你的要求写的。如果感觉有点不好,则可以进一步修改代码,比如:过滤一下,只响应你需要的,或者将 A 换成其他容易区别开的。

FormKeyPress 通常只响应字符,如果是有特殊键,比如ctrl键,那就换成响应 FormKeyDown、up。
参考技术A 设置热键分两种:程序内部快捷键、全局快捷键
内部快捷键比较简单,最常用的一种方式是使用action,设置其ShortCut属性
全局快捷键相对复杂,需要注册热键,尔后处理Windows消息:
如设置全局F2快捷键
var C_MyKey_ID:Word;
C_MyKey_ID:= GlobalAddAtom('MyHotHotKey');
RegisterHotKey(Handle, C_MyKey_ID, 0, VK_F2);
然后处理Windows消息:
procedure MyHotKey(var msg: TWMHotKey); message WM_HOTKEY;
begin
if msg.HotKey = C_MyKey_ID then
begin
ShowMessage('热键启动');
end;

end;追问

就是最简单的在delphi里设计,就是熟悉控件的使用

参考技术B 支持 windblast的方案。

以上是关于在delphi中如何设置热键来转移焦点,如点击按键A就把焦点移到了edit1编辑框里的主要内容,如果未能解决你的问题,请参考以下文章

使用delphi多线程实现绑定某个EXE的进程并且向它发送键盘鼠标消息的实例。

按键精灵依次点击三个位置,怎么设置?

使用 C# 设置全局热键

使用 C# 设置全局热键

非焦点表单上的 C#/WPF 热键(如 launchy)

自动热键变量未在按键时更新