2013-08-19 5 views
3

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

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

Добавление CS_DROPSHADOW в WindowClass.Style, кажется, не имеет никакого эффекта.

+0

с помощью CS_DROPSHADOW работает для меня, Можете ли вы показать код, который вы используете? – RRUZ

ответ

5

Используя стиль 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; 

enter image description here

+1

Веб-поиск CS_DROPSHADOW delphi показывает много людей, страдающих этой проблемой, и это не связано с стилями VCL. Мне кажется, что здесь есть проблема, хотя и трудно воспроизвести. Кроме того: не CS_DROPSHADOW, определенный в Windows.pas? –

+0

Есть разница. CS_DROPSHADOW работает нормально, ОК. Но когда я помещаю нестандартную, не-drop-shadowed - т. Е. Пустую форму - рядом с формой на картинке, я вижу, что ее тень становится немного более распространенной. Я не знаю, но вопрос может быть об этом. –

+0

Если вы говорите о тене, нарисованном DWM, это невозможно показать, потому что крючок стиля формы использует функцию «SetWindowRgn», которая не играет хорошо с dwm и отключает эффект эффекта тени. – RRUZ

Смежные вопросы