私はいくつかのウィンドウ
とアプリケーション
メッセージに応答しようとしていますが、それらを複数回取得します。同じ種類の複数のウィンドウメッセージが表示されるのはなぜですか?
たとえば、WM_TIMECHANGEを使用してシステムの日付を変更したときにメッセージボックスを表示するために、次のコードを記述します。 WMTimeChangeは複数回実行され、倍数(ほとんどの場合2〜3回)のメッセージボックスが1つずつ表示されます。たぶん、私は何かを欠いている?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
protected
procedure WMTimeChange(var Msg: TMessage) ; message WM_TIMECHANGE;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.WMTimeChange(var Msg: TMessage);
begin
showmessage('Date/Time has changed!');
end;
end.
Windows XPでのテスト。
EDIT:明確にするために、私の意図は理解されていますWHYこれは起こり、複数の呼び出しを回避する方法ではありません。とにかく、それに対する答えが不可能ならば、私は後で答えを受け入れるでしょう。
EDIT2:Delphiの問題ではないように、Delphiタグを削除しました。
どのように時間を変更していますか?なぜ*メッセージは何回も送信されるべきではありませんか? –
@RobKennedy時計をダブルクリックし、年を変更します(2012年から2013年まで)。「OK」ボタンをクリックします。今年は一度だけ変更したので、WM_TIMECHANGEは1つしか期待していません。 – EMBarbosa
@EMBarbosa:オペレーティングシステム*は、時間が変更されるたびにメッセージが送信されることを保証します(最低1回)。しかし、私はそれが一度*送られたことを保証するとは思わない。結局のところ、おそらく技術的なレベルで説明したGUI操作は、システムの日付/時刻データの3つの変更に相当します。 –