delphi - 在键盘上的按键上执行按钮单击
问题描述
当我按下键盘上的一个键时,我想在我的应用程序中单击按钮。它可能通过使用 If 函数来完成。我不确定哪个变量等于按键监控。
解决方案
使用操作列表
您可能会发现以下示例很有启发性:
创建一个新的 VCL 应用程序。
在表格上放一个
TActionList
。双击
TActionList
并创建一个新动作。将其设置Name
为aGreet
,将其设置ShortCut
为F1
,并将其Caption
设置为Greet!
。双击列表框中的操作以创建其
OnExecute
处理程序。将以下代码添加到处理程序:
ShowMessage('Welcome!')
返回到可视表单编辑器并
TButton
在表单上放置一个。将其
Action
属性设置为aGreet
。运行应用程序。
现在,如您所见,按 F1 与单击按钮的效果相同。
欢迎来到精彩的行动清单世界!
仅使用加速器
上面的例子假设你想为你的按钮使用一个热键。但您也应该注意加速键。
几十年来,在 Microsoft Windows 中,标准是除OK和Cancel之外的所有按钮都有加速键。例如,按钮的标题可能是&Save
,这意味着带有S
下划线并且按下Alt+S
将“单击”按钮。
如果这就是你所需要的,你就不需要使用动作(尽管动作有很多其他的原因),你也不需要写一行代码。只需在按钮的标题中添加一个 & 字符!
在精心设计的 Win32 GUI 中,除了默认 ( OK ) 和取消 ( Cancel ) 按钮之外的所有按钮都应该有这样的访问键。像我这样的键盘用户在需要按 27 次制表键或使用计算机的指点设备时会非常恼火。
其他方法
当然,您也可以为您的表单创建一个OnKeyDown
或OnKeyPress
事件处理程序,查看键是VK_F1
(例如)还是S
被Ctrl
按下(另一个示例),如果是,则调用与按钮调用相同的代码。但这可能是一种不太理想的方法,如果表单具有窗口子控件(提示:查看KeyPreview
属性),它会稍微复杂一些。
只是一些例子:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key of
VK_F1: // F1
ShowMessage('You want help?');
VK_F2: // F2
ShowMessage('You want to rename something?');
end;
if (Key = Ord('S')) and (ssCtrl in Shift) then // Ctrl + S
ShowMessage('Time to save?');
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
case Key of
^A: // Ctrl + A
ShowMessage('Select all!');
'p': // P
ShowMessage('A pause, perhaps?');
end;
end;
推荐阅读
- java - Spring JPA 总是缓存数据
- amazon-s3 - 当 VPC 使用直接连接时,我究竟如何允许本地客户端应用程序访问 S3 对象?
- c# - 如何使用嵌入discord.net webhook c#发送文件附件
- javascript - 尝试创建一个交互式搜索栏,当您单击它时会打开和关闭,但我找到的开源代码有问题
- python - 使用 OpenCV 转换颜色空间时增加了色带
- vue.js - 如何防止多个电子邮件字段只接受一个建议?
- java - 使用 apache camel 处理多个文件
- makefile - GNU make 不匹配最短的词干
- git - GitHub webhook 有效负载中没有“ref”标签
- javascript - node.js child_process.spawn() 标准输出问题