关于窗口接收 ESC 键关闭的问题

诸葛不亮2909 2021-06-16 11:50:20

新建一个工程,窗口属性 KeyPreview =True, 然后在 FormKeyPress 里写   if key = #27  then Application.Terminate; 

问题:

当窗口 FormStyle 属性为 fsNormal 时,运行程序,按ESC 键,窗口是可以关闭的。

但当    FormStyle 属性为 fsMDIForm 时,运行程序,按ESC ,窗口没反应。感觉没接收到 ESC键

请大神指点

 

...全文
734 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
墨梅无痕 2021-06-19
  • 打赏
  • 举报
回复 1

SDI 窗口程序的消息循环可以由 Application.MainForm 处理,而 MDI 窗口程序似乎是由 Application 来处理的(不确定)。

可以不管 FormStyle,在窗体上添加一个 TApplicationEvents组件(在 Additional 页上),处理它的 OnMessage 事件。

uses
  ..., Winapi.Windows, ...

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
  case Msg.message of
    WM_KEYUP: begin
      if Msg.wParam = VK_ESCAPE then begin
        ...
      end;
    end;
  end;
end;

 

诸葛不亮2909 2021-06-19
  • 举报
回复
@墨梅无痕 照着您的代码可以了。非常感谢!

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧