zoukankan      html  css  js  c++  java
  • 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即得到的快捷键 键值
      。。。。//处理代码

  • 相关阅读:
    使用线程池对应用程序产生线程个数与占用CPU时间的影响
    枚举类型解析
    性能监视器的简单使用
    WCF 承载服务
    ManulResetEvent与AutoResetEvent
    获取当前目录的上级目录
    WCF 异步调用
    适配器设计模式
    控制控制台自身的最大化最小化
    代码自动生成技术相关介绍
  • 原文地址:https://www.cnblogs.com/jieke/p/2904747.html
Copyright © 2011-2022 走看看