如何让 KeyDown 事件在 Delphi (2007) MDI 应用程序父窗口中工作,即使子窗口具有焦点?
作为更通用的解决方案(对于 F1 以外的应用程序寻求帮助),我使用与此类似的代码来捕获主窗体中的 keydown 事件。无论如何,这都会获取所有密钥,即使 MDI 子项处于活动状态也是如此。在此示例中,我正在做与您尝试做的相反的事情(我希望消息由我的子表单而不是主表单处理),但是在父表单中捕获键的概念是相同的)。
Application.OnMessage := AppMessage;
procedure TMainForm.Appmessage(var Msg: TMsg; var Handled: Boolean);
var
message: TWMKey;
begin
If (msg.message = WM_KEYDOWN) and
( LoWord(msg.wparam) = VK_TAB ) and
(GetKeyState( VK_CONTROL ) < 0 ) and
Assigned( ActiveMDIChild ) then
Begin
Move( msg.message, message.msg, 3*sizeof(Cardinal));
message.result := 0;
Handled := ActiveMDIChild.IsShortcut( message );
End;
end;