Вопрос

Я ищу способ создания дочерней формы AlphaBlend, если возможно, используя многослойные окна, поскольку за ней будут интерактивные элементы управления.

Проблема в том, что у меня есть компонент в обычной TForm, который рисует несколько визуальных слоев (рисунки, рисунки ...). В какой-то момент мне нужно создать элемент управления редактора в этой форме (на месте), этот элемент управления будет включать в себя различные стандартные элементы управления вводом за пределами моего элемента управления (поле редактирования, флажок и т. Д.), Однако я хотел бы наложить слои перед слоем, который редактируется с использованием альфа-смешивания (и WS_EX_TRANSPARENT , чтобы сделать его кликом).

Сначала я подумал об использовании дочерних форм для этого (без полей TForm , привязанного к компоненту), и это работает нормально, вплоть до того момента, когда AlphaBlended TForm вообще не имеет алфавитного округления, но становится непрозрачным, как только родится ...

Затем я попытался очистить форму в алфавитном порядке, установив для нее значение fsStayOnTop, и, реагируя на соответствующие события, держать его перед компонентом на экране, что работает, но это не совсем удовлетворительное решение: alphablended Форма StayOnTop также находится перед другими модальными и немодальными формами приложения, если пользователь решит переместить их перед компонентом ...

Итак, есть ли другие идеи о том, как создать дочернюю форму? (или веди себя так, как есть)

Это было полезно?

Решение

Согласно MSDN, вам не повезло, так как WS_EX_LAYERED нельзя использовать для дочерних окон .

Возможно, вы могли бы скрыть все формы редактора, когда ваша форма / приложение теряет фокус, что, по крайней мере, помешало бы им находиться поверх других окон. Тем не менее, это неудовлетворительно ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top