AlphaBlend дочерняя форма
-
05-07-2019 - |
Вопрос
Я ищу способ создания дочерней формы AlphaBlend, если возможно, используя многослойные окна, поскольку за ней будут интерактивные элементы управления.
Проблема в том, что у меня есть компонент в обычной TForm, который рисует несколько визуальных слоев (рисунки, рисунки ...). В какой-то момент мне нужно создать элемент управления редактора в этой форме (на месте), этот элемент управления будет включать в себя различные стандартные элементы управления вводом за пределами моего элемента управления (поле редактирования, флажок и т. Д.), Однако я хотел бы наложить слои перед слоем, который редактируется с использованием альфа-смешивания (и WS_EX_TRANSPARENT
, чтобы сделать его кликом).
Сначала я подумал об использовании дочерних форм для этого (без полей TForm
, привязанного к компоненту), и это работает нормально, вплоть до того момента, когда AlphaBlended TForm вообще не имеет алфавитного округления, но становится непрозрачным, как только родится ...
Затем я попытался очистить форму в алфавитном порядке, установив для нее значение fsStayOnTop, и, реагируя на соответствующие события, держать его перед компонентом на экране, что работает, но это не совсем удовлетворительное решение: alphablended Форма StayOnTop также находится перед другими модальными и немодальными формами приложения, если пользователь решит переместить их перед компонентом ...
Итак, есть ли другие идеи о том, как создать дочернюю форму? (или веди себя так, как есть)
Решение
Согласно MSDN, вам не повезло, так как WS_EX_LAYERED нельзя использовать для дочерних окон .
Возможно, вы могли бы скрыть все формы редактора, когда ваша форма / приложение теряет фокус, что, по крайней мере, помешало бы им находиться поверх других окон. Тем не менее, это неудовлетворительно ...