我們從 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 規定如下:
譬如: 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;
不過, 我在整理所有可用的快捷鍵列表時, 碰見了太多重復值(就是一個快捷鍵對應著好多個數值), 還不知是什麼原理.