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

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

поймать событие перерисовки РЕГИОНА ПОД конкретным окном [D6, WinXP]


Альберт ©   (2007-03-10 17:18:00) 

привет. есть окошечко)) каким способом можно узнать что под ним что-то изменилось?))


Альберт   (2007-03-20 11:09:00) [1]


> Как Вы определите, под ним ли сейчас это окно

По координатам


> станет ли оно под ним позже


ловим событие  ресайза и смены положения окон


> Задача у Вас странная, почему окно эксплорера не вашего
> приложения? Почему приходится лезть в чужое


Это точно, что странная.. реализация данного приложения предполагает его использование во всех сферах применения дизайна. смешно наверное, поясню.

принципы:
  маленький размер
  отделение UI от сервиса. нагрузка вычислений никак не отражается на пользовательском интерфейсе.
  гибкость. изменение оформления программы без внесения изменений в код. это реализуется использованием движка ie. в чем фишка. мы знаем, что проблемой основной при использовании браузера является запрет небезопасных актив икс, гемор с настройками по умолчанию (неотображение рисунков и тд), что неприемлимо для меня, невозможность обращения содержимого одного фрейма к содержимому другого с разными доменами.. и так далее.. решение заключается в использовании mshta. создаются окошки с разметкой html и они связываются с программой. можно, конечно, использовать альтернативы, созданные на базе WebBrowser, но они много весят


homm   (2007-03-20 00:34:00) [2]

> ну хоть что-нибудь напишите)) анекдот например))

Ну хорошо :)


> по ходу придется создавать массив из хэндлов окон, которые
> находятся под ним.
Как Вы определите, под ним ли сейчас это окно. а если нет, то не станет ли оно под ним позже? Никак. Отсюда - хранить нужно все окна, периодически сканирую систему, получая текущие окна, сравнивая их с сохраненным списком, и устанавливая хуки на "вновь прибывшие"... Ну не выход это, имхо. Задача у Вас странная, почему окно эксплорера не вашего приложения? Почему приходится лезть в чужое?


Альберт   (2007-03-20 00:12:00) [3]

ну хоть что-нибудь напишите)) анекдот например))


Альберт   (2007-03-18 23:28:00) [4]

по ходу придется создавать массив из хэндлов окон, которые находятся под ним. ловить события смены положения окна и обновлять массив.. да еще WM_PAINT ловить.. а насчет альтернативы может стоит подумать.

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

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


homm   (2007-03-18 20:17:00) [5]

Задачка действительно нетривиальна, и при первом рассмотрении похоже не имеет других решений...

> я имею ввиду получить события перерисовки окон, которые находятся под моим.

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


Альберт   (2007-03-18 19:53:00) [6]

не обращайте внимания, что я написал выше))) сабж тот же))


Альберт   (2007-03-18 19:24:00) [7]

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


Альберт   (2007-03-18 19:16:00) [8]

применяю к чужому окну

WINDOWS.SetWindowLong(W, GWL_EXSTYLE, GetWindowLong(W, GWL_EXSTYLE) or WS_EX_LAYERED);
WINDOWS.SetLayeredWindowAttributes(W, 0, 255, LWA_ALPHA);

теперь его не видит getdc(0).

рисую в бэкграунде getdc(0), а на нем Flash и прочее содержимое.
вопрос только в частоте обновления этой картинки в ie


Альберт   (2007-03-18 19:12:00) [9]

моя задача заключается в:

Работаю с чужим окном. В нем есть 2 объекта:
- Internet Explorer_Server
- Adobe Flash

как мы знаем/не знаем Flash в IE рисуется 3мя способами:
1. Window - создается окно на ie
2. Opaque Windowless - окно не создается, а сразу рисуется Flash Movie
3. Transparent Windowless - тоже самое, что и 2), но рисуется как картинка с прозрачностью для ie.

У меня есть цель нарисовать то, что находится под чужим окном (getdc(0)) на объекте Internet Explorer_Server, но при условии, что на него наложится полупрозрачный ролик  Adobe Flash (3 способ рисования)


homm   (2007-03-18 19:02:00) [10]

> ну что вы говорите!

Клиника не здесь.

Вы же в [7] сказали что Layered окна Вам не подходят (я правда с написанием ошибся).

И зачем тогда ручками? Layered окна вполне понимают "переменную прозрачность" (если я правильно понял, о чем Вы). Поищите пример. Могу выслать ели нужно.


Альберт   (2007-03-18 17:57:00) [11]

ну что вы говорите! а вот так пробовали делать со своим окном?

WINDOWS.SetWindowLong(W, GWL_EXSTYLE, GetWindowLong(W, GWL_EXSTYLE) or WS_EX_LAYERED);

WINDOWS.SetLayeredWindowAttributes(W, 0, 255, LWA_ALPHA);

и не видно его вообще для getdc


homm   (2007-03-18 05:47:00) [12]

> я что там заморачиваться?)) getdc(0) и проблем нет никаких.

Весьма смутное понимание у Вас о вопросе. Проблемы в том, что поверх Ваше окно лежит, которое тоже в этой же DC и отображается.


Альберт   (2007-03-17 23:56:00) [13]


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


я что там заморачиваться?)) getdc(0) и проблем нет никаких. смешиваешь по маске прозрачности со своим окном. проблема-то в другом. как часто мне нужно обновлять окошечко, чтобы все было на высоте?)


>  Копай в сторону DirectX и Layout окон (последнее только
> для win2k+)


не пойдет. раскопал уже. не пошло.


homm   (2007-03-17 23:39:00) [14]

> я ручками реализовываю переменную прозрачность окошка и
> его компонентов.

Еще не научился получать содержимого окна, а цже реализовываешь? :)
ИМХО, ничего у тебя не выйдет. ВинАПИ на это не способен, я говорю как человек хоршо знакомый с природой виндовой реализации событий и действий по перерисовки :) Копй в сторону DirectX и Layout окон (последнее только для win2k+)


Альберт   (2007-03-17 22:57:00) [15]

я имею ввиду получить события перерисовки окон, которые находятся под моим. я ручками реализовываю переменную прозрачность окошка и его компонентов.


clickmaker   (2007-03-16 16:52:00) [16]


> каким способом можно узнать что под ним что-то изменилось?))

если этого не видно, то считай, что ничего не изменилось))


GrayFace   (2007-03-16 16:28:00) [17]

Дак они же под ним. С чего им вообще перерисовываться?


Альберт   (2007-03-16 01:07:00) [18]

вау прикольно)) а может быть ловить события для окошечек под ним?)) а потом перерисовывать


GrayFace   (2007-03-13 12:57:00) [19]

Никак))


Наверх

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