3

我有一个 Delphi 6 Pro 应用程序,它在应用程序最小化时执行某些操作。我在属于 TApplicationEvents 组件的 OnMinimize() 事件中工作。当使用主窗口控制框上的最小化按钮时效果很好,但是,当使用 Windows XP 显示桌面按钮最小化所有活动应用程序时,不会触发 OnMinimize() 事件。有没有办法解决这个问题,还是我必须在主 WndProc() 中做一些乱七八糟的事情?

——罗施勒

4

3 回答 3

7

添加

protected
  { Private declarations }
  procedure WMSize(var Message: TWMSize); message WM_SIZE;

在哪里

procedure TForm1.WMSize(var Message: TWMSize);
begin
  if Message.SizeType = SIZE_MINIMIZED then
    beep;
end;

或者,当然,你可以这样做

protected
  { Private declarations }
  procedure WndProc(var Message: TMessage); override;

在哪里

procedure TForm1.WndProc(var Message: TMessage);
begin
  inherited;
  case Message.Msg of
    WM_SIZE:
      if Message.WParam = SIZE_MINIMIZED then
        beep;
  end;
end;
于 2011-01-07T02:29:10.413 回答
1

如果我没记错的话,Delphi 应用程序的问题是主消息处理程序不属于“主”窗口,而是属于 TApplication。无论如何,当 Show Desktop 被触发时,使用 WinSight 之类的东西来了解哪些消息被传递到什么位置。

于 2011-01-07T02:13:45.573 回答
1

除了希望能解决您的问题的答案外,我还在 Microsoft 网站上找到了以下描述:

默认情况下,快速启动工具栏还包含两个特殊按钮。点击 Show Desktop 按钮 Show Desktop 图标的图片可暂时隐藏所有打开的窗口并显示桌面;再次单击该按钮以再次显示所有窗口。

由此我收集到 Show Desktop 实际上并没有最小化窗口。只是使它们不可见(通过使桌面的 Z 顺序位于最上面)。在这种情况下,您的应用程序没有收到最小化消息是正确的。

于 2011-01-07T08:34:17.343 回答