いつもお世話になっております。
ひとつ質問させてください。
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;
確証は無いですが、Vista,Win7で付く影はXPから採用されたCS_DROPSHADOWとは恐らく別物です。
BorderStyleをbsNoneするしか手はないと思います。
MDIにするかもしくはWindowsの設定を変えるか。
そういえばこんなのも有りました。
影だけは見た感じありませんでした。
//uses dwmapi
procedure TForm1.Button1Click(Sender: TObject);
var
ncrp: Cardinal;
begin
ncrp := DWMNCRP_DISABLED;
DwmSetWindowAttribute(Handle, DWMWA_NCRENDERING_POLICY, @ncrp, sizeof(ncrp));
end;
参考URL
http://msdn.microsoft.com/ja-jp/library/aa969524(v=VS.85).aspx
monaa さん、回答ありがとうございます。
MDIという言葉、恥ずかしながら初耳でした、
作成済みのツールに親フォームを追加し、それ以外を子フォームに設定し
適用してみたのですが、
なかなかうまく表示してくれませんでした。
続いて
//uses dwmapiの件もチャレンジしてみます。
ツイート | ![]() |