5

根据设计,当应用程序最小化时,Vista 上的工具栏应用程序缩略图不会更新,因为最小化的窗口本身不会重绘。对于我拥有的监控应用程序,在应用程序保持最小化的同时更新应用程序缩略图会很有用。我正在使用 Delphi 2009。任何人都可以为此提出一个好的解决方法吗?

血红蛋白

4

6 回答 6

3

这是一个有趣的问题,我想在某种程度上使用 Windows API 是可能的,我目前不在 vista 机器上,但我认为 Windows Media Player 在最小化时仍会显示视频播放。

我想一个技巧是覆盖最小化按钮并将表单移出屏幕,然后检测表单再次变为活动状态并将其移回旧位置。这意味着表格不在视野范围内,但没有最小化。

于 2009-06-02T11:27:11.150 回答
2

在 Microsoft 开发论坛中找到了一些解决此主题的内容。问题是关于提供自定义缩略图的方法,微软的Leonardo Blanco对此做出了回应:

我们不[t] 计划为应用程序提供一种方法来创建自定义替代缩略图表示,但我们将提供一个 API 来完全退出正常的缩略图图像......

DwmSetIconicLivePreviewBitmap从 MSDN 中的功能和Windows 7的存在来看,这些计划看起来可能在此期间发生了变化DwmSetIconicThumbnail。目前这些条目并没有真正包含任何解释,但它们的名称看起来很有希望。

有人指出,即使窗口最小化,Windows Media Player 的缩略图也会显示移动视频。布兰科的解释:

WMP 使用直接与 [桌面窗口管理器] 对话的新视频管道,以实现更流畅的播放体验。此管道依赖于 [DirectX] 并且不依赖于窗口可见性信息,因此即使窗口最小化,缩略图也可以保持活动状态,只要应用程序继续提交帧。但是,您可能会注意到,视频周围的 UI 不再存在(这很难观察,因为视频周围的 UI 通常不会更新)。有关此方法的更多信息,请参阅DwmSetPresentParametersAPI。

恐怕我找不到更多关于这方面的信息了。DWM 函数的文档很少。

鉴于您的应用程序的性质,也许值得考虑将小工具放在 Windows 边栏上。

于 2009-06-02T19:38:06.993 回答
1

我不知道这种解决方法是否在 Delphi 2009 中仍然有效:覆盖 CreateParams 以将 GetDesktopWindow 设置为 WndParent。

于 2009-06-02T14:49:44.033 回答
0

我过去更改了 Application.Title 以在任务栏按钮中显示一些信息。我不认为这会导致图标重绘?

于 2009-06-02T12:57:24.293 回答
0

go to your source project and change Application.MainFormOnTaskbar to false: Application.MainFormOnTaskbar := false;

Regards, Mauricio

http://sourceforge.net/projects/tcycomponents/

于 2010-07-26T10:05:27.320 回答
0

在 Delphi 2007 中,您的主窗体位于任务栏上,如果您设置

  Application.MainFormOnTaskbar := True;

为了保持更新,您需要防止您的应用程序最小化,而是将其移到后面。您可以通过在表单上放置一个TApplicationEvents并为OnMinimize事件分配一个事件处理程序,然后在其中调用Application.Restore来做到这一点。您将需要跟踪自己的最小化状态,并确保隐藏所有其他表单(如果有的话)并且只让您的主表单可见,但在“最小化”时处于最低 Z 顺序。

我不认为 Windows Vista 允许您将表单移出屏幕,或者您可以这样做。也许有一个hack。

祝你好运!

于 2009-06-02T17:39:28.927 回答