我希望我的程序检测是否按下 ESC 键来做某事,但它没有检测到它!即使焦点设置在另一个组件上,我也想在整个运行时检测转义键按下!我试过这段代码
if key=#27 then
begin
//do something
end;
请问有什么建议吗?
您正在使用哪个事件处理程序?如果它连接到控件,则当按下某个键且控件具有焦点时将触发该事件。
如果您希望在您的应用程序获得焦点时按下某个键时触发事件,请将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;
为了将我上面写的内容正式化为答案,借用 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;