Форум: "Основная";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
ВнизАнимированне обои раб.стола Найти похожие ветки
← →
П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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.032 c