THotKey控件 delphi

本文介绍了在Delphi中如何使用THotKey控件设置自定义快捷键,并探讨了保存和恢复快捷键值的方法。针对不同类型的键盘输入(如标准键盘与数字键盘)导致的问题,提出了直接保存HotKey属性值的解决方案。此外,还提供了在单文档界面或多文档界面程序中响应快捷键的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Delphi中有一个控件THotKey,可以用来设置自定义的快捷键。


一般情况可以 ShortCutToText,以文件的形式将设置的快捷键保存下来,还可以用TextToShortCut,将保存成文本的键值灰复。


这种方式虽然很直观,但是存在一些问题,大键盘的“Ctrl+1” 与 数字键盘的“Ctrl+1”,在THotKey控件显示是不同的,前者会显示 “Ctrl + 1” ,而后者会显示 “Ctrl + Num 1”,但是用 ShortCutToText 输出均显示“Ctrl + 1”,如果是这样那么用TextToShortCut恢复键值就会出错。


对于这个问题,网上有人建议在保存键值的同时,将THotKey的Modifiers属值也保存下来,这也是一种办法。


实际还可以用另外方法来处理,首先,我们设置的快捷键是保存在Hotkey属性中的,它是TShortCut类形,实际上是word类形的。那么可以直接用IntToStr()来保存HotKey中的值。恢复时直接用:
HotKey1.HotKey:=StrToInt();


在FormKeyDown中响应快捷键


if ShortCut( Key , Shift) = HotKey1.HotKey then
begin
  //处理代码
end;


对于单文档界面程序以上方法足可以应付了。但是对于多文档界面,不适用,当主窗体失去焦点后,就不会再响应快捷键了。对于多文档界面的程序可以用以下方来处理。


在FormCreate中


Application.OnShortCut :=MyShortCut;


MyShortCut的处理过程:


procedure TForm1.MyShortCut(var msg: TWMKey; var Handled: boolean);
var
  aKey: TShortCut;
  aShift : TShiftState;
begin
  aShift:=KeyDataToShiftState(Msg.KeyData);
  aKey:=ShortCut(Msg.CharCode, aShift);
  //这里的akey即得到的快捷键 键值
  。。。。//处理代码

转载于:https://www.cnblogs.com/jieke/archive/2013/02/06/2904747.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值