2009-06-02 8 views
5

最小化されたウィンドウ自体が再描画されないため、アプリケーションの最小化時にVistaのツールバーアプリケーションサムネイルは更新されません。私が持っているモニタリングアプリケーションでは、アプリケーションが最小化されたままアプリケーションサムネイルを更新すると便利です。私はDelphi 2009を使用しています。 誰もこれに対して良い回避策を提案できますか?Vistaアプリケーションサムネイル

私は、WindowsのAPIを何らかの方法でそれが可能だと思い興味深いものだHMcG

答えて

3

が、私は、現時点ではVistaマシン上に存在しないが、私が最小化時にWindows Media Playerがまだ動画の再生を示していると思います。

ハックは、最小化ボタンを無効にしてフォームを画面外に移動し、フォームが再びアクティブになったことを検出して元の場所に戻すことです。これは、フォームが見えないが最小化されていないことを意味します。

+0

はおそらく動作しますが、bodgeのビットを思わでしょう。しかし、それでも... ... .......... HMcG – HMcG

+0

Windows Media Playerは確かにこのトリックを管理しています。もちろん、最小限のボタンをオーバーライドしてフォームを画面外に移動している場合を除きます。 – HMcG

+0

私はそれはおそらく適切な方法ですハックだが、動作する必要があり、解決策を見つけることができない場合、私はそれが問題を引き起こすとは思わない。 – PeteT

0

これまで、タスクバーボタンに情報を表示するためにApplication.Titleを変更しました。私はこれがアイコンの再描画を引き起こすとは思わない?

+0

私はOPがタスクバーのアイコンについて質問しているとは思わないがVistaに表示できるサムネイル(「ミニスクリーンショット」)。そのウィンドウに切り替える前にウィンドウに含まれる内容を知ることができます。 –

+0

Application.Titleを変更すると、タスクバーボタンのキャプションが変更されなくなりました。メインフォームキャプションを変更してもアイコンは再描画されません(または同じ画像で再描画されることはありません)。 – HMcG

1

this workaroundがまだDelphi 2009で動作するかどうかわかりません:GetDesktopWindowをWndParentとして設定するCreateParamsをオーバーライドしてください。あなたは最小限にし、代わりにちょうど背中に移動からアプリケーションを防ぐために必要な、その後更新し、それを維持するために

Application.MainFormOnTaskbar := True; 

を設定している場合

+0

これはVistaのD2009でも動作しますが、2番目のフォームにもサムネイルが表示されますアプリのサムネイルはまだ更新されません。最小化される。しかし、便利なトリックと画面から2番目のウィンドウを移動すると、私は望む効果を与えるかもしれません。 ところで、モーダルウィンドウでこれを行うには、いくつかの「面白い」副作用があります...... – HMcG

+0

Application.MainFormOnTaskbar:= trueを設定すると、このトリックが必要でしょうか? – Vegar

+0

Delphi 2007でMainFormOnTaskBarが導入されました。私が間違っていないと、このトリックは当時のものです。 –

0

デルファイ2007年には、あなたのメインフォームは、タスクバーにあります。これには、TApplicationEventsをフォームに入力し、OnMinimizeイベントにイベントハンドラを割り当てて、Application.Restoreとコールします。あなたは自分の最小化状態を追跡し、他の全てのフォームを隠して(あなたが持っていれば)あなたのメインフォームを見えるようにしたいが、 "最小化"されているときはZの最低注文である。

Windows Vistaでは、フォームを画面外に移動させることはできません。そうしても構いません。たぶん、その周りにハックがあります。

幸運を祈る!

2

このトピックに対応するsomething in a Microsoft development forumが見つかりました。私たちは、 カスタム代替サムネイル表現を作成するためのアプリのための手段を提供するために、何の[t]が計画しない

:質問は、マイクロソフト社のLeonardo Blancoこれで応答するために、カスタムのサムネイル画像を提供する方法についてでしたしかし、我々は ....通常のサムネイル画像完全 をオプトアウトするためのAPIを提供します

それは機能のMSDNに存在から判断すると、その間に変更されている可能性があるこれらの計画のように見えDwmSetIconicLivePreviewBitmapDwmSetIconicThumbnail for Windows 7.現在、これらのエントリは本当に説明は入っていますが、その名前は有望です。

誰かが、ウィンドウが最小化されている間でも、Windows Media Playerのサムネイルが動画を表示していることを指摘しました。ブランコの説明:

WMPは、スムーズな再生 経験を達成するために [デスクトップウィンドウマネージャー]に直接話し新しいビデオパイプラインを使用しています。このパイプラインは[DirectX]に依存しており、 はウィンドウの可視性情報に依存しないため、 のように、ウィンドウが最小化されてもサムネイル を有効に保つことができます。ただし、 が表示される場合があります。ビデオの周りのUIがもうライブになっていない (ビデオの周りのUIが通常更新されないため、これは観察するのが難しいです。このメソッドの詳細については、 のDwmSetPresentParameters APIをご覧ください。

私はこれについてさらに何かを見つけることはできません。 DWM関数のドキュメントはまばらです。

アプリケーションの性質上、gadgetをWindowsサイドバーにインストールすることを検討する価値はありますか?

+0

リンクをありがとう。問題を回避するよりもむしろフォームを画面外に移動させてください。おそらくWindows 7は長期的にはより良い解決策を提供するでしょう。 – HMcG

0

ソースプロジェクトに移動し、Application.MainFormOnTaskbarをfalseに変更します。 Application.MainFormOnTaskbar:= false;画面からフォームを移動

よろしく、 マウリシオ

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