ウィンドウハンドルを指定して最前面表示にする
|
23 |
SetTopMost |
動作確認 |
Delphi2007 |
更新日 |
2008/01/14(月) 2009/01/15(木) |
自作アプリはもちろんですが
他のウィンドウを含めて、ハンドルを指定して
ウィンドウが最前面表示(常に前面)になっているか調べたり
最前面表示と通常表示状態を切り替える方法です。
────────────────────
//最前面表示かどうかを確認する関数
function IsTopMostWnd(Target: HWND): boolean;
begin
Result := ((GetWindowLong(Target, GWL_EXSTYLE) and WS_EX_TOPMOST) <> 0);
end;
//最前面表示にしたり解除したりする関数
procedure SetTopMostWnd(Target: HWND; const Value: Boolean);
begin
if Value then
begin
SetWindowPos(Target, HWND_TOPMOST, 0, 0, 0, 0,
SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE or SWP_NOOWNERZORDER);
end else
begin
SetWindowPos(Target, HWND_NOTOPMOST, 0, 0, 0, 0,
SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE or SWP_NOOWNERZORDER);
end;
end;
────────────────────
Excelに対してこの処理を実行する時に
フラグとしてSWP_NOOWNERZORDERを指定しないと
正しく動作してくれないので、このフラグをつけています。
他のアプリケーションのウィンドウや
自分のアプリに対してはSWP_NOOWNERZORDERは必要ないようです。
参考────────────────────
Vista?で?Excel?を最前面に表示する - Moo Soft
http://maglog.jp/moosoft/Article205140.html
[Delphi:43570] Re: 呼び出したアプリを常に手前に
http://www2.big.or.jp/~osamu/Delphi/browse.cgi?index=43570
|