![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
Хочу поизвращаться с дизайном окна. Я просто замечательно придумал как это должно выглядеть, но не имею понятия как это сделать. Идея такова: полупрзрачное окно неправильной формы. На нем область с другим AlphaBlend, и тоже неправильной формы. и в этой области и в остальной части окна больше чем один цвет. Сделать это нужно только на апи. Подскажите какой-нить изврат, пожалуйста...
-------------------- Обижено школьников: 8 |
|||
|
||||
~FoX~ |
|
|||
![]() НЕ рыжий!!! ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2819 Регистрация: 8.10.2003 Где: Зеленоград Репутация: 0 Всего: 68 |
Неправильная форма - работа с регионами.
Полупрозрачность - SetLayeredWindowAttributes Юзаем поиск и ФАК, темы поднимались не однократно! |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
Для больше, чем одного значения прозрачности на одном окне, не знаю как преминять. И поиск и MSDN не дают ответа на вопрос.
-------------------- Обижено школьников: 8 |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
Не. На всё окно одна прозрачность.
А для раздельной ничего стандартного нет. Тут уже идут глючные извращения. |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
bems, имхо нужно создать не одно окно , а несколько
![]() -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
да, буду извращаться таким образом. А как сделать это безглючно? В большом окне сделаю дырку для маленького. Как сделать чтобы оно всегда оставалось в этой дырке и в Z - порядке всегда было рядом? WM_WINDOWPOSCHANGED вроде не всегда получаю. Хотя в оконной процедуре у меня не без боков... Это сообщение отредактировал(а) bems - 15.6.2006, 10:23 -------------------- Обижено школьников: 8 |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
||||
|
||||
urix |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 26.12.2005 Репутация: 1 Всего: 1 |
можете глянуть это:
http://urixsoft.nm.ru/ru/index.htm?soft-Sc...amp;frameleft_s и это http://urixsoft.nm.ru/ru/index.htm?soft-St...amp;frameleft_s (с исходниками). Всё нехватает времени засесть за оптимизацию скорости, потому что работает значительно медленнее, чем я предполагаю возможно. Ну, и конечно же - как же без глюков... (в висте, например, эта реализация не работает, в XP - дефекты, когда друг над другом,...) |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
А вот теперь - ДА!
UpdateLayeredWindow рулит -------------------- Обижено школьников: 8 |
|||
|
||||
bems |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
Есть функция UpdateLayeredWindow. Но разобраться с ней на 100% не выходит. В теории все выглядит так: нужно создать контекст устройства, битмап, выбрать битмап в контекст и в битмап напрямую (не в ДиСи) записывать значения прозрачности для каждой точки. Потом вызвать UpdateLayeredWindow с этим контекстом и общим значением прозрачности для всего окна. Реальная прозрачность в каждой точке должна быть результирующей между индивидуальной и общей. Это в теории. А на практике:из теории делаю вывод что одинаковое значение прозрачности для каждой точки($30 к примеру) и полная непрозрачность всего окна должны дать тот же результат, что и отсутствующая прозрачность точек со значением $30 для всего окна. Но не сходиться! я написал такой вот код:
При значения PerPixelAlpha:=$FF и ConstantAlpha:=$50 все выглядит так как я и ожидал (ничем не лучше и не хуже SetLayeredWindowAttributes). А если поменять эти значения, то картинка почему-то меняется, и у меня складывается впечатление, что откуда-то вмешался в картинку прозрачности какой-то слой белого цвета. Давайте вместе что-нить придумаем... -------------------- Обижено школьников: 8 |
||||
|
|||||
urix |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 26.12.2005 Репутация: 1 Всего: 1 |
вот, работающий правильно пример: http://www.codeproject.com/gdi/pxalphablend.asp
|
|||
|
||||
Girder |
|
|||
![]() Лентяй 2 ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1993 Регистрация: 12.5.2004 Репутация: 25 Всего: 155 |
PS: Или ReverseA:=false; -------------------- Как слышим, так и пишим. Истина где-то там... |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
urix, Girder, списибо ребята, я уже разобрался. Нагуглил этот пример с codeproject. Весь фокус был в предумноженном цвете (как перевести premultipled?) Я думал так никто и не откликнется.
Спасибо вам еще раз и "+" -------------------- Обижено школьников: 8 |
|||
|
||||
Wolf |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 9.6.2006 Где: Нижневартовск Репутация: нет Всего: нет |
Хм, а теперь как бы на этом всём контролы какие нибуть рисовать? Что-то они не охотно рисуются )
|
|||
|
||||
vovaok |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 25.11.2010 Репутация: нет Всего: нет |
вот-вот.. я знаю 2 варианта.. рисовать контролы вручную, либо сделать дырку в LayeredWindow а под ней помещать обычную форму с контролами
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |