程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> TMainMenu 類[五] - 快捷鍵的記錄方式

TMainMenu 類[五] - 快捷鍵的記錄方式

編輯:Delphi

 我們從 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; 

  不過, 我在整理所有可用的快捷鍵列表時, 碰見了太多重復值(就是一個快捷鍵對應著好多個數值), 還不知是什麼原理.


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved