Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Изменение цвета фона чужого окна [D6, D7, Win2k, WinXP]


Страницы:   1 2 3 4

Teenager ©   (2006-09-13 23:15:00) 

Здравствуйте, знающие добрые люди :)

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

Заранее спасибо.


Ketmar   (2006-09-28 21:38:00) [21]

>[40] teenager(c) 28-Sep-2006, 21:37
>4) надо сделать так, чтобы калькулятор -
>покраснел
ну, покажи ему синус голый, что ли..

вообще -- нишиша непонятно. непонятно, зачем так над программами издеваться. мой инопланетный моск мне отказывает... %-)


teenager   (2006-09-28 21:37:00) [22]

эй, эй, эй...

ну неужели я плохо объяснил :(

вот смотри, есть у мя скажем калькулятор, да? кальк.ехе
1) запускаю
2) запихиваю окно калькулятора в свою панель в своем окне
3) у мя все в красном дизайне, а калькулятор - виндошного цвета
4) надо сделать так, чтобы калькулятор - покраснел
5) вывод - наложить на него полупрозрачную красную панель.
6) и будет все одноцветным в красном дизайне.

понятно? :)


Ketmar   (2006-09-28 21:33:00) [23]

>[38] Teenager(c) 28-Sep-2006, 21:26
>если ты считаешь, Кетмар :), что это мне поможет
гильотина поможет. %-) я всё равно до сих пор толком задачу не понял. %-) когда решишь -- покажи хоть, что мы тут так весело обсуждали. %-)


Teenager   (2006-09-28 21:26:00) [24]

хай, люди %)

"А ты объясни, что надо в целом."

Итак, я на панель в моем окне пытаюсь запихнуть часть чужого окна :) достаточно сложной структуры. Чужое окно имеет свой цвет, который не подходит под дизайн моего приложения.

Я принимаю решение - поместить поверх моей панели с чужим окном - прозрачную панель для корректировки цвета. Другие варианты - более удачные - приветствуются!

Насчет прозрачной панели - она должна пропускать события мув/клик, и отображать все контролы, что под ней с регулируемой степенью прозрачности.

"с одним условием - окно снизу должно принадлежать этому потоку."
как видишь, ГрэйФэйс... мне не повезло )

"правда, WM_PAINT там был побоку, потому что окно с альфа-каналом, тут свои приколы."
если ты считаешь, Кетмар :), что это мне поможет - расскажи, плиз )

эх, ну... надеюсь, вы все-таки поможете мне разобраться )


Ketmar   (2006-09-26 23:52:00) [25]

>[34] GrayFace(c) 23-Sep-2006, 21:45
>Да как-то нет. Проверял на форме. Вам удавалось
>его удачно использовать? А то не всегда его
>WM_PAINT вызывается.
писал нечто вроде CursorXP. вроде бы вполне себе работало. правда, WM_PAINT там был побоку, потому что окно с альфа-каналом, тут свои приколы.


GrayFace   (2006-09-26 18:51:00) [26]

Teenager ©   (25.09.06 20:00) [35]
httransparent в WM_NCHITTEST - как понимать?
как я понял, событие возникает при щелчке по неклиентской части окна.
надо глянуть в описания)

Этим событие возникает при движении мыши по форме и выясняет, к какой части окна принадлежит данная точка. Если HTTRANSPARENT, то кликается насквозь, с одним условием - окно снизу должно принадлежать этому потоку.

Teenager ©   (25.09.06 20:00) [35]
мне надо цветовой фильтр... хоть какой-то... эх :(

Смешать цвета легко, рисовать поверх чужого окна - неизвестно, получится ли.

Teenager ©   (25.09.06 20:00) [35]
только я все равно не понимаю - что мне делать :)

А ты объясни, что надо в целом.


Teenager   (2006-09-25 20:00:00) [27]

хм, вы так умеете обнадеживать :) спасибо.

только я все равно не понимаю - что мне делать :)

httransparent в WM_NCHITTEST - как понимать?
как я понял, событие возникает при щелчке по неклиентской части окна.
надо глянуть в описания)

а еще мне бы очень хотелось оцэ всё на .NET реализовать (C#) ...

Старик - чужая форма будет активно юзаться.
мне надо цветовой фильтр... хоть какой-то... эх :(


GrayFace   (2006-09-23 21:45:00) [28]

Teenager ©   (13.09.06 23:15)
Так же мне хотелось бы изменить имя класса чужого окна... но это должно быть еще нереальнее.

Это проще, но тоже сложно.

Teenager ©   (14.09.06 19:40) [3]
как Вам мои варианты?

Утопические :)

Ketmar ©   (14.09.06 19:52) [4]
клади поверх окно со стилем WS_EX_TRANSPARENT. оно, afair, пропускает мышиные события "насквозь".

Да как-то нет. Проверял на форме. Вам удавалось его удачно использовать? А то не всегда его WM_PAINT вызывается.

Teenager ©   (14.09.06 21:45) [5]
+ а можно контрол (панель) сделать ПОЛУпрозрачной средствами ВинАпи и уже после создания прикрепить ей отэтот мегастиль? оч хотелось бы именно такой вариант (тонкости моей проги )

Это уже реальнее. Панель, через которую можно кликать сделать нет проблем (httransparent в WM_NCHITTEST), с прозрачностью тоже может получится. По меньшей мере, можно сделать чтоб через панель были видны неWin контролы.


Старик   (2006-09-23 12:13:00) [29]

Teenager, если ты можешь получить хендл чужого окна, то почему нельзя:
1. Скопировать ВСЮ его поверхность в канву своей программы.
2. Перерисовать так, как тебе нужно.
3. Полученное произведение искусства нарисовать на форме нужного приложения.

Тогда у тебя будет окно, окрашенное нужным цветом. Другое дело, что я не уверен, что будет происходить при нажатии на кнопку, допустим, если ты вдруг и ее перекрасишь. Скорей всего, глюки. Но попробовать, я думаю, стоит.


Ketmar   (2006-09-23 07:52:00) [30]

>[31] Teenager(c) 22-Sep-2006, 22:57
>появилась новая возможность - как-то через
>рисунки с прозрачностью :)
фу. обыкновенный AlphaBlend() на канву контрола. %-)


Teenager   (2006-09-22 22:57:00) [31]

появилась новая возможность - как-то через рисунки с прозрачностью :)
например запихнуть в png альфа-канал, и радоваться )))

ссылку на эту возможность - кину позже, если кому интересно. но там на .NET :(


Ketmar   (2006-09-22 21:50:00) [32]

>[29] Teenager(c) 22-Sep-2006, 21:45
>Кетмар - спасибо за поддержку, кросавчег :)
ну, ежели ещё что обругать надо -- так ты заходи, я с удовольствием. %-)


Teenager   (2006-09-22 21:45:00) [33]

поискал по куче форумов. видимо, норм решения нет.
если есть предложения - буду счастлив.

Кетмар - спасибо за поддержку, кросавчег :)


Ketmar   (2006-09-22 21:31:00) [34]

>[27] Teenager(c) 22-Sep-2006, 20:56
>MSDN ;) (хотя там и есть ошибки - черные дыры)))
да понятно, что MSDN. это я извиняюсь так за дезу. вот, ещё и открытым текстом извиняюсь (если деза %-).

>моя идея насчет регионов - оказывается, уже
>реализована в коде - ну правильно, я ж не
>гениален :)
а я и не говорил, кстати, что это не будет работать. я лишь имел в вижду, что будет работать криво. %-)


Teenager   (2006-09-22 20:56:00) [35]

"мда. вполне возможно. тут я запросто мог ошибиться. проверять лениво пока. %-)"
MSDN ;) (хотя там и есть ошибки - черные дыры))) )

http://forum.sources.ru/index.php?showtopic=79535
моя идея насчет регионов - оказывается, уже реализована в коде - ну правильно, я ж не гениален :)

Люди, я в Вас верю ))


Ketmar   (2006-09-22 19:59:00) [36]

>[25] Teenager(c) 22-Sep-2006, 19:43
>юзать указанную мной статью. Мало того, что
>компонент не "пробивается" мышью, так еще при
он и не должен. в данном случае WS_EX_TRANSPARENT используется несколько для другого. в частности для того, чтобы окно, лежащее поверх других, получало WM_PAINT в последнюю очередь.

>вообще если даже мышь навести) то она не
>позволяет больше прорисовываться над собой
>транспарэнт-компоненту.... хоть в перекрываемом
>участке продолжает не реагировать на клики.
потому что там все намного сложнее, нежели думал автор статьи. %-)

>еще раз повторяю. WS_EX_LAYERED не катит для
>дочерних окон :(
мда. вполне возможно. тут я запросто мог ошибиться. проверять лениво пока. %-)


Teenager   (2006-09-22 19:43:00) [37]

Вы ошибаетесь, Кетмар... ничего не выходит, если юзать указанную мной статью. Мало того, что компонент не "пробивается" мышью, так еще при получении перекрываемой кнопкой фокуса (или вообще если даже мышь навести) то она не позволяет больше прорисовываться над собой транспарэнт-компоненту.... хоть в перекрываемом участке продолжает не реагировать на клики.

еще раз повторяю. WS_EX_LAYERED не катит для дочерних окон :(

эх.


Ketmar   (2006-09-22 00:48:00) [38]

>[22] Teenager(c) 22-Sep-XLI A.S., 00:34
>изменение нижележащего окна и перерисовываться
>полностью, корректируя цвет каждого пикселя?
WS_EX_LAYERED -- для кого?

>
> http://www.c-sharpcorner.com//Code/2003/May/Trans
>parentControls.asp
>жаль, ничего конкретного тут не говориться... и
>исходников нет :( только дээльэлька...
всё там сказано. WS_EX_TRANSPARENT. и ручное рисование. зачем, если есть WS_EX_LAYERED -- не понятно. и ставить стили цифирью вместо констант -- моветон.


Teenager   (2006-09-22 00:37:00) [39]

извиняюсь, туплю к ночи :) пора идти спать. предложенная ссылка не дает возможности "пробивать" свое окно, зато там люди делают реально клаффную прозрачность.

может, за ночь что-то и придумается.


Teenager   (2006-09-22 00:34:00) [40]

это логично :) но разве не сложнее - отлавливать изменение нижележащего окна и перерисовываться полностью, корректируя цвет каждого пикселя?

а если не так, то как? как-то - можно.

http://www.c-sharpcorner.com//Code/2003/May/TransparentControls.asp

жаль, ничего конкретного тут не говориться... и исходников нет :( только дээльэлька...


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо