zoukankan      html  css  js  c++  java
  • TMainMenu 类 快捷键的记录方式《转》

    我们从 Form 的源码中看到, 指定的快捷键是一个数字, 譬如 Ctrl+A, 对应着数字: 16449
    其实这是一个 Word 类型的数字; 快捷键的参数是 TShortCut 类型的, 它定义在 Classes 单元的第92行(Delphi 2007):
    TShortCut = Low(Word)..High(Word);



    Menus 单元有两个函数: TextToShortCut、ShortCutToText, 可以互相转换它们.


    var
      w: Word;
      s: string;
    begin
      w := TextToShortCut('Ctrl+A');
      ShowMessage(IntToStr(w)); {16449}
    
      s := ShortCutToText(16449);
      ShowMessage(s);           {Ctrl+A}
    end;

    它是根据什么原理用一个数字记下了一个字符串的呢? 我没有深究, 只是根据已知数据猜了一下.
    Word 是双字节, 有一个高字节、一个低字节. 
    高字节用来储存辅助键, 就是 Shift、Ctrl、Alt 和它们的组合; 低字节储存单键对应的键值.
    对组合键的键值, Delphi 规定如下:

    辅助键
    Shift $20
    Ctrl $40
    Shift+Ctrl $60
    Alt $80
    Shift+Alt $A0
    Ctrl+Alt $C0
    Shift+Ctrl+Alt  $E0 


    譬如: 16449, 用十六进制表示是: $4041; 高字节 $40 表示 Ctrl, 低字节 $41 表示字母 A.



    既然如此, 不用它的转换函数, 我们自己也可以转换了:


    var
      w: Word;
      h,l: Byte;
    begin
      w := 16449;
      h := Hi(w); {获取高字节}
      l := Lo(w); {获取低字节}
      ShowMessage(IntToHex(h,2)); {40}
      ShowMessage(IntToHex(l,2)); {41}
    end;

    不过, 我在整理所有可用的快捷键列表时, 碰见了太多重复值(就是一个快捷键对应着好多个数值), 还不知是什么原理.

  • 相关阅读:
    PHP实现---汉字简体繁体转换
    js对象中的回调函数
    常用js正则
    复合sql
    恢复和去掉所有表约束
    小心as"陷阱"(c#)
    由“js跨域”想到"AJAX也不一定要XMLHttpRequest"
    jsonp与跨域
    关于js的string的3个函数slice,substring,substr对比
    英语etc怎么发音、单词来历
  • 原文地址:https://www.cnblogs.com/LceMeaning/p/2853084.html
Copyright © 2011-2022 走看看