3

アプリケーションが最小化されたときに特定のことを行うDelphi6Proアプリケーションがあります。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 に属していることです。とにかく、WinSight のようなものを使用して、Show Desktop がトリガーされたときにどのメッセージが何に配信されているかを知ることができます。

于 2011-01-07T02:13:45.573 に答える
1

あなたの問題をうまく解決する答えとは別に、マイクロソフトのサイトで次の説明を見つけました。

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

このことから、Show Desktop は実際にはウィンドウをまったく最小化していないことが分かります。それらを非表示にするだけです (デスクトップの Z オーダーを一番上にすることによって)。その場合、アプリケーションが最小化メッセージを受信しないのは正しいことです。

于 2011-01-07T08:34:17.343 に答える