【问题标题】:Delphi 6 - TApplicationEvents.OnMinimize is not triggered by "Show Desktop"Delphi 6 - TApplicationEvents.OnMinimize 不是由“显示桌面”触发
【发布时间】:2011-06-05 01:09:19
【问题描述】:

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

-- 罗施勒

【问题讨论】:

    标签: delphi components desktop show minimize


    【解决方案1】:

    添加

    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;
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

        • 嗯,我也是这么想的,但后来我检查了IsIconic,确实确​​实在 Win+D 之后返回 true(不过在 Windows 7 中)。跨度>
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-06
        • 2018-05-09
        • 1970-01-01
        相关资源
        最近更新 更多