procedure TfrmProgress.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = VK_RETURN then
begin
Self.Close;
end;
end;
Run Code Online (Sandbox Code Playgroud)
然后按Enter键,没有任何反应......
我不能告诉你这些信息是什么问题,但我可以告诉你如何解决这个问题.
创建一个事件处理程序并将其附加到Application.OnMessage.每当拉出应用程序消息队列的任何排队消息时,都会调用此方法.键盘消息是输入消息,因此排队,因此WM_KEYDOWN消息将到达此事件处理程序.
像这样实现处理程序:
procedure TMyForm.ApplicationMessage(var Msg: TMsg; var Handled: Boolean);
begin
if Msg.Message=WM_KEYDOWN then
Handled := False;
end;
Run Code Online (Sandbox Code Playgroud)
启用调试DCU,然后在该Handled := False行上设置断点.运行您的应用程序,选择旋转编辑,然后按ENTER键.代码将中断,您现在可以单步执行以查看WM_KEYDOWN消息的路由位置.
事件处理程序返回后,您应该一步一步,直到找到对DispatchMessage的调用.按F7进入此步骤并继续跟踪,直到您可以找到它落在哪里以及为什么它没有落在您想要的事件处理程序中.