2012-10-30 54 views
4

我剛剛使用了Delphi的TAction的SecondaryShortCuts-Feature。但快捷鍵由字符串定義,如「F5」或「Shift + F5」。現在的問題:在我的德語Windows上,動作不會觸發,因爲「Shift」鍵在德語中被稱爲「Umsch」! 這是否意味着SecondaryShortCuts-屬性在設計時完全沒用,因爲沒有人可以創建可以在國際上使用的應用程序?TAction.SecondaryShortCuts是語言特定的。如何正確設置?

我可以在運行時通過將VK_SHIFT轉換爲正確的名稱來設置密鑰。我通過GetKeyNameText嘗試過,但這沒有奏效,因爲它提供了「Umschalt」而不是「Umsch」的長格式。有人知道獲取密鑰名稱的短版本的功能嗎?

回答

5

你可以試試這個:從一個快捷方式生成快捷方式文本:

var 
    s: TShortCut; 
begin 
    s := ShortCut(Ord('A'), [ssShift]); 
    Action1.SecondaryShortCuts.Add(ShortCutToText(s)); 

順便說一句,這些值由以下常數來確定。你有翻譯過嗎?如果是這樣,你需要嗎?:

SmkcShift = 'Shift+'; 
SmkcCtrl = 'Ctrl+'; 
SmkcAlt = 'Alt+'; 
+1

PS:我知道,Shift + A也許不是最好的捷徑,如果你還需要能夠輸入文字。 ;-) – GolezTrol

+1

謝謝你暗示我在這個方向。我現在看到它沒有Windows問題,但純粹的VCL。常量(SmkcShift等)是資源字符串,如果使用德語Delphi,它們會被預翻譯。使用SecondaryShortCuts是非常危險的,因爲它取決於使用的delphi版本的語言,以及是否在運行時轉換資源字符串。 –

+0

事實上,如果你從代碼中設置了SecondaryShortcuts,你應該是安全的,因爲它使用當前加載的常量值將TShiftState轉換爲字符串表示形式。不過,我同意他們選擇將這些值存儲爲可翻譯的字符串是很奇怪的。 – GolezTrol