我的程序Delphi没有检测到转义键

时间:2012-12-30 21:22:33

标签: delphi keypress

我希望我的程序检测是否按下了ESC键来执行某些操作,但它没有检测到它! 即使在另一个组件上设置了焦点,我也希望在整个运行时间内检测到退出键! 我试过这段代码

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

有什么建议吗?

2 个答案:

答案 0 :(得分: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; 

答案 1 :(得分:4)

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

如果用户按下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;