我们有一个Delphi XE2应用程序。 Form1
有热键 Ctrl + F 和Form2
,它是活动的,没有热键。用户在Form2
上按 Ctrl + F ,Form1
处理热键。这完全不正确,因为我们看到了非活动表单的活动。我该如何解决?
答案 0 :(得分:6)
我使用动作实现所有快捷键处理。如果您这样做,那么您可以使用操作,操作列表,操作管理器等提供的集中化来根据表单是否处于活动状态来启用和禁用所有操作。
这样做,例如,通过在表单的State
和OnActivate
事件处理程序上设置操作列表的OnDeactivate
属性:
procedure TMyForm.FormActivate(Sender: TObject);
begin
ActionList.State := asNormal;
end;
procedure TMyForm.FormDeactivate(Sender: TObject);
begin
ActionList.State := asSuspended;
end;
答案 1 :(得分:2)
您可以将active form的检查添加到热键处理程序中,即
if(Screen.ActiveForm <> Self)then Exit;
这假设eventhandler是由Form1
实现的(然后是Self
然后在处理程序中)。
答案 2 :(得分:0)
只需覆盖捕获活动的非活动窗口的以下功能:
function IsShortCut(var Message: TWMKey): Boolean; override;
function TMainForm.IsShortCut(var Message: TWMKey): Boolean;
begin
if MainForm.Active then
result := inherited IsShortCut( Message )
else
result := false;
end;