procedure TMainForm.KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (GetKeyState(Ord('Q'))<0) and (GetKeyState(Ord('W'))<0) and (GetKeyState(Ord('E'))<0)
then ShowMessage('You pressed it');
end;
仅当焦点设置为主窗体时,上述事件才有效。如果我运行应用程序并按住 Tab 并将焦点更改为表单上的任何控件,它将禁用此事件,直到我们再次将焦点更改为主窗体?
问题是即使焦点不在主窗体中,我如何检测三个键被按下?
我还想如果我使用 RegisterHotKey,但在应用程序运行时注册 Q,W 和 E 不是好主意。
procedure TMainForm.WMHotKey(var Msg: TWMHotKey);
begin
if ActiveCaption = 'my Form Caption' then
Begin
if Msg.HotKey = HotKey1 then
begin
//DoSomething;
end
else
if Msg.HotKey = HotKey2 then
begin
//DoSomething;
end;
End
else
//DoSomething;
end;
表单KeyPreview
设置为 true。
如果
KeyPreview
为 true,则键盘事件在窗体上发生之前 发生在活动控件上。(活动控件由 属性。如果
KeyPreview
为 false,则键盘事件仅在活动 控制。导航键(制表符、后退键、箭头键等(为 不受
KeyPreview
的影响,因为它们不会生成键盘 事件。同样,当按钮具有焦点或其默认值时 属性为 true,Enter 键不受KeyPreview
的影响,因为 它不会生成键盘事件。默认情况下,
KeyPreview
为假。