THotKey控件 delphi

在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/p/2904747.html