-3

我希望我的程序检测是否按下 ESC 键来做某事,但它没有检测到它!即使焦点设置在另一个组件上,我也想在整个运行时检测转义键按下!我试过这段代码

if key=#27 then
 begin
  //do something
 end;

请问有什么建议吗?

4

2 回答 2

4

您正在使用哪个事件处理程序?如果它连接到控件,则当按下某个键且控件具有焦点时将触发该事件。

如果您希望在您的应用程序获得焦点时按下某个键时触发事件,请将TApplicationEvents 组件拖放到表单上并添加一个 OnMessage 事件处理程序,如下所示:

procedure TfrmMain.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  case Msg.message of
    WM_KEYDOWN:
      if Msg.wParam = 27 then
      begin
        // Do something
      end;
  end;
end; 
于 2012-12-30T21:32:32.363 回答
4

为了将我上面写的内容正式化为答案,借用 Delphi 3 的 OnKeyDown 帮助

如果用户按 Esc,以下代码将中止打印作业。请注意,您应该将 KeyPreview 设置为 True 以确保调用 Form1 的 OnKeyDown 事件处理程序。

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  begin
    if (Key=VK_ESCAPE) and Printer.Printing then
      begin
        Printer.Abort;
        MessageDlg('Printing aborted', mtInformation, [mbOK],0);
      end;
  end;
于 2012-12-30T21:42:52.330 回答