Windowの影について


  2010-09-03 04:06:48  No: 39086

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

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 19:08:10  No: 39087

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


monaa  2010-09-03 21:22:05  No: 39088

そういえばこんなのも有りました。
影だけは見た感じありませんでした。
//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 21:23:26  No: 39089

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


  2010-09-03 22:59:36  No: 39090

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

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加