捕获表单的最小化事件(Delphi)

Posted

技术标签:

【中文标题】捕获表单的最小化事件(Delphi)【英文标题】:Catch onMinimize Event For a Form (Delphi) 【发布时间】:2014-03-18 16:05:21 【问题描述】:

我找到了两种捕捉 onMinimize 事件的方法。

首先:在 FormResize 事件中:

if MyForm.WindowState = wsMinimized then ......

第二:像这样声明消息处理程序:

procedure WMSize(var Msg: TMessage); message WM_SIZE;

然后:

procedure TForm57.WMSize(var Msg: TMessage);
begin
  if Msg.WParam  = SIZE_MINIMIZED then ....
end;

哪种方式更好?!

【问题讨论】:

那个更适合你阅读。 哪一个最优化? 在确定优化原因之前不要担心优化(通过分析来追踪实际的性能问题)。在此之前,选择更易读、更容易维护的。 【参考方案1】:

OnResize 被触发以响应同一消息 (WM_SIZE)。除非您需要在 VCL 处理消息之前做出反应(更新滚动条、对齐控件等),否则您不需要附加消息处理程序。否则,请务必在 inherited 调用之前处理它(您的示例中缺少该调用)。

【讨论】:

【参考方案2】:

第二个更好。因为 WindowState 不一定是 wsMinimized。

【讨论】:

每条 WM_SIZE 消息都会触发 OnResize 事件,无论您的窗口状态是什么。

以上是关于捕获表单的最小化事件(Delphi)的主要内容,如果未能解决你的问题,请参考以下文章

delphi 模拟键盘法对当前窗口鼠标左键单击最小化怎么做?

DELPHI的关于关闭窗口的非常简单的问题

DELPHI中MDI子窗口的关闭 和打开

如何在Outlook中使用OLE在前面(而不是在背景上)显示新的电子邮件表单?

delphi模态窗体最小化会隐藏的问题

delphi怎么写“最小化到系统托盘”(有控件最好)