- 0
Тень формы отсутствует при стилизованной границе окна
-
Похожий контент
-
- 1 ответ
- 1 935 просмотров
-
- 0 ответов
- 1 385 просмотров
-
- 4 ответа
- 5 288 просмотров
-
- 4 ответа
- 3 358 просмотров
-
-
Последние посетители 0 пользователей онлайн
- Ни одного зарегистрированного пользователя не просматривает данную страницу
Вопрос
Алиса Романец
Доброго времени суток, форумчане!
Столкнулась с проблемой при стилизации границ формы окна в FireMonkey на Windows. Как только появляется стиль границ - форма начинает вести себя, как прозрачная - то есть, теряет тень. Кто-то из добрых людей уже замечали эту проблему, но в текущих реалиях прикостылить их решения я не смогла. CreateParams в FMX не существует, а вручную добавлять TShadowEffect в стиль не принесло никаких результатов, кроме съехавшего стиля формы и тормозного изменения размеров. Может ли кто пояснить за этот момент, как вообще тень обрабатывается в MS Windows и есть ли какой-нибудь workaround для её ручной активации через WinAPI? Потому что с тенью в macOS всё прекрасно (однако, там и границу окна не стилизуешь, as long as у вас не веб-приложение, хехе).
Скрины проблемы прикрепила к посту. Стиль полностью векторный.
Обновление (19.12.2019 11:44 МСК)
Путём перехвата процедуры CreateHandle и с использованием SetClassLong удалось создать тень, ноо... До тени, что выдаёт Windows 10 ей далеко
type TForm1 = class(TForm) private {$IFDEF MSWINDOWS}procedure CreateHandle; override;{$ENDIF MSWINDOWS} public { Public declarations } end; begin {$IFDEF MSWINDOWS} procedure TForm1.CreateHandle; begin inherited CreateHandle; var hWnd: HWND := FormToHWND(Form1); if hWnd <> 0 then SetClassLong(hWnd, GCL_STYLE, GetClassLong(hWnd, GCL_STYLE) or CS_DROPSHADOW); end; {$ENDIF MSWINDOWS} end.Результат:

Изменено пользователем Алиса РоманецОбновление. Частично решение было найдено самостоятельно.
6 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.