2014-09-19 57 views

回答

2

表單檢查是否存在想要處理密鑰的子組件。如果鑰匙被處理,那就是故事的結尾。

這是一個快速的&髒方式,可以防止TMenuItem使用插入器處理密鑰。

type 
    TMenuItem = class(FMX.Menus.TMenuItem) 
    protected 
    procedure DialogKey(var Key: Word; Shift: TShiftState); override; 
    end; 


procedure TMenuItem.DialogKey(var Key: Word; Shift: TShiftState); 
begin 
    if (ssCtrl in Shift) and (Key = 65){A} then exit;  
    inherited; 
end; 

如果你正在使用的行爲,那麼你必須重寫TActionListDialogKey功能以同樣的方式。

+0

當在表單上啓用KeyPreview屬性時,使用窗體OnKeyDown事件攔截此組合鍵是不是也可能? – SilverWarior 2014-09-19 09:59:49

+0

@SilverWarior,你在談論VCL,這個問題是針對Firemonkey框架的。在FMX中沒有KeyPreview,因爲所有的鍵都已被表單捕獲。如果一個子組件處理該鍵,那麼「OnKeyDown」形式永遠不會觸發。 – Peter 2014-09-19 10:16:03

+0

我不知道。我認爲它和VCL一樣。我想我們每天都會學到新的東西。 – SilverWarior 2014-09-19 10:53:14