Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.31;
Скачать: CL | DM;

Вниз

Анимированне обои раб.стола   Найти похожие ветки 

 
П7   (2004-10-12 17:50) [0]

Теория понятна: Делаем Flash-ролик и отрисовываем его на канве раб стола за иконками. Вся проблема в том, что никак не удаётся добраться до этой самой канвы. Всё, что удалось достич - это получание HDC ЛистБокса, в котором эти иконки располагаются. Но в этом случае иконки так страшно обновляются, что пропадает всякое желание... (:
Уважаемые товарищи, есть ли решение этой проблемы? Поможите пожалуйста, кто чем может. (:


 
П7   (2004-10-12 18:22) [1]

Нда, видимо переработался, даже не смог правильно заголовок написать... "Анимированные обои рабочего стола". ВотЪ! (:
Ну хоть чем-нибудь помогите...


 
DVM ©   (2004-10-12 18:50) [2]

http://www.delphimaster.ru/articles/directx/index.html


 
Sapersky   (2004-10-12 22:09) [3]

Угу. Вполне реально, хотя и муторно (сначала рисовать флэш в битмап, потом копировать в оверлей...). Копирование при разумных размерах оверлея тормозит не очень (особенно если 16 bpp - через LUT), гораздо больше - сам флэш. Или мне ролики такие попадались тормозные?
Видел реализацию флэша на OpenGL ( http://tulrich.com/geekstuff/gameswf.html ) - но на Си, и, как признаёт автор, довольно глючную.


 
TUser ©   (2004-10-12 23:48) [4]


> не удаётся добраться до этой самой канвы. Всё, что удалось
> достич - это получание HDC ЛистБокса, в котором эти иконки
> располагаются.

Рабочий стол - понятие системы, а канва - понятие Delphi, так же как и листбокс.


 
П7   (2004-10-13 01:34) [5]


> TUser ©   (12.10.04 23:48) [4]

Это я всё образно, для понятности.

> Всё, что удалось достич - это получание HDC ЛистБокса

Вот. Через него, родимого, и рисовал.

Почему Flash? Просто видел реализацию подобного через Flash. Но такое удовольствие стоит от $15. Поиметь хочется ничего не отдавая взамен, кроме своего времени на писание программы. Плюс опять же народу может пригодится сей исходник и возможность создавать свои анимированные обои.


 
KSergey ©   (2004-10-13 07:15) [6]

ММ....
А мне всегда казалось, что этот флеш суется в HTML-код и на раб. столе - ActiveDesktop.... Само вроде работать должно.


 
KSergey ©   (2004-10-13 07:17) [7]

Ну или свой ActiveX туда пихнуть...


 
П7   (2004-10-13 10:43) [8]

Ну так вот как??? (:


 
DVM ©   (2004-10-13 11:47) [9]

Самый безглючный способ - так как описано в статье. Все остальное - шаманство, работающее не во всех версиях системы и тормозящее тоже прилично.


 
Sapersky   (2004-10-13 12:48) [10]

Да, мне тоже говорили, что через ActiveDesktop тормозит.


 
П7   (2004-10-13 13:48) [11]

Но этоже изврат - выводить Flash через DirectDraw... Опять же Flash нужен для удобного создания этих самых обоин. Не писать же собственный формат и редактор. Я же не Macromedia... (: Я лопну один такое написать. Но ведь кто-то сделал это. Значит и остальные должны.
Можно было бы написать полностью свой Рабочий стол. Т.е. схавать всю инфу о текущем Раб.столе и затем всё это отрисовать в своей программе. Но как затем подменить имеющийся Раб.стол своей формой?


 
Sapersky   (2004-10-13 17:15) [12]

Полностью свой рабочий стол, включая обработку ввода - это, ИМХО, сложнее (и уж точно объёмнее), чем оверлей.

В принципе, можно подменить только перерисовку. Задать ему свою оконную процедуру или хук поставить. Отлавливать WM_PAINT (или WM_ERASEBACKGROUND - хорошо, если обои по этому сообщению рисуются, но такое счастье маловероятно :)), рисовать что надо, остальные сообщения отправлять в стандартную процедуру.
Только вот сомнительно, что в динамике оно будет нормально работать, допустим, если пользователь перетаскивает иконку...


 
WondeRu ©   (2004-10-13 17:27) [13]

ЛЮДИ!!!!! АУУУ!

Делаете анимированный ГИФ и кидаете на рабочий стол!


 
П7   (2004-10-13 17:49) [14]


> WondeRu ©   (13.10.04 17:27) [13]

Да ты издеваешься? ГИФ у тебя столько ресурсов будет отжирать, что я лучше сразу format c:... (:
Нет, тут нужно что-нибудь хитрожопое придумать!!! (:


 
WondeRu ©   (2004-10-13 17:52) [15]

П7   (13.10.04 17:49) [14]
Да ты издеваешься?

совсем нет! у меня месяц на рабочем столе дохлый Дед Мороз висел))) вокруг него мухи летали)))


 
П7   (2004-10-13 18:08) [16]

Это вероятно была какая-то очень низкопробная картинка. А если сделать, скажем, водопад с брызгами на фоне ночного неба с сыпящимися каметами, и чтобы звук можно было присобачить. И чтобы зверьё бродило какое... Там ГИФ получится на пару десятков метров... (:


 
WondeRu ©   (2004-10-13 18:10) [17]

Было бы прикольно, но жутко отвлекает от основных компутерных работ)
тогда лучше взять любой стандартный проигрыватель, который вопроизводит видео на десктопе... DivX Player н-р


 
П7   (2004-10-13 18:18) [18]

Видео - мастдай для данной задумки. Слишком много весит. Собственно видео будет примерно равно ГИФу, может немного меньше. Опять же в видео не добавишь некой доли рендомайзера для эффектов (дождя, например, снега и т.д.)

Подумалось:
Я не совсем разбираюсь, что же такое оверлей, но ведь он тоже где-то отрисовывает себя? (: Может я тудаже буду Flash отрисовывать?


 
DVM ©   (2004-10-13 19:18) [19]


> В принципе, можно подменить только перерисовку. Задать ему
> свою оконную процедуру или хук поставить. Отлавливать WM_PAINT
> (или WM_ERASEBACKGROUND - хорошо, если обои по этому сообщению
> рисуются, но такое счастье маловероятно :)), рисовать что
> надо, остальные сообщения отправлять в стандартную процедуру.
> Только вот сомнительно, что в динамике оно будет нормально
> работать, допустим, если пользователь перетаскивает иконку...

Обои действительно рисуются по WM_ERASEBACKGROUND окнами Progman и SysListView32 и рисуются они функцией PaintDesktop() если не включен ActiveDesktop. Если включен - я вообще не понимаю как рисуется такой фон в виде веб-страницы в фоне ListView. Работать то оно будет, но не надо забывать, что картина анимированная и экран надо обновлять. Обновлять часто. Если фон мы худо-бедно нарисуем (хотя BitBlt здесь будет работать на грани своих возможностей), то SysListView свои значки будет выводить на порядок дольше и все будет дико мерцать. Вывод один - не трогать значки и РИСОВАТЬ МЕЖДУ НИМИ. Будет казаться что фон анимирован. Тут вот и нужен оверлей. Штука весьма шустро работающая и DirectX быстрее BitBlt(), но Flash на полный экран  - тормоз еще тот.


 
П7   (2004-10-13 21:14) [20]

Ну вот я видел достаточно быструю реализацию отрисовки Flash"а.
У меня подозрение, что фон SysListView прозрачный, а за ним есть нечто, где отрисовывается обоина или ActiveDesctop. Но как до туда добраться?


 
DVM ©   (2004-10-13 21:25) [21]


> У меня подозрение, что фон SysListView прозрачный, а за
> ним есть нечто, где отрисовывается обоина или ActiveDesctop.

Нет, он не прозрачный. Он отрисовывает свой фон сам. Это нечто - это еще одно окно, которое тоже отрисовывает свой фон. Ниже всего - десктоп, на нем лежит картинка (если она bmp).

> Ну вот я видел достаточно быструю реализацию отрисовки Flash"а.

100% сделано через оверлей. Проверить можно так. Открой свойства экрана. Посмотри там цвет фона рабочего стола. Везде, где на экране будет такой цвет должна крутиться флэшка.


 
П7   (2004-10-13 22:51) [22]

Т.е. если иконка тоже будет иметь пару пикселей цвета фона - на них тоже будет отрисовка идти?
Слухай, а что вообще такое, этот оверлей? (: Можно ли его как-нибудь поиметь без DirectDraw?


 
Sapersky   (2004-10-13 23:47) [23]

Слухай, а что вообще такое, этот оверлей?

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

OleDraw(Flash.OleObject, 1, FDIB.hDC, Flash.BoundsRect);

FDIB - битмап, в который рисуется (в данном случае TFastDIB). Затем битмап копируется в оверлей (DXOverlay.DrawImage).

Можно ли его как-нибудь поиметь без DirectDraw?

Теоретически - через OpenGL.


 
DVM ©   (2004-10-13 23:51) [24]


> Т.е. если иконка тоже будет иметь пару пикселей цвета фона
> - на них тоже будет отрисовка идти?

Да, но цвет обычно выбирают таким, чтобы он вряд ли где встречался. Какой-нибудь грязно-болотно-зеленый-бурый. Потому совпадения исключены.

> Слухай, а что вообще такое, этот оверлей? (: Можно ли его
> как-нибудь поиметь без DirectDraw?

Можно. Только насчет скорости не уверен, медленно будет. Суть в следующем. Делать надо только на API.

1) Берем изображение с экрана.
2) Сканируем его в цикле и выделяем точки с нашим цветом (GetPixel).
3) Если есть наш цвет, то заменяем его на точку с нашего изображения (SetPixel)

Мерцать оно может и не будет. Но медленно это (Get/SetPixel).
DirectDraw напрямую работает с оборудованием и драйвером потому его скорость на 2 порядка выше.


 
П7   (2004-10-14 10:44) [25]

ну чтоже, если без статьи не обойтись, значит сейчас сяду читать, потом отчитаюсь... (:



Страницы: 1 вся ветка

Текущий архив: 2004.10.31;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.035 c
14-1097490812
TUser
2004-10-11 14:33
2004.10.31
Кто просил веселых программистов?


14-1096499566
ExEcUTER
2004-09-30 03:12
2004.10.31
"Помошник экзаменатора"и игра "Кости"..курсовая..


6-1092218996
TONG
2004-08-11 14:09
2004.10.31
download при помощи delphi


3-1096549267
Sid
2004-09-30 17:01
2004.10.31
BDE и локалка.


6-1093041116
Baron Fon FasHisT
2004-08-21 02:31
2004.10.31
Заход на страницу.