Прозрачность компонентов

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
nagash
новенький
Сообщения: 50
Зарегистрирован: 21.05.2007 08:27:05
Контактная информация:

Прозрачность компонентов

Сообщение nagash »

Доброго времени суток всем :)
В дельфях у большинства компонентов есть свойство AlphaBlend, которое вроде как позволяет регулировать прозрачность компонента.
В лазарусе такое свойство, также как и прозрачность всего окна целиком, не реализовано.
Вопрос - как это можно сделать с помощью винапи?

Прозрачность самого окна я сделал так:

Код: Выделить всё

SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle,0,TransparencySwitch.Position,LWA_ALPHA);


А вот насчет прозрачности отдельных элементов что-то идей никаких :(

UPD:
lazarus 0.9.28.2 (fpc 2.2.4) @ Windows Vista
Последний раз редактировалось nagash 15.01.2010 18:34:32, всего редактировалось 1 раз.
Climber
постоялец
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Сообщение Climber »

У некоторых элементов вроде бы тоже должно быть свое окно и, соответственно, хендл окна? Может, так же и попробовать?
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Сообщение hinst »

также как и прозрачность всего окна целиком

почему это? а TForm.AlphaBlend разве не прозрачность окна регулирует?
nagash
новенький
Сообщения: 50
Зарегистрирован: 21.05.2007 08:27:05
Контактная информация:

Сообщение nagash »

Climber
У каких например?

hinst
Неа, нет такого свойства. По крайней мере в моей версии лазаруса.
Climber
постоялец
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Сообщение Climber »

nagash
У всех наследников TWinControl, если память не изменяет.
Но вообще у меня основные познания идут из форума sql.ru, а там все Delphi'сты, так что в лазаре проверять надо ;)
Аватара пользователя
FedeX
постоялец
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Сообщение FedeX »

Неа, только что проверил - для окон работает такой подход, а для всяких винконтролов с хендлом(панельки, кнопки) не работает.
Хотя не совсем могу представить зачем это для них такое надо, для окна понятно, а вот чтоб контролы становились полупрозрачными нигде не видел.
nagash
новенький
Сообщения: 50
Зарегистрирован: 21.05.2007 08:27:05
Контактная информация:

Сообщение nagash »

FedeX
Вопрос "зачем?" это уже другая сторона медали :)
В основном для красоты конечно. Некоторым несерьезным приложениям (например в моем случае это лаунчеры к разным играм) подобные свистелки и перделки помогут немного улучшить внешний вид, относительно воздушных интерфейсов висты и в7.
Спорный вопрос конечно, но тем не менее - в дельфи это реализовано, а значит
1. это востребовано
2. это реально
Аватара пользователя
FedeX
постоялец
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Сообщение FedeX »

В Делфи ж ведь только для окон и реализовано :wink:
nagash
новенький
Сообщения: 50
Зарегистрирован: 21.05.2007 08:27:05
Контактная информация:

Сообщение nagash »

FedeX
Блин, действительно, сейчас погуглил - AlphaBlend есть только для форм.
Значит меня дезинформировал один нехороший человек :(

Ладно, тогда вопрос закрыт.
Извращения типа копирования фона под компонентом и накладывания его в фон компонента для имитации прозрачности или создания окна-пустышки с прозрачностью - это не для меня.
Аватара пользователя
Slavikk
постоялец
Сообщения: 208
Зарегистрирован: 15.01.2007 21:34:52
Откуда: Из лесов...
Контактная информация:

Сообщение Slavikk »

nagash писал(а):Извращения типа копирования фона под компонентом и накладывания его в фон компонента для имитации прозрачности или создания окна-пустышки с прозрачностью - это не для меня.


Если решиш попробовать, то знай там всё не так как в Delphi, смотри wiki по Lazarus.
Аватара пользователя
FedeX
постоялец
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Сообщение FedeX »

Я чтот-о пнообдое далел:
Изображение
Под Вин всё ннлесожо: (панелька порвех всех контролов + GetFormImage + WinAPI функция AlphaBlend) = всё работает быстро, как в играх с хардварным ускорением, даже на моём слабом домашнем компе с 1,4 ГГц проце в полноэкранном режиме. Все длаиовоыге онка так реишл в эотй тзуле селдтаь. Пёчирм фон птьвяелсояя не сразу а очень планво.
Под Линух, конечно AlphaBlend нет, поэтому пришлось поиграться с TLazIntfImage. Вышло тоже плавненько, но в фуллскрин всё-таки подтормаживало, а потом ещё выяснилось, что под Линей GetFormImage некорректно работает, потому решил пока под Линью эффект убрать.
Ответить