2011-01-07 6 views
3

私は、アプリケーションが最小化されたときに特定のことをするDelphi 6 Proアプリケーションを持っています。私はTApplicationEventsコンポーネントに属するOnMinimize()イベントで自分の作業を行います。ただし、メインウィンドウのコントロールボックスの最小化ボタンを使用すると効果的ですが、Windows XP Show Desktopボタンを使用してすべてのアクティブアプリケーションを最小化すると、OnMinimize()イベントはトリガーされません。これを修正する方法はありますか、私はメインのWndProc()で何か面倒なことをしなければならないでしょうか?Delphi 6 - TApplicationEvents.OnMinimizeは「デスクトップを表示」によってトリガーされません

- 私の記憶が正しければ

答えて

7

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

また、当然のことながら、あなただけ行うことができます

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

追加

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; 
1

roschler、Delphiアプリケーションの問題は、メインメッセージハンドラは、「メイン」ウィンドウに、しかしのTApplicationに属していないということです。いずれにせよ、WinSightのようなものを使って、Show Desktopが起動されたときにどのメッセージが配信されているかを知ることができます。

1

は別にうまくいけば、あなたの問題を解決する答えから、私は、Microsoftのサイトでこの記述を見つけました:デフォルトでは

、クイック起動ツールバー は、2つの特別なボタンが含まれています。 デスクトップの表示ボタンをクリックします。 にデスクトップのアイコンの画像 が一時的にすべての開いているウィンドウを非表示にし、 デスクトップを表示します。もう一度すべてのウィンドウを表示するには、ボタン を再度クリックしてください。

これから、私はShow Desktopが実際にウィンドウを最小化するわけではありません。単にデスクトップのZオーダーを一番上にすることで、それらを見えなくするだけです。その場合、アプリケーションが最小化メッセージを受信して​​いないことは間違いありません。

+0

まあ、私も最初だと思ったけど、IsIconicをチェックしました.Windows + 7の後では本当に*返されます。 –

関連する問題