皆様、大変お世話になっております。
タスクバーのアイコンがオレンジで点滅することがあります。
(WinXPだけでもなかったような・・・)
例えば、起動に時間のかかるアプリケーション(A)を先に起動を指示後
直ぐに、起動の早いアプリケーション(B)を立ち上げたとします。
アプリケーション(B)の起動が完了しアクティブになっている時に、ア
プリケーション(B)の起動が完了した場合などです。
これを、プログラムから強制的に点滅・消灯させたりできるのでしょう
か?
(複数アプリを起動している場合、あるタイミングで注意を喚起したい)
可能・無理に係わらず、ご存知の方がおられましたらご教授下さい。
よろしくお願いします。
すいません。
>アプリケーション(B)の起動が完了しアクティブになっている時に、ア
>プリケーション(B)の起動が完了した場合などです。
アプリケーション(A)の起動が完了しアクティブになっている時に、ア
プリケーション(B)の起動が完了した場合などです。
間違ってました。
APIのFlashWindowでしょうか。
こんな感じで・・・
procedure TForm1.Button1Click(Sender: TObject);
var
flashinfo: TFLASHWINFO;
begin
with flashinfo do begin
cbSize := SizeOf(flashinfo);
dwFlags := $1;
hWnd := Handle;
uCount := 10;
dwTimeout := 500;
end;
FlashWindowEx(flashinfo);
end;
参考:
http://www.winapi-database.com/Window/Change/FlashWindowEx.html
「タスクバー」のアイコンを点滅(アニメーション)させるには、
複数のアイコンイメージを用意して、タイマーで Application.Iconを切り換えるしかないのでは?(「タイトルバー」のアイコンも一緒に点滅しちゃうけど)
皆様、返答が遅れてしまいました。
にしのさん、F.N.さんありがとうございます。
FlashWindowで、もしかしたらと考えたのですがタスクバーのアイコン
までは一緒に点滅してくれませんでした。
not タイトルバーさん、ありがとうございます。
当方のアプリでも状態によってタイトルバーのアイコンは点滅するので
多分OS側で単純に制御しているだけだと思うのですが、それが判れば、
プログラム側で制御できるのかなと思った次第です。
非公開というか、その方法しか無理なのかな?
色々、見てはいるのですがWindowsでどうやってるのかも判りません。
皆様、すいません。
F.N.さんの
http://www.winapi-database.com/Window/Change/FlashWindowEx.html
に、ありましたね。
ちょっとお時間ください。
//FlashWindowEX
procedure TForm1.Button1Click(Sender: TObject);
var
flashinfo: TFLASHWINFO;
begin
with flashinfo do begin
cbSize := SizeOf(flashinfo);
dwFlags := $2;//FLASH_TRAYでは、何も起こらない
// $1 は正常に動作する。
// 試しに $1 or $2 でもタイトルバーの点滅のみ
hWnd := Handle;
uCount := 10;
dwTimeout := 500;
end;
FlashWindowEx(flashinfo);
end;
上手くいくかなと思いましたが駄目でした。(;_;)
D2006Ent、WinXPSP2
こんな感じで・・・
procedure TForm1.Button1Click(Sender: TObject);
var
fwi1, fwi2: TFLASHWINFO;
begin
//ウィンドウのタイトルバー
with fwi1 do begin
cbSize := SizeOf(fwi1);
dwFlags := $1;
hWnd := Handle;
uCount := 10;
dwTimeout := 500;
end;
FlashWindowEx(fwi1);
/タスクバーのボタン
with fwi2 do begin
cbSize := SizeOf(fwi2);
dwFlags := $2;
hWnd := Application.Handle;
uCount := 10;
dwTimeout := 500;
end;
FlashWindowEx(fwi2);
end;
WindowsXP SP2, Delphi6 Personal でうまくいきましたよ
F.N.さん、大変ありがとうございました。m(__)m
procedure TForm1.Button1Click(Sender: TObject);
var
flashinfo: TFLASHWINFO;
begin
with flashinfo do begin
cbSize := SizeOf(flashinfo);
dwFlags := $2
//hWnd := Handle;
hWnd := Application.Handle;//ここ
uCount := 10;
dwTimeout := 500;
end;
FlashWindowEx(flashinfo);
end;
で、上手くいきました。
お騒がせいたしました。
またやってしまいました。
解決忘れてました。
これはアクティブじゃないアプリが自分をアクティブにしようとするとなるようです。
Form1 に ApllicationEvents1 を置いて、OnDeactivate イベントハンドラを
procedure TForm1.ApplicationEvents1Deactivate(Sender: TObject);
begin
SetForegroundWindow(Application.Handle);
end;
にするだけです。実行して、メモ帳などの他アプリをマウスでクリックしてみてください。
これのせいでアクティブにしたいときに困るんですよね・・・
ツイート | ![]() |