Показать тень окна при использовании стилей VCL

Есть ли способ показать тень окна, как в обычных формах Windows 7, при использовании стиля VCL?

Я понимаю, что растровое изображение и настройки в стиле заменяют границы формы, но разве тень не является чем-то вроде альфа-смешения/аэро, которое находится за пределами области, на которую влияет стиль?

Добавление CS_DROPSHADOW в WindowClass.Style, похоже, не дает никакого эффекта.


person SiBrit    schedule 19.08.2013    source источник
comment
использование CS_DROPSHADOW работает для меня. Можете ли вы показать код, который вы используете?   -  person RRUZ    schedule 21.08.2013


Ответы (1)


Использование стиля CS_DROPSHADOW отлично работает

type
  TMyForm = class(TForm)
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;

procedure TMyForm.CreateParams(var Params: TCreateParams);
begin
  inherited;
  with Params do
    WindowClass.Style := WindowClass.Style or CS_DROPSHADOW;
end;

введите здесь описание изображения

person RRUZ    schedule 20.08.2013
comment
Веб-поиск CS_DROPSHADOW delphi показывает, что многие люди страдают от этой проблемы, и она не связана со стилями VCL. Мне кажется, что здесь есть проблема, хотя ее трудно воспроизвести. В сторону: разве CS_DROPSHADOW не определен в Windows.pas? - person David Heffernan; 21.08.2013
comment
Есть разница. CS_DROPSHADOW работает нормально, ОК. Но когда я помещаю не стилизованную, не затененную форму, т. е. пустую форму, рядом с формой на картинке, я вижу, что ее тень немного шире. Я не знаю, но вопрос может быть об этом. - person Sertac Akyuz; 21.08.2013
comment
Если вы говорите о тени, нарисованной DWM, это нельзя показать, потому что хук стиля формы использует функцию SetWindowRgn, которая плохо работает с dwm и отключает эффект эффекта тени. - person RRUZ; 22.08.2013
comment
Кто-нибудь нашел другое решение для этого? У нас тоже не работает. - person Jerry Dodge; 20.12.2014