Консультация № 136799
14.05.2008, 14:58
0.00 руб.
0 1 1
Здравствуйте, уважаемые эксперты! Создаю форму fm2 с эффектом прозрачности (AlphaBlended:=True; AlphaBlendvalue:=100), но когда свойству Parent этой формы присваиваю указатель на другую форму fm1(чтобы fm1 определяла границы перемещения и отрисовки "прозрачной" fm2), эффект прозрачности почему-то пропадает. Пожалуйста, помогите решить данную проблему. Заранее благодарен, Олег.

Приложение:
procedure Tfm1.Button1Click(Sender: TObject);//fm1-ограничивает перемещение и отрисовку fm2//fm2 -"прозрачная" формаbegin fm2:=Tfm2.Create(Self); fm2.Parent:=fm1;//эта строка убирает "прозрачность" fm2 fm2.Show;end;

Обсуждение

Неизвестный
14.05.2008, 21:28
общий
это ответ

<i>Здравствуйте, <b>Олег Семёнович</b>!</i>

Для установки прозрачности формы, Delphi использует функцию SetLayeredWindowAttributes. Данная функция работает только с окнами, у которых применен расширенный стиль WS_EX_LAYERED. Данный стиль можно указать либо при создании окна (CreateWindowEx), либо с помощью функции SetWindowLong.

В описании данного стиля есть строчка:
<cite>
Windows 2000/XP</b>: Note that this <u>cannot be used for child windows</u>.
</cite>

Переводится это так:
"Учтите, данный стиль <b>не может применяться для дочерних окон</b>".

При вызове функции SetLayeredWindowAttributes для дочерних окон возникает ошибка 87 (Параметр задан неверно).

Т.е., к сожалению, прозрачность дочерних окон устанавливать нельзя.

<em>Удачи!</em>
Форма ответа