字符串 转换成 键值!!!比如把 'F1’ 这个字符串转换成键值!
能用什么函数可以直接转换的吗?我又不想弄一个键值数组来查找!

解决方案 »

  1.   

    Uses
      Menus;TextToShortCut
    ShortCutToKey
      

  2.   


    procedure TForm1.Button1Click(Sender: TObject);
    var
      T: TShiftState;
    begin
      Id := GlobalAddAtom('F1') - $C000;
      ShortCutToKey(HotKey1.HotKey, Key, T);
      Shift := ShiftStateToWord(T);
      RegisterHotKey(Handle, Id, Shift, Key);
    end;
      

  3.   

    var
      w: Word;
      s: string;
    begin
      w := TextToShortCut('Ctrl+A');
      ShowMessage(IntToStr(w)); {16449}  s := ShortCutToText(16449);
      ShowMessage(s);           {Ctrl+A}
    end;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;
    16449, 用十六进制表示是: $4041; 高字节 $40 表示 Ctrl, 低字节 $41 表示字母 A.
      

  4.   

    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;
      

  5.   

    转帖自:http://www.cnblogs.com/del/archive/2008/02/04/1064631.htmlTMainMenu 类[四] - 所有可选的快捷键列表 
    键值 快捷键 
    3 Scroll Lock 
    8 BkSp 
    9 Tab 
    12 Num 5 
    13 Enter 
    16 Shift 
    17 Ctrl 
    18 Alt 
    20 Caps Lock 
    27 Esc 
    32 Space 
    33 PgUp 
    34 PgDn 
    35 End 
    36 Home 
    37 Left 
    38 Up 
    39 Right 
    40 Down 
    44 Sys Req 
    45 Ins 
    46 Del 
    48 0 
    49 1 
    50 2 
    51 3 
    52 4 
    53 5 
    54 6 
    55 7 
    56 8 
    57 9 
    65 A 
    66 B 
    67 C 
    68 D 
    69 E 
    70 F 
    ......
    ......
    ......