TTrayIcon バルーン ヒントをプログラムで閉じることはできますか?
問題:
毎分メッセージをチェックするタイマーがあります。メッセージを検出すると (例: ABC サービスが停止しています)、メッセージとともにバルーンが表示されます。
procedure TFrmTest.tmrTimer(Sender: TObject);
begin
tmr.Enabled := False;
try
if IsAnyServiceStopped then
ShowBallon(bfError, 'The ABC Service is stopped. Do something!!!');
finally
tmr.Enabled := True;
end;
end;
procedure TfrmTest.ShowBallon(pFlag: TBalloonFlags; pMessage: string);
begin
try
// HERE I'D LIKE TO CLOSE THE BALLOON IF IT'S OPENNED
TrayIcon.BalloonFlags := pFlag;
TrayIcon.BalloonHint := pMessage;
TrayIcon.ShowBalloonHint;
except
end;
end;
TrayIcon の BalloonTimeOut は 3000 (3 秒) に設定されています。タイマーは毎分 (メッセージがある場合) メッセージをトリガーするため、ユーザーがメッセージを閉じない場合、システムはメッセージのキューを作成します。ユーザーが 30 分後に PC に戻った場合 (たとえば)、最初のメッセージを閉じると、すぐにトレイ アイコンに 2 番目のメッセージが表示され、次の 28 メッセージについても同じことが表示されます (貧しいユーザー)。
バルーンが自動的に閉じることは知っていますが、ユーザーが何らかの入力を行った場合にのみ閉じます (マウスの動き、キーの押下、およびアプリケーションがフォーカスされているか、表示されている必要さえありません)。したがって、ユーザーがコンピューターから離れている場合、バルーンは入力まで永遠にそこにとどまります。
私が試した他の解決策は、バルーンを表示するときにタイマーを無効にし、ユーザーが現在のバルーンを閉じたとき (または自動的に閉じたとき) にのみタイマーを再度有効にすることでした。しかし、バルーンがいつ閉じられるかを発見する方法が見つかりませんでした (ユーザーが X をクリックした場合、またはバルーンが自動的に閉じられた場合、OnBalloonClick イベントはトリガーされません)。