我希望我的程序检测是否按下了ESC键来执行某些操作,但它没有检测到它! 即使在另一个组件上设置了焦点,我也希望在整个运行时间内检测到退出键! 我试过这段代码
if key=#27 then
begin
//do something
end;
有什么建议吗?
答案 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;