2014-05-09 39 views
1

我有一個vclfix project使Delphi應用程序更多的Windows原生外觀和感覺。我的一個修復方法是更改​​菜單項的特定快捷方式文本。德爾福:如何檢測鍵名w/wo Shift鍵保持

具體而言,如果我將Ctrl++分配給菜單項「放大」,修復將會將快捷文本更改爲Ctrl +

function ShortCutToTextOverride(ShortCut: TShortCut): string; 
(** 
* This function replaces the following shortcuts 
* "Ctrl++" -> "Ctrl +" | "Ctrl+-" -> "Ctrl -" 
* "Shift++" -> "Shift +" | "Shift+-" -> "Shift -" 
*  "Alt++" -> "Alt +" | "Alt+-" -> "Alt -" 
*) 
begin 
    Result := OrigShortCutToText(ShortCut); 

    case LoByte(Word(ShortCut)) of 
    VK_OEM_PLUS, VK_ADD: 
     Result := ReplaceStr(Result, '++', ' +'); 

    VK_OEM_MINUS, VK_SUBTRACT: 
     Result := ReplaceStr(Result, '+-', ' -'); 
    end; 
end; 

現在我面臨的一個問題:當我給你Ctrl++到菜單項,它看起來很棒。但不知何故,該快捷方式可能會自動更改爲Ctrl+=。也許一些德爾福的內部例程做到這一點,因爲=+在英文鍵盤佈局中共享相同的密鑰。

這裏的問題是如何知道的+相反的鍵名,無論是鍵盤佈局?

+0

我很感興趣 - 什麼做一些VCL控件不符合Windows的感覺?其中絕大多數*都是原生Windows控件。 –

+1

@DavidM令我困擾的主要區別是Delphi應用程序以自己的風格呈現工具提示。雖然它非常接近本地,但它們是不同的。這是我的博客http://stanleyxu2005.blogspot.com/2008/01/native-hint-window-class.html。此外,圖像的菜單項也看起來不同。我沒有時間以適當的方式修補它。 – stanleyxu2005

回答

0

它鏈接到CTRL + 轉變 +「+」

快捷方式只是鏈接到美國標準鍵盤上的按鍵未偏移。

很明顯,如果你想用一個專用的'='鍵在keuboard上捕捉ctrl +'=',那麼你必須讓mainform捕捉所有關鍵幀。

使用TForm.KeyPreview:=真

然後的OnKeyPress一個處理程序添加到表單。

+0

謝謝。我希望在項目的一開始就包含我的vclfix單元,而不是一些具體的形式實現。 – stanleyxu2005

0

這裏僅僅是頭腦清醒的例子:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; 
    Shift: TShiftState); 
begin 
    if (ssCtrl in Shift) then 
    case Key of 
     107: ShowMessage('Ctrl +'); 
     109: ShowMessage('Ctrl -'); 
    end; 

    if (ssAlt in Shift) then 
    case Key of 
     107: ShowMessage('Alt +'); 
     109: ShowMessage('Alt -'); 
    end; 

    if (ssShift in Shift) then 
    case Key of 
     107: ShowMessage('Shift +'); 
     109: ShowMessage('Shift -'); 
    end; 
end; 

Remeber設置財產的KeyPreview在表單中。

+0

謝謝。我希望在項目的一開始就包含我的vclfix單元,而不是一些具體的形式實現。 – stanleyxu2005