Windowの影について


 2010-09-02 19:06:48  No: 39086  IP: 192.*.*.*

いつもお世話になっております。
ひとつ質問させてください。

Windows7のウィンドウの効果として、すべてのウィンドウに影がついています。

現在開発しているツールは複数のフォームをタイルのように並べて
おいてあり、それぞれが並列なものとして動作させています。

しかし影がついているため、画面上で上方向に配置されたウィンドウがアク
ティブになったとき、下方向に配置されたウィンドウに影が落ちてしまいます。

下方向のウィンドウに影が落ちないようにするために、指定のウィンドウ
ではDropShadowの効果が発生しないようにしたいのですが、どなたか方法
を教えてください。

WindowClassの指定としてCreateParamsをオーバーライドして
以下のロジックを追加しましたが、うまくいきませんでした。

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  with Params do begin
    WindowClass.Style := WindowClass.style and not(CS_DROPSHADOW);
  end;
end;

編集 削除
monaa  2010-09-03 10:08:10  No: 39087  IP: 192.*.*.*

確証は無いですが、Vista,Win7で付く影はXPから採用されたCS_DROPSHADOWとは恐らく別物です。
BorderStyleをbsNoneするしか手はないと思います。
MDIにするかもしくはWindowsの設定を変えるか。

編集 削除
monaa  2010-09-03 12:22:05  No: 39088  IP: 192.*.*.*

そういえばこんなのも有りました。
影だけは見た感じありませんでした。
//uses dwmapi
procedure TForm1.Button1Click(Sender: TObject);
var
  ncrp: Cardinal;
begin
  ncrp := DWMNCRP_DISABLED;
  DwmSetWindowAttribute(Handle, DWMWA_NCRENDERING_POLICY, @ncrp, sizeof(ncrp));
end;

編集 削除
monaa  2010-09-03 12:23:26  No: 39089  IP: 192.*.*.*

参考URL
http://msdn.microsoft.com/ja-jp/library/aa969524(v=VS.85).aspx

編集 削除
 2010-09-03 13:59:36  No: 39090  IP: 192.*.*.*

monaa さん、回答ありがとうございます。

MDIという言葉、恥ずかしながら初耳でした、
作成済みのツールに親フォームを追加し、それ以外を子フォームに設定し
適用してみたのですが、
なかなかうまく表示してくれませんでした。

続いて
//uses dwmapiの件もチャレンジしてみます。

編集 削除