1
在Firemonkey窗體上添加主菜單和單個子菜單項。將子菜單的快捷方式屬性設置爲Ctrl-A。如何攔截Firemonkey中的菜單快捷事件
無論如何在Ctrl-A進入菜單之前攔截Ctrl-A?看起來OnKeyDown形式沒有看到它。
在Firemonkey窗體上添加主菜單和單個子菜單項。將子菜單的快捷方式屬性設置爲Ctrl-A。如何攔截Firemonkey中的菜單快捷事件
無論如何在Ctrl-A進入菜單之前攔截Ctrl-A?看起來OnKeyDown形式沒有看到它。
表單檢查是否存在想要處理密鑰的子組件。如果鑰匙被處理,那就是故事的結尾。
這是一個快速的&髒方式,可以防止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;
如果你正在使用的行爲,那麼你必須重寫TActionList
的DialogKey
功能以同樣的方式。
當在表單上啓用KeyPreview屬性時,使用窗體OnKeyDown事件攔截此組合鍵是不是也可能? – SilverWarior 2014-09-19 09:59:49
@SilverWarior,你在談論VCL,這個問題是針對Firemonkey框架的。在FMX中沒有KeyPreview,因爲所有的鍵都已被表單捕獲。如果一個子組件處理該鍵,那麼「OnKeyDown」形式永遠不會觸發。 – Peter 2014-09-19 10:16:03
我不知道。我認爲它和VCL一樣。我想我們每天都會學到新的東西。 – SilverWarior 2014-09-19 10:53:14